Loading
在高级批准中共享对记录的临时访问权限

在高级批准中共享对记录的临时访问权限

通过设置触发器,与批准人共享对相关记录的临时访问权限。批准操作完成后,使用触发器撤销记录访问权限。

在您提交记录以待批准时,批准人必须有权访问记录的相关对象,才能对批准请求执行操作。如果对象的内部组织范围共享默认设置是专用,您可以使用触发器创建共享对象,以授予批准人访问权限。记录获得批准后,您可以使用触发器删除共享记录来撤销对记录的访问权限。

  1. 创建 Apex 触发器,以共享对记录相关对象的访问权限。在安全性下,选择批准人的简档。见定义 Apex 触发器
    提示
    提示

    如果您共享对自定义对象的访问权限,您可以创建 Apex 共享原因并将其包含在触发器中。Apex 共享原因将记录访问权限限制为特定用例。

  2. 创建 Apex 触发器,以在批准请求完成后删除共享记录并撤销记录访问权限。在安全性下,选择批准人的简档。

    您可以自定义示例代码片段,以满足您的特定用例。

    trigger AWIUpdate on ApprovalWorkItem(after update) {
    List<ApprovalWorkItem> awiList = new List<ApprovalWorkItem>();
    // Get the related opportunities for the accounts in this trigger
    awiList = [SELECT Id, RelatedRecordId, AssignedToId FROM ApprovalWorkItem WHERE Id IN :Trigger.new];
    
    for (ApprovalWorkItem awi : awiList) {
    // Use the related record id, to delete the share record created for the user
    
    Id relatedRecordId = awi.RelatedRecordId;
    Id assignedToId = awi.AssignedToId;
    
    SObjectType relatedRecordType = relatedRecordId.getSObjectType();
    if (relatedRecordType.getDescribe().isCustom()) {
    Map<String, Schema.SObjectType> tokens = Schema.getGlobalDescribe();
    String relatedRecordShareName = relatedRecordType.getDescribe().getName().removeEnd('__c') + '__Share';
    if(tokens.containsKey(relatedRecordShareName)) {
    // Share object exists
    SObject[] customShare = Database.query('SELECT Id FROM '
    + relatedRecordShareName + ' WHERE '
    + ' RowCause = \'AdvancedApprovalTriggerShareReason__c\' '
    + ' AND ParentId = :relatedRecordId'
    + ' AND UserOrGroupId = :assignedToId');
    } else {
    // OWD is Public Read Write
    }
    }
    }
    }
    
 
正在加载
Salesforce Help | Article