実際にはメモと読み表レコードを紐付けるオブジェクト(ContentDocumentLink)があるので、以下はもう少し複雑です。
読み表レコードにメモが追加、更新、削除された時に商談側のメモを更新することと思いますので、
トリガー:「メモ」の更新
↓
メモを追加した読み表レコードの取得(ここで商談Idを取得します)
↓
上記商談Idを使って同じ商談を参照している読み表レコードの取得
↓
ここでループさせて、Idのコレクション変数に読み表レコードのIdを追加します。
↓
このコレクション変数を使ってメモを取得します。
↓
取得したメモでテキストテンプレートにメモ内容を追加します。
↓
最終的に上記商談Idとテキストテンプレートを使って商談を更新します。
深く考えずにコードにしてみたのですが、かなり複雑ですね。
複数のメモがあった場合がもっと面倒だな。
trigger UpdateNote on ContentVersion (after insert, after update) {
//after delete, after undelete
if (Trigger.isAfter) {
Set<Id> cvIdSet = new Set<Id>();
for(ContentVersion cv : Trigger.new) {
if (cv.FileType == 'SNOTE') {
cvIdSet.add(cv.ContentDocumentId);
}
}//end of for
Set<Id> yomihyouIdSet = new Set<Id>();
List<ContentDocumentLink> cdlList = [SELECT Id,LinkedEntityId FROM ContentDocumentLink WHERE ContentDocumentId =: cvIdSet];
for(ContentDocumentLink cdl : cdlList){
String st = cdl.LinkedEntityId;
if (st.left(3) =='a1m'){
//読み表のオブジェクのIdの前から3桁
yomihyouIdSet.add(st);
}
}//end of for
List<yomihyou__c> yomihyouList = [SELECT Id,Opportunity__c FROM yomihyou__c WHERE Id =: yomihyouIdSet ];
Set<Id> oppIdSet = new Set<Id>();
for (yomihyou__c yomi : yomihyouList){
if (yomi.Opportunity__c != null){
oppIdSet.add(yomi.Opportunity__c);
}
}//end of for
if (oppIdSet.size() > 0) {
List<yomihyou__c> yomihyouList2 = [SELECT Id,Opportunity__c FROM yomihyou__c WHERE Opportunity__c=: oppIdSet order by Opportunity__c];
system.debug('--- yomihyouList2 ---' + yomihyouList2);
Map<Id,Id> yomihyouToOpportunityMap = new Map<Id,Id>();
Set<Id> yomihyouIdSet2 = new Set<Id>();
for (yomihyou__c yomi2 : yomihyouList){
yomihyouToOpportunityMap.put(yomi2.Id,yomi2.Opportunity__c);
yomihyouIdSet2.add(yomi2.Id);
}//end of for
system.debug('--- start ---' + yomihyouIdSet2);
List<ContentDocumentLink> cdlList2 = [SELECT Id,ContentDocumentId,LinkedEntityId FROM ContentDocumentLink WHERE LinkedEntityId =: yomihyouIdSet2];
Map<Id,Id> yomihyouToContentDocumentMap = new Map<Id,Id>();
Set<Id> cdlIdSet2 = new Set<Id>();
for(ContentDocumentLink cdl2 : cdlList2){
yomihyouToContentDocumentMap.put(cdl2.LinkedEntityId,cdl2.ContentDocumentId);
cdlIdSet2.add(cdl2.ContentDocumentId);
}//end of for
List<ContentVersion> cvList2 = [SELECT Id,VersionData,TextPreview,ContentDocumentId FROM ContentVersion WHERE FileType = 'SNOTE' AND ContentDocumentId =: cdlIdSet2];
Map<Id,Id> ContentDocumentIdToTextPreviewMap = new Map<Id,String>();
for (ContentVersion cv2 : cvList2){
ContentDocumentIdToTextPreviewMap.put(cv2.ContentDocumentId,cv2.TextPreview);
}
//商談にメモがあるかを確認する
List<ContentDocumentLink> cdlList3 = [SELECT Id,ContentDocumentId,LinkedEntityId FROM ContentDocumentLink WHERE LinkedEntityId =: oppIdSet];
Map<Id,Id> oppToContentDocumentMap = new Map<Id,Id>();
Set<Id> cdlIdSet3 = new Set<Id>();
for(ContentDocumentLink cdl3 : cdlList3){
oppToContentDocumentMap.put(cdl3.LinkedEntityId,cdl3.ContentDocumentId);
cdlIdSet3.add(cdl3.ContentDocumentId);
}
List<ContentVersion> cvList3 = [SELECT Id,VersionData,TextPreview,ContentDocumentId FROM ContentVersion WHERE FileType = 'SNOTE' AND ContentDocumentId =: cdlIdSet3];
for (ContentVersion cv3 : cvList3){
}
LIST<Opportunity> oppList4 = [SELECT Id FROM Opportunity WHERE ID =: oppIdSet ];
for (Opportunity op4 : oppList4){
}
}
}//end of if
}