用途
该技能用于从外部组织架构资料(PDF、xlsx、csv 或纯文本的角色-父级配对列表)批量调整 Salesforce 中已有的 UserRole 层级,通过一份经管理员批准的清单一次性提交多项变更。如果管理员仅询问存在哪些角色或它们如何嵌套,应转交给 managing-roles,不进行查询、不询问步骤 0 的问题、不提交。
主要能力
- 读取当前 UserRole 层级(SELECT Id, DeveloperName, Name, ParentRoleId FROM UserRole LIMIT 10000),按 DeveloperName 优先、其次不区分大小写的 Name 匹配资料中的角色。
- 解析资料并解析身份:将资料规范化为 {roleName, parentRoleName, users?} 列表,在差异对比前展示给管理员。角色匹配采用精确 DeveloperName,其次不区分大小写 Name,不做模糊匹配;多个匹配时列出候选并等待管理员选择。用户解析仅在确认重新分配后进行,支持 18 位以 005 开头的 ID、Email、Username、显示名称(仅当恰好一个活跃用户匹配时)。
- 构建清单:每个变更包含 operationId、operationType、dependsOnOperationIds 和一个嵌套 payload。支持的操作类型包括 CreateRole、ReparentRole、RenameRole、DeleteRole、AssignUser 或 MoveUser。
- 验证与预览:在存在循环、缺失父级、重复 developerName、依赖循环、未经步骤 0 确认的 AssignUser/MoveUser、DeleteRole 的预期用户或子级列表非空、或重叠低于 20% 且未确认全新替换时阻止提交。预览中显示变更统计及警告(Territory/预测引用、Portal 角色、超过 500 用户的角色),需明确 yes 才继续。
- 提交:POST /services/data/v{version}/sharing/role-hierarchy-restructure,发送一次已批准的清单,不逐条编辑 UserRole 记录。
- 读取响应:处理 Applied、AppliedSharingPending、AsyncExecutionRequired、RoleOperationInProgress、NotApplied 等状态,以及 404 时停止并告知管理员,不重试、不降级为逐记录编辑。
使用方式
输入可以是可选中文本的 PDF 组织架构图、包含 role_name 和 parent_role_name 的 .xlsx/.csv(空父级表示顶层),或每行一个 Role: Parent 配对的纯文本,也可以是预解析的 {roleName, parentRoleName} 对象列表。可选映射提示用于图表名称与组织 Name 或 DeveloperName 不一致时。流程包括:步骤 0 澄清(范围、用户重新分配、模糊身份、冲突),步骤 1 读取当前层级,步骤 2 解析资料并解析身份,步骤 3 构建清单,步骤 4 验证并预览,步骤 5 提交,步骤 6 读取响应。
适用场景
适用于需要根据外部组织架构资料批量重构 Salesforce 角色层级的管理场景,例如大规模调整角色父子关系、创建新角色、重命名角色、删除空角色以及重新分配用户。
限制
不适用于:单一角色的创建、重命名或重新指定父级且无其他变更;仅询问存在哪些角色或如何嵌套(应转交 managing-roles);区域、账户和预测层级;编写共享规则;纯图片 PDF(需提供文本);回滚操作。DeleteRole 仅当角色在运行时没有直接子级和已分配用户时适用。若资料匹配当前树中少于 20% 的角色,需停止并询问是否为全新替换、错误文件或映射问题,未确认全新替换前不构建清单。20% 到 50% 之间时在预览中显示比例并继续。目标图中存在循环时停止并报告路径。依赖循环阻止提交。提交时 404 表示该客户端层级未启用 API,需停止并告知管理员,不重试、不降级。