Мне нужно создать триггер в Opportunity, чтобы при изменении стадии на «Закрыто как выиграно» выдавалось сообщение об ошибке, в котором говорилось, что вам нужно загрузить вложение, прежде чем переместить его в «Закрыто как выиграно». У меня есть триггер ниже, однако он терпит неудачу, потому что возникает ошибка даже после того, как я загрузил вложение.

trigger closeWonMustAttach on Opportunity (before insert, before update) {



  Map<Id,Opportunity> opportunityAttachments = new Map<Id,Opportunity>(

    [SELECT Id,(SELECT Id FROM Attachments) FROM Opportunity WHERE Id IN :Trigger.new]

  );



  for(Opportunity opp:Trigger.new) {

      if(opp.StageName=='Closed Won'&&

      (!opportunityAttachments.containsKey(opp.id) || 

       opportunityAttachments.get(opp.id).Attachments == null ||

       opportunityAttachments.get(opp.id).Attachments.size()==0))
      opp.StageName.addError('You must first attach a file to this opportunity before changing to Closed/Won.');

    }

  }
0
David Reed 18 Фев 2020 в 17:32
Вы загружаете классические вложения или файлы Lightning? Это разные sObjects.
 – 
David Reed
18 Фев 2020 в 17:33
Я загружаю файлы Lightning.
 – 
Rajsxx
18 Фев 2020 в 18:01

1 ответ

Файлы Lightning не представлены в виде вложений, которые используются для классических файлов. Файлы Lightning используют объект Content. система (ContentDocument, ContentVersion и ContentDocumentLink).

Вы можете запросить их, используя имя дочерней связи AttachedContentDocuments, которое представляет собой список записей ContentDocumentLink.

0
David Reed 18 Фев 2020 в 18:09