Salesforce Profile / Permission Set FLS Updater
A VS Code extension to bulk update Salesforce Profile and Permission Set Field Level Security (FLS) XML files using an Excel spreadsheet.
The extension updates:
<fieldPermissions> in Profile XML
<fieldPermissions> in Permission Set XML
The tool supports:
- Updating existing field permissions
- Inserting new field permissions
- Alphabetical insertion logic
- Minimal XML formatting changes
- Preservation of existing XML structure and namespaces
Features
- Profiles (
*.profile-meta.xml)
- Permission Sets (
*.permissionset-meta.xml)
Supported Operations
Update Existing Field Permissions
Example:
<fieldPermissions>
<editable>true</editable>
<field>Account.Description</field>
<readable>true</readable>
</fieldPermissions>
Can be updated to:
<fieldPermissions>
<editable>false</editable>
<field>Account.Description</field>
<readable>true</readable>
</fieldPermissions>
Insert Missing Field Permissions
New permissions are inserted alphabetically relative to existing permissions.
Example:
Existing permissions:
A
B
G
E
New permissions:
C
D
Z
Result:
A
B
C
D
G
E
Z
The Excel file must contain the following columns EXACTLY:
| Filename |
Object API Name |
Field API Name |
Read |
Edit |
| Filename |
Object API Name |
Field API Name |
Read |
Edit |
| Admin.profile-meta.xml |
Account |
BillingCity |
TRUE |
TRUE |
| Admin.profile-meta.xml |
Account |
Description |
TRUE |
FALSE |
| Sales.profile-meta.xml |
Lead |
Status |
TRUE |
TRUE |
| MyPermission.permissionset-meta.xml |
Account |
AnnualRevenue |
TRUE |
FALSE |
Important Notes
Excel File Must Be Closed
The Excel workbook MUST be closed before running the extension.
If the file is open in Excel, the extension may fail to access the file.
How To Use
Step 1 — Open VS Code
Open the Salesforce metadata project in VS Code.
Step 2 — Launch Extension
Open the Command Palette:
Ctrl + Shift + P
Run:
Salesforce XML: Upsert
Provide:
Profiles / Permission Sets Folder
Example:
D:\SalesforceProject\force-app\main\default\profiles
OR
D:\SalesforceProject\force-app\main\default\permissionsets
Excel File Path
Example:
D:\Updates\FLS_Update.xlsx
Step 4 — Run Update
Click:
Run Update
Step 5 — Review Results
The extension will:
- Parse the Excel file
- Group updates by file
- Update existing permissions
- Insert missing permissions
- Save modified XML files
- Display summary logs
Limitations
Supported XML Sections
Currently supported:
NOT supported:
<objectPermissions>
<classAccesses>
<tabVisibilities>
<applicationVisibilities>
<recordTypeVisibilities>
<layoutAssignments>
The extension assumes:
- Standard Salesforce XML formatting
- Properly closed XML tags
- Valid metadata XML
Malformed XML may cause failures.
Large Files
Very large metadata files may take longer to process.
Duplicate Excel Rows
If duplicate field entries exist in Excel for the same file:
Same File + Same Object + Same Field
the latest processed row wins.
Possible Errors
Excel Parse Error
Example:
Excel Parse Error: Cannot access file
Possible causes:
- File path incorrect
- Excel file open in another application
- File locked
- Insufficient permissions
Profile Not Found
Example:
Profile not found: Admin.profile-meta.xml
Possible causes:
- Wrong metadata folder path
- Filename mismatch in Excel
- File does not exist
Invalid XML
Example:
Failed to parse fieldPermissions
Possible causes:
- Corrupted XML
- Invalid Salesforce metadata format
Permission Not Inserted Correctly
Possible causes:
- Duplicate XML blocks
- Manually corrupted metadata
- Non-standard formatting
Test On Small Dataset First
Validate output before large-scale updates.
Use Source Control
Always review generated Git diffs before deployment.
Supported Values
Read
Accepted values:
TRUE
FALSE
true
false
Edit
Accepted values:
TRUE
FALSE
true
false
Example XML Output
<fieldPermissions>
<editable>true</editable>
<field>Account.BillingCity</field>
<readable>true</readable>
</fieldPermissions>
Known Constraints
The extension intentionally DOES NOT:
- Globally sort permissions
- Rebuild entire XML documents
- Modify unrelated metadata sections
This minimizes Git diff noise and preserves metadata readability.