Loading
Compartilhar acesso temporário a registros em Advanced Approvals

Compartilhar acesso temporário a registros em Advanced Approvals

Compartilhe acesso temporário a registros relacionados com seus aprovadores configurando acionadores. Depois que a ação de aprovação for concluída, use um acionador para retirar o acesso ao registro.

Quando você envia um registro para aprovação, o aprovador deve ter acesso ao objeto relacionado do registro para realizar ações na solicitação de aprovação. Se o padrão de compartilhamento organizacional interno do seu objeto for Privado, você poderá usar um acionador para criar um objeto de compartilhamento que conceda acesso ao aprovador. Depois que o registro é aprovado, você pode retirar o acesso ao registro usando um acionador para excluir o registro de compartilhamento.

  1. Crie um acionador do Apex para compartilhar o acesso ao objeto relacionado de um registro. Em Segurança, selecione o perfil do aprovador. Consulte Definir acionadores do Apex.
    Dica
    Dica

    Se você estiver compartilhando o acesso a um objeto personalizado, poderá criar um motivo de compartilhamento do Apex e incluí-lo no acionador. Um motivo de compartilhamento do Apex restringe o acesso ao registro ao seu caso de uso específico.

  2. Crie um acionador do Apex para excluir o registro de compartilhamento e revogar o acesso ao registro após a conclusão da solicitação de aprovação. Em Segurança, selecione o perfil do aprovador.

    Você pode personalizar o snippet de código de amostra conforme seu caso de uso específico.

    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
    }
    }
    }
    }
    
 
Carregando
Salesforce Help | Article