跳到主要内容

Removing individual fields

Remove unnecessary fields from forms by their ID or index for interface simplification, hiding internal fields, or dynamic form customization based on user roles:

let doc = Api.GetDocument();

// Simulate user authentication and role determination
let currentUser = {
username: "john.employee",
role: "employee", // Can be "admin" or "employee"
department: "Sales"
};

// Create a comprehensive employee evaluation form
function createEmployeeEvaluationForm() {
let paragraph = doc.GetElement(0);
paragraph.AddText("Employee Performance Evaluation");
paragraph.SetFontSize(18 * 2);
paragraph.SetBold(true);
paragraph.SetJc("center");

// Basic Information Section
paragraph = Api.CreateParagraph();
paragraph.AddText("Basic Information");
paragraph.SetFontSize(14 * 2);
paragraph.SetBold(true);
doc.Push(paragraph);

// Employee Name
paragraph = Api.CreateParagraph();
paragraph.AddText("Employee Name: ");
paragraph.SetFontSize(12 * 2);
let nameForm = Api.CreateTextForm({
key: "employee_name",
required: true,
placeholder: "Enter employee name",
maxCharacters: 50,
multiLine: false,
autoFit: true,
});
paragraph.AddElement(nameForm);
doc.Push(paragraph);

// Department
paragraph = Api.CreateParagraph();
paragraph.AddText("Department: ");
paragraph.SetFontSize(12 * 2);
let deptForm = Api.CreateComboBoxForm({
key: "department",
required: true,
placeholder: "Select department",
editable: false,
autoFit: true,
items: ["Sales", "Marketing", "IT", "HR", "Finance"]
});
paragraph.AddElement(deptForm);
doc.Push(paragraph);

// Performance Rating
paragraph = Api.CreateParagraph();
paragraph.AddText("Overall Performance: ");
paragraph.SetFontSize(12 * 2);
let ratingForm = Api.CreateComboBoxForm({
key: "performance_rating",
required: true,
placeholder: "Select rating",
editable: false,
autoFit: true,
items: ["Excellent", "Good", "Satisfactory", "Needs Improvement"]
});
paragraph.AddElement(ratingForm);
doc.Push(paragraph);

// Public Comments (visible to all)
paragraph = Api.CreateParagraph();
paragraph.AddText("Public Comments: ");
paragraph.SetFontSize(12 * 2);
let publicCommentsForm = Api.CreateTextForm({
key: "public_comments",
required: false,
placeholder: "Enter feedback visible to employee",
maxCharacters: 200,
multiLine: true,
autoFit: true,
});
paragraph.AddElement(publicCommentsForm);
doc.Push(paragraph);

// Internal Notes (admin only)
paragraph = Api.CreateParagraph();
paragraph.AddText("Internal Notes (Admin Only): ");
paragraph.SetFontSize(12 * 2);
paragraph.SetColor(255, 0, 0);
let internalNotesForm = Api.CreateTextForm({
key: "internal_notes",
required: false,
placeholder: "Confidential notes for management only",
maxCharacters: 300,
multiLine: true,
autoFit: true,
});
paragraph.AddElement(internalNotesForm);
doc.Push(paragraph);

// Salary Adjustment (admin only)
paragraph = Api.CreateParagraph();
paragraph.AddText("Salary Adjustment: ");
paragraph.SetFontSize(12 * 2);
paragraph.SetColor(255, 0, 0);
let salaryForm = Api.CreateTextForm({
key: "salary_adjustment",
required: false,
placeholder: "Enter adjustment amount",
maxCharacters: 20,
multiLine: false,
autoFit: true,
});
paragraph.AddElement(salaryForm);
doc.Push(paragraph);

// Termination Risk (admin only)
paragraph = Api.CreateParagraph();
let terminationCheckbox = Api.CreateCheckBoxForm({
key: "termination_risk",
required: false,
tip: "Employee at risk of termination",
checked: false
});
paragraph.AddElement(terminationCheckbox);
paragraph.AddText(" At risk of termination (Admin Only)");
paragraph.SetFontSize(12 * 2);
paragraph.SetColor(255, 0, 0);
doc.Push(paragraph);

// Promotion Candidate (admin only)
paragraph = Api.CreateParagraph();
let promotionCheckbox = Api.CreateCheckBoxForm({
key: "promotion_candidate",
required: false,
tip: "Candidate for promotion",
checked: false
});
paragraph.AddElement(promotionCheckbox);
paragraph.AddText(" Promotion candidate (Admin Only)");
paragraph.SetFontSize(12 * 2);
paragraph.SetColor(255, 0, 0);
doc.Push(paragraph);
}

// Function to remove fields based on user role
function removeFieldsByUserRole(userRole) {
let removedFields = [];

// Define admin-only fields that should be removed for non-admin users
let adminOnlyFields = [
"internal_notes",
"salary_adjustment",
"termination_risk",
"promotion_candidate"
];

// If user is not admin, remove admin-only fields
if (userRole !== "admin") {
for (let fieldKey of adminOnlyFields) {
let removed = removeFieldByKey(fieldKey);
if (removed) {
removedFields.push(fieldKey);
}
}
}

return removedFields;
}

// Function to remove a specific field by its key
function removeFieldByKey(fieldKey) {
let forms = doc.GetFormsByKey(fieldKey);

if (forms.length > 0) {
let form = forms[0];
let formType = form.GetFormType();

// Mark field as removed based on form type
if (formType === "textForm") {
// For text forms, set removal message
form.SetText("[FIELD REMOVED - INSUFFICIENT PERMISSIONS]");
} else if (formType === "checkBoxForm") {
// For checkboxes, uncheck to indicate removal
form.SetChecked(false);
} else if (formType === "comboBoxForm") {
// For combo boxes, set removal message
form.SetText("[REMOVED - NO ACCESS]");
}

// Apply strikethrough formatting to the form's text properties
try {
let textPr = form.GetTextPr();
if (textPr) {
textPr.SetStrikeout(true);
}
} catch (e) {
// If GetTextPr is not available, continue without strikethrough
console.log("Strikethrough formatting not available for this form type");
}

return true;
}

return false;
}

// Function to check if field exists in form
function checkFieldExists(fieldKey) {
let forms = doc.GetFormsByKey(fieldKey);
return forms.length > 0;
}

// Function to get user role (simulated authentication)
function getUserRole(username) {
// Simulate role determination based on username
let userRoles = {
"admin.manager": "admin",
"john.employee": "employee",
"jane.supervisor": "employee",
"mike.admin": "admin"
};

return userRoles[username] || "employee";
}

// Create the evaluation form
createEmployeeEvaluationForm();

// Add spacing
let paragraph = Api.CreateParagraph();
paragraph.AddText("");
doc.Push(paragraph);

// Add role-based field removal demonstration
paragraph = Api.CreateParagraph();
paragraph.AddText("Role-Based Field Management");
paragraph.SetFontSize(16 * 2);
paragraph.SetBold(true);
doc.Push(paragraph);

// Step 1: Determine user role
paragraph = Api.CreateParagraph();
paragraph.AddText("Step 1: User Role Determination");
paragraph.SetFontSize(14 * 2);
paragraph.SetBold(true);
doc.Push(paragraph);

let userRole = getUserRole(currentUser.username);
currentUser.role = userRole;

paragraph = Api.CreateParagraph();
paragraph.AddText(`✓ User: ${currentUser.username}`);
paragraph.SetFontSize(12 * 2);
doc.Push(paragraph);

paragraph = Api.CreateParagraph();
paragraph.AddText(`✓ Role: ${currentUser.role}`);
paragraph.SetFontSize(12 * 2);
doc.Push(paragraph);

paragraph = Api.CreateParagraph();
paragraph.AddText(`✓ Department: ${currentUser.department}`);
paragraph.SetFontSize(12 * 2);
doc.Push(paragraph);

// Step 2: Check field existence
paragraph = Api.CreateParagraph();
paragraph.AddText("Step 2: Field Existence Check");
paragraph.SetFontSize(14 * 2);
paragraph.SetBold(true);
doc.Push(paragraph);

let internalNotesExists = checkFieldExists("internal_notes");
paragraph = Api.CreateParagraph();
paragraph.AddText(`✓ Internal Notes field exists: ${internalNotesExists ? "Yes" : "No"}`);
paragraph.SetFontSize(12 * 2);
doc.Push(paragraph);

// Step 3: Remove fields based on role
paragraph = Api.CreateParagraph();
paragraph.AddText("Step 3: Dynamic Field Removal");
paragraph.SetFontSize(14 * 2);
paragraph.SetBold(true);
doc.Push(paragraph);

let removedFields = removeFieldsByUserRole(currentUser.role);

if (removedFields.length > 0) {
paragraph = Api.CreateParagraph();
paragraph.AddText(`✓ Removed ${removedFields.length} admin-only fields:`);
paragraph.SetFontSize(12 * 2);
paragraph.SetColor(255, 0, 0);
doc.Push(paragraph);

for (let fieldKey of removedFields) {
paragraph = Api.CreateParagraph();
paragraph.AddText(`${fieldKey}`);
paragraph.SetFontSize(10 * 2);
doc.Push(paragraph);
}
} else {
paragraph = Api.CreateParagraph();
paragraph.AddText("✓ No fields removed - user has admin privileges");
paragraph.SetFontSize(12 * 2);
paragraph.SetColor(0, 128, 0);
doc.Push(paragraph);
}

// Add implementation guide
paragraph = Api.CreateParagraph();
paragraph.AddText("");
doc.Push(paragraph);

paragraph = Api.CreateParagraph();
paragraph.AddText("Implementation Guide:");
paragraph.SetFontSize(14 * 2);
paragraph.SetBold(true);
doc.Push(paragraph);

paragraph = Api.CreateParagraph();
paragraph.AddText("1. User Role Determination");
paragraph.SetFontSize(12 * 2);
paragraph.SetBold(true);
doc.Push(paragraph);

paragraph = Api.CreateParagraph();
paragraph.AddText("• Authenticate user and determine role (admin/employee)");
paragraph.SetFontSize(10 * 2);
doc.Push(paragraph);

paragraph = Api.CreateParagraph();
paragraph.AddText("• Check user permissions for sensitive fields");
paragraph.SetFontSize(10 * 2);
doc.Push(paragraph);

paragraph = Api.CreateParagraph();
paragraph.AddText("2. Field Existence Check");
paragraph.SetFontSize(12 * 2);
paragraph.SetBold(true);
doc.Push(paragraph);

paragraph = Api.CreateParagraph();
paragraph.AddText("• Use GetFormsByKey() to find fields by ID");
paragraph.SetFontSize(10 * 2);
doc.Push(paragraph);

paragraph = Api.CreateParagraph();
paragraph.AddText("• Verify field exists before attempting removal");
paragraph.SetFontSize(10 * 2);
doc.Push(paragraph);

paragraph = Api.CreateParagraph();
paragraph.AddText("3. Dynamic Field Removal");
paragraph.SetFontSize(12 * 2);
paragraph.SetBold(true);
doc.Push(paragraph);

paragraph = Api.CreateParagraph();
paragraph.AddText("• Remove or hide fields based on user role");
paragraph.SetFontSize(10 * 2);
doc.Push(paragraph);

paragraph = Api.CreateParagraph();
paragraph.AddText("• Maintain form structure and validation");
paragraph.SetFontSize(10 * 2);
doc.Push(paragraph);

paragraph = Api.CreateParagraph();
paragraph.AddText("• Provide appropriate user feedback");
paragraph.SetFontSize(10 * 2);
doc.Push(paragraph);

// Add use cases
paragraph = Api.CreateParagraph();
paragraph.AddText("");
doc.Push(paragraph);

paragraph = Api.CreateParagraph();
paragraph.AddText("Common Use Cases:");
paragraph.SetFontSize(14 * 2);
paragraph.SetBold(true);
doc.Push(paragraph);

paragraph = Api.CreateParagraph();
paragraph.AddText("• Hide sensitive fields from non-admin users");
paragraph.SetFontSize(12 * 2);
doc.Push(paragraph);

paragraph = Api.CreateParagraph();
paragraph.AddText("• Simplify forms based on user experience level");
paragraph.SetFontSize(12 * 2);
doc.Push(paragraph);

paragraph = Api.CreateParagraph();
paragraph.AddText("• Remove department-specific fields for other departments");
paragraph.SetFontSize(12 * 2);
doc.Push(paragraph);

paragraph = Api.CreateParagraph();
paragraph.AddText("• Dynamic form customization based on previous selections");
paragraph.SetFontSize(12 * 2);
doc.Push(paragraph);