Advanced Approvals でのレコードへの一時的なアクセス権の共有
トリガーを設定して、関連レコードへの一時的なアクセス権を承認者と共有します。承認アクションが完了したら、トリガーを使用してレコードアクセス権を取り消します。
レコードの承認を申請する場合、承認者はレコードの関連オブジェクトにアクセスして承認申請に対するアクションを実行する必要があります。オブジェクトの内部組織の共有設定が [非公開] の場合、トリガーを使用して承認者にアクセス権を付与する共有オブジェクトを作成できます。レコードが承認されたら、トリガーを使用して共有レコードを削除することで、レコードアクセス権を取り消すことができます。
-
レコードの関連オブジェクトへのアクセスを共有する Apex トリガーを作成します。[セキュリティ] で、承認者のプロファイルを選択します。「Define Apex Triggers」を参照してください。
ヒントカスタム オブジェクトへのアクセスを共有している場合は、Apex 共有理由を作成してトリガーに含めることができます。Apex 共有の理由で、特定の使用事例へのレコード アクセスが制限されます。
-
承認申請の完了後に共有レコードを削除し、レコードへのアクセスを取り消す 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 } } } }
この記事で問題は解決されましたか?
ご意見をお待ちしております。
