Я пытаюсь создать триггер 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;
}
Мне интересно, как можно обойти эту проблему уровня доступа, чтобы эти ссылки общего доступа можно было создавать автоматически, а не путем ручного импорта из загрузчика файлов.