Ошибка разрешения при автоматическом обмене файлом Salesforce с Apex Trigger - PullRequest
0 голосов
/ 26 марта 2019

Я пытаюсь создать триггер Apex, который автоматически делится приложенным файлом Salesforce с пользователем, связанным с записью, в которую был загружен файл. Я полагаю, что создал рабочий код для этого, но при его тестировании я получаю следующее сообщение об ошибке, касающееся уровня разрешений / доступа:

Error: There were custom validation error(s) encountered while saving the affected record(s). 
The first validation error encountered was "Apex trigger 
ContentDocumentLinkTrigger caused an unexpected exception, contact your administrator: 
ContentDocumentLinkTrigger: execution of AfterInsert caused by: 
System.DmlException: Insert failed. First exception on row 0; first error: 
INSUFFICIENT_ACCESS_ON_CROSS_REFERENCE_ENTITY, You do not have the level of access 
necessary to perform the operation you requested. Please contact the owner of the 
record or your administrator if access is necessary.: [LinkedEntityId]: 
Trigger.ContentDocumentLinkTrigger: line 37, column 1".

Я системный администратор, поэтому я не ожидал столкнуться с проблемой уровня доступа. Я искал информацию об этой проблеме совместного использования, а также об общем доступе к Файлам, но не нашел ничего, что помогло бы моей ситуации.

Мой триггер выглядит следующим образом:

trigger ContentDocumentLinkTrigger on ContentDocumentLink (after insert) {

    // Get docLinks inserted
    List<ContentDocumentLink> docLinks = Trigger.New;
    // Create list for new docLinks to add
    List<ContentDocumentLink> linksToAdd = new List<ContentDocumentLink>();

    // Get ProDefDocs from docLinks
    List<String> docLinkContactIds = new List<String>();
    for(ContentDocumentLink l : docLinks){
        String l_id = '' + l.LinkedEntityId;
        if(l_id.contains('a2Z')){
            docLinkContactIds.add(l_id);       
        }
    }
    List<Professional_Development_Document__c> contactDocs = [SELECT ID, Contact.Contact_UserID__c 
                                                           FROM Professional_Development_Document__c 
                                                           WHERE Id IN :docLinkContactIds];
    Map<String, String> contacts = new Map<String, String>();
    for(Professional_Development_Document__c doc : contactDocs){
        contacts.put(doc.Id, doc.Contact.Contact_UserID__c);
    }

    for(ContentDocumentLink l : docLinks){
        String lid = '' + l.LinkedEntityId;
        if(lid.contains('a2Z')){
            system.debug('contentdocid: '+l.LinkedEntityId);
            system.debug('maptest: '+contacts.get(l.LinkedEntityId));
            linksToAdd.add(new ContentDocumentLink(ContentDocumentId=l.ContentDocumentId,
                                                   LinkedEntityId=contacts.get(l.LinkedEntityId),
                                                   ShareType='C'));
        }
    }
    insert linksToAdd;
}

Мне интересно, как можно обойти эту проблему уровня доступа, чтобы эти ссылки общего доступа можно было создавать автоматически, а не путем ручного импорта из загрузчика файлов.

...