trigger ContentDocumentLink on ContentDocumentLink (before insert,after insert,before delete) { // 20231103 陈京武 Lightning文件修改 Start if(StaticParameter.ContentDocumentLink == false){ return; } // 20231105 陈京武 紧急 Start // if(Trigger.isDelete && (Trigger.isBefore)){ // for(ContentDocumentLink link : Trigger.old){ // if(String.valueOf(link.LinkedEntityId).startsWith('a5C') && UserInfo.getProfileId() != (ID)'00e10000000Y3o5AAC'){ // link.addError('请联系管理员'); // } // } // } // 20231105 陈京武 紧急 Start if((!Test.isRunningTest())&&UserInfo.getUserId()==System.Label.ByPassTrigger){ return; } // if (Trigger.isAfter && Trigger.isInsert) { // Set Ids = new Set(); // Map mapcvwithid = new Map(); // for(ContentDocumentLink c:Trigger.new){ // ids.add(c.ContentDocumentId); // mapcvwithid.put(c.ContentDocumentId,c); // } // if(ids.size() > 0){ // for(ContentDocument ContentDocumentObj : [select id,FileType from ContentDocument where id in: ids]){ // if(mapcvwithid.get(ContentDocumentObj.Id).LinkedEntityId != null && ContentDocumentObj.FileType != null){ // String ObjectName = mapcvwithid.get(ContentDocumentObj.Id).LinkedEntityId.getSObjectType().getDescribe().getName(); // String filetype = ContentDocumentObj.FileType.toLowerCase(); // String CsName = ObjectName+'-'+filetype; // ContentDocumentLink ContentDocumentLinkObj = mapcvwithid.get(ContentDocumentObj.Id); // ContentDocumentLinkObj.addError('Testing error'); // return; // } // } // } // } List rentalIds = new List(); List attIds = new List(); List rentalApplyIds = new List(); List accIds = new List(); //20221014 yc 医院审批优化 start List accAppIds = new List(); //20221014 yc 医院审批优化 end // LHJ CHAN-BCLD4P 20190618 Start List specIds = new List(); // LHJ CHAN-BCLD4P 20190618 End // MZY SWAG-BXXBKA 2021-02-19 start List opdIds = new List(); Map opdMap = new Map(); // MZY SWAG-BXXBKA 2021-02-19 end List OpporFileIds = new List(); Map OpporFileUndeleteMap = new Map(); List DeleteReIds = new List(); Map OppordeleteReUserMap = new Map(); Map OppordeleteReTimeMap = new Map(); //CHAN-BCNCRB ---XHL----Start----- List opportunity_FileIds = new List(); List opportunityFileOrderIds = new List(); List oFOrderIds = new List(); Map oFOrderIdMap = new Map(); // sx 20230210start 备品借出申请故障报告附件提取 List rentalApplyFaultIds = new List(); Map> trentalImages = new Map>(); List rentaldeleteApplyFaultIds = new List(); Map> deleteImages = new Map>(); // sx 20230210end 备品借出申请故障报告附件提取 Set docidList = new Set(); Set delDocidList = new Set(); if (Trigger.isBefore && Trigger.isInsert) { for (ContentDocumentLink link : Trigger.new) { if(String.valueOf(link.LinkedEntityId).startsWith(System.Label.Oppor_sepKey)){ opportunity_FileIds.add(link.LinkedEntityId); } if(String.valueOf(link.LinkedEntityId).startsWith('a3Z')){ opportunityFileOrderIds.add(link.LinkedEntityId); } if(!String.valueOf(link.LinkedEntityId).startsWith('a0J') && !String.valueOf(link.LinkedEntityId).startsWith('a0f')){ docidList.add(link.ContentDocumentId); } } } if (Trigger.isAfter && Trigger.isInsert) { for (ContentDocumentLink link : Trigger.new) { if(!String.valueOf(link.LinkedEntityId).startsWith('a0J') && !String.valueOf(link.LinkedEntityId).startsWith('a0f')){ docidList.add(link.ContentDocumentId); } } } if(Trigger.isDelete && Trigger.isBefore){ for (ContentDocumentLink link : Trigger.old) { if(!String.valueOf(link.LinkedEntityId).startsWith('a0J') && !String.valueOf(link.LinkedEntityId).startsWith('a0f')){ docidList.add(link.ContentDocumentId); } delDocidList.add(link.ContentDocumentId); } } ContentVersion ver = new ContentVersion(); System.debug('docidList.size=>' + docidList.size()); if(docidList.size() > 0){ ver = [select FileType,TextPreview,Id from ContentVersion where ContentDocumentId in: docidList limit 1]; System.debug('TextPreview=>' + ver.TextPreview); System.debug('FileType=>' + ver.TextPreview); if(ver.FileType == 'SNOTE'){ System.debug('可恶的备注!!!'); return; } } if (Trigger.isBefore && Trigger.isDelete) { List conDeleteList = new List(); for (ContentDocumentLink link : Trigger.old) { if (String.valueOf(link.LinkedEntityId).startsWith('001')) { accIds.add(link.LinkedEntityId); } // LHJ CHAN-BCLD4P 20190618 Start if(String.valueOf(link.LinkedEntityId).startsWith(System.Label.OppSpecialApply)){ specIds.add(link.LinkedEntityId); } // LHJ CHAN-BCLD4P 20190618 End //20221014 yc 医院审批优化 start if (String.valueOf(link.LinkedEntityId).startsWith('a5C') || String.valueOf(link.LinkedEntityId).startsWith('a5A')) { accAppIds.add(link.LinkedEntityId); } //20221014 yc 医院审批优化 end //2023-11-06 陈京武 备品检测分析报告 start String parentLabel = link.LinkedEntityId.getSObjectType().getDescribe().getName(); System.debug('...' + link.LinkedEntityId.getSObjectType().getDescribe().getName()); if(parentLabel.equals('Rental_Apply_Fault__c')){ rentaldeleteApplyFaultIds.add(link.LinkedEntityId); conDeleteList.add(link); if(deleteImages.containskey(ver.Id)){ deleteImages.get(link.LinkedEntityId).add(ver.Id); }else{ List temp = new List(); temp.add(ver.Id); deleteImages.put(link.LinkedEntityId,temp); } } //2023-11-06 陈京武 备品检测分析报告 end } //2023-2-10 sx备品 备品检测分析报告 start List rafList = [SELECT Id, Name FROM Rental_Apply_Fault__c WHERE Id IN: rentaldeleteApplyFaultIds AND (status__c = '已发送' OR status__c = '已反馈')]; for (Rental_Apply_Fault__c raf : rafList) { for (ContentDocumentLink link1 : conDeleteList) { if (link1.LinkedEntityId == raf.Id) { link1.addError('非草案中的检测分析报告不允许删除已上传的故障图片'); } } } //2023-2-10 sx备品 备品检测分析报告 end } //CHAN-BCNCRB ---XHL----End----- if (Trigger.isAfter && Trigger.isInsert) { List idList = new List(); for (ContentDocumentLink link : Trigger.new) { idList.add(link.ContentDocumentId); } List version = [select Id,Title from ContentVersion where ContentDocumentId in: idList]; for (ContentDocumentLink link : Trigger.new) { //if (att.Name.toUpperCase() == '合同书.PDF' && String.valueOf(att.ParentId).startsWith('a0t')) { // 添付した契約書のファイル名は指定できない if (String.valueOf(link.LinkedEntityId).startsWith('a2K')) { rentalIds.add(link.LinkedEntityId); attIds.add(version[0].Id); } if (String.valueOf(link.LinkedEntityId).startsWith('a0t')) { rentalApplyIds.add(link.LinkedEntityId); } if (String.valueOf(link.LinkedEntityId).startsWith('001')) { accIds.add(link.LinkedEntityId); } //20221014 yc 医院审批优化 start if (String.valueOf(link.LinkedEntityId).startsWith('a5C') || String.valueOf(link.LinkedEntityId).startsWith('a5A')) { accAppIds.add(link.LinkedEntityId); } //20221014 yc 医院审批优化 end System.debug(link.LinkedEntityId +'陈京武'); if(String.valueOf(link.LinkedEntityId).startsWith(System.Label.Oppor_sepKey)){ OpporFileIds.add(link.LinkedEntityId); } // LHJ CHAN-BCLD4P 20190618 Start if(String.valueOf(link.LinkedEntityId).startsWith(System.Label.OppSpecialApply)){ specIds.add(link.LinkedEntityId); } // LHJ CHAN-BCLD4P 20190618 End // MZY SWAG-BXXBKA 2021-02-19 start if(String.valueOf(link.LinkedEntityId).startsWith('a3E')){ opdIds.add(link.LinkedEntityId); opdMap.put(link.LinkedEntityId,version[0].Title); } // MZY SWAG-BXXBKA 2021-02-19 end if(String.valueOf(link.LinkedEntityId).startsWith('a3Z')){ oFOrderIds.add(link.LinkedEntityId); oFOrderIdMap.put(link.LinkedEntityId,true); } //2023-2-10 sx备品 备品检测分析报告 start Id cid = link.LinkedEntityId; String parentLabel = cid.getSObjectType().getDescribe().getName(); if(parentLabel.equals('Rental_Apply_Fault__c')){ rentalApplyFaultIds.add(link.LinkedEntityId); if(trentalImages.containskey(link.LinkedEntityId)){ trentalImages.get(link.LinkedEntityId).add(version[0].Id); }else{ List temp = new List(); temp.add(version[0].Id); trentalImages.put(link.LinkedEntityId,temp); } } //2023-2-10 sx备品 备品检测分析报告 end } } //2023-2-10 sx备品 备品检测分析报告 start if(rentalApplyFaultIds.size() > 0){ List renList = [SELECT Id,AttachmentId1__c,AttachmentId2__c from Rental_Apply_Fault__c where Id in :rentalApplyFaultIds]; system.debug('updrentalApplyFaultList====='+renList); for(Rental_Apply_Fault__c ren : renList){ if(trentalImages.containskey(ren.Id)){ if (ren.AttachmentId1__c == null) { ren.AttachmentId1__c = trentalImages.get(ren.id)[0]; } else if(ren.AttachmentId2__c == null) { ren.AttachmentId2__c = trentalImages.get(ren.id)[0]; } } } system.debug('updrentalApplyFaultList====='+renList); UPDATE renList; } if(rentaldeleteApplyFaultIds.size() > 0){ List renList = [SELECT Id,AttachmentId1__c,AttachmentId2__c from Rental_Apply_Fault__c where Id in :rentaldeleteApplyFaultIds]; system.debug('renList====='+renList); for(Rental_Apply_Fault__c ren : renList){ if(deleteImages.containskey(ren.Id)){ if(deleteImages.get(ren.Id).contains(ren.AttachmentId1__c)){ ren.AttachmentId1__c = ''; } if(deleteImages.get(ren.Id).contains(ren.AttachmentId2__c)){ ren.AttachmentId2__c = ''; } } } system.debug('renList====='+renList); UPDATE renList; } //2023-2-10 sx备品 备品检测分析报告 end if (rentalIds.size() > 0) { List rentalList = new List(); for (Consumable_order__c ra : [select Id from Consumable_order__c where Id in :rentalIds]) { ra.Consumable_pdf_insert_day__c = Date.today(); ra.Order_Attachment__c = attIds[0]; //ra.Order_status__c = '录入完成'; //ra.Contract_pdf_updated__c = true; rentalList.add(ra); } ControllerUtil.updRentalApplyList(rentalList); } if (rentalApplyIds.size() > 0) { List rentalApplyList = new List(); for (Rental_Apply__c ra : [select Id from Rental_Apply__c where Id in :rentalApplyIds]) { ra.Contract_pdf_update_day__c = Date.today(); ra.Contract_pdf_updated__c = true; rentalApplyList.add(ra); } ControllerUtil.updRentalApplyList(rentalApplyList); } if (accIds.size() > 0) { Map attMap = new Map(); // List attList = [select Id, ParentId from Attachment where ParentId = :accIds order by ParentId]; List linkList = [select ContentDocumentId,LinkedEntityId from ContentDocumentLink where ContentDocument.FileType != 'SNOTE' and LinkedEntityId =: accIds order by LinkedEntityId]; System.debug('客户Link的条数:' + linkList.size()); for (ContentDocumentLink link : linkList) { if(!delDocidList.contains(link.ContentDocumentId)){ attMap.put(link.LinkedEntityId, link.LinkedEntityId); } } System.debug('attMap的条数:' + attMap); List updAccList = new List(); //20221207 lt 医院审批优化 start List accList = [select id,Name, Is_Active__c from Account where id in:accIds ]; //20221207 lt 医院审批优化 end for (String accid : accIds) { if(accList.size() > 0){ // Account acc = new Account(Id = accid); //20221207 lt 医院审批优化 start for(Account acc : accList){ if(Trigger.isUpdate && Trigger.isAfter){ for(ContentDocumentLink link : Trigger.New){ if(attMap.containsKey(link.LinkedEntityId) &&acc.Is_Active__c != '草案中'){ System.debug('lt123---草案中---'); link.addError('非草案中,附件不允许编辑。'); return; } } } if(Trigger.isDelete && (Trigger.isBefore)){ for(ContentDocumentLink link : Trigger.old){ if(acc.Is_Active__c != '草案中'){ link.addError('非草案中,附件不允许删除。'); return; } } } acc.Is_upload_file__c = attMap.containsKey(accid); System.debug('是否上传附件:' + attMap.containsKey(accid)); updAccList.add(acc); } } //20221207 lt 医院审批优化 end } // for (String accid : accIds) { // Account acc = new Account(Id = accid); // acc.Is_upload_file__c = attMap.containsKey(accid); // updAccList.add(acc); // } if (updAccList.size() > 0){ StaticParameter.ContentDocumentTrigger = false; update updAccList; } } //20221014 yc 医院审批优化 start if (accAppIds.size() > 0) { Map attMap = new Map(); // List attList = [select Id, ParentId from Attachment where ParentId = :accAppIds order by ParentId]; List linkList = [select ContentDocumentId,LinkedEntityId from ContentDocumentLink where ContentDocument.FileType != 'SNOTE' and LinkedEntityId =: accAppIds order by LinkedEntityId]; for (ContentDocumentLink link : linkList) { if(!delDocidList.contains(link.ContentDocumentId)){ attMap.put(link.LinkedEntityId, link.LinkedEntityId); } } List updAccAppList = new List(); //20221207 lt 医院审批优化 start List adaList = [select id,Name, Is_Active__c from Account_Delay_Apply__c where id in:accAppIds ]; //20221207 lt 医院审批优化 end for (String accappid : accAppIds) { if(adaList.size() > 0){ // Account_Delay_Apply__c accapp = new Account_Delay_Apply__c(Id = accappid); //20221207 lt 医院审批优化 start for(Account_Delay_Apply__c accapp : adaList){ accapp.Is_upload_file__c = attMap.containsKey(accappid); updAccAppList.add(accapp); } } //20221207 lt 医院审批优化 end } try { System.debug('客户变更申请'); if (updAccAppList.size() > 0){ StaticParameter.ContentDocumentTrigger = false; update updAccAppList; } } catch (Exception e) { linkList[0].addError(e.getMessage()); } } //20221014 yc 医院审批优化 end // LHJ CHAN-BCLD4P 20190618 Start if (specIds.size() > 0) { Map attMap = new Map(); // List attList = [select Id, ParentId from Attachment where ParentId = :specIds order by ParentId]; List linkList = [select LinkedEntityId from ContentDocumentLink where ContentDocument.FileType != 'SNOTE' and LinkedEntityId =: specIds order by LinkedEntityId]; for (ContentDocumentLink link : linkList) { attMap.put(link.LinkedEntityId, link.LinkedEntityId); } List updSpecList = new List(); for (String specId : specIds) { OpportunitySpecialApply__c spec = new OpportunitySpecialApply__c(Id = specId); spec.Is_upload_file__c = attMap.containsKey(specId); updSpecList.add(spec); } if (updSpecList.size() > 0) update updSpecList; } // LHJ CHAN-BCLD4P 20190618 End // MZY SWAG-BXXBKA 2021-02-19 start System.debug('SWAG-BXXBKA start'); if (opdIds.size()>0) { List updateOPDs = new List(); OPDPlan__c tempOPD = new OPDPlan__c(); for (String i :opdIds ) { tempOPD.id = i; tempOPD.AttachmentCertificate__c = opdMap.get(i); updateOPDs.add(tempOPD); } System.debug('临时OPD :'+tempOPD); if (updateOPDs.size()>0){ update updateOPDs; } } System.debug('SWAG-BXXBKA end'); // MZY SWAG-BXXBKA 2021-02-19 end if(OpporFileIds.size()>0){ List OpporList = [select id,Last_upload_time__c, Is_Locked__c, Last_upload_user__c, Stock_apply_time__c from Opportunity_File__c where id in:OpporFileIds ]; if(OpporList.size()>0){ for(Opportunity_File__c ofc : OpporList){ if(!ofc.Is_Locked__c){ ofc.Last_upload_user__c = UserInfo.getUserId(); ofc.Last_upload_time__c = System.now(); System.debug(ofc+'23333'); update OpporList; }else{ OpporFileUndeleteMap.put(ofc.id,ofc.id); System.debug(ofc+'23333444444'); } } } } System.debug(Trigger.isDelete+'Trigger.isDelete'); System.debug(Trigger.isBefore+'Trigger.isBefore'); if(Trigger.isDelete && Trigger.isBefore){ for(ContentDocumentLink link : Trigger.old){ if(OpporFileUndeleteMap.containsKey(link.LinkedEntityId)){ link.addError('备货已审批,不可删除附件'); return; }else{ DeleteReIds.add(link.LinkedEntityId); } } } if(Trigger.isInsert){ for(ContentDocumentLink link : Trigger.new){ if(OpporFileUndeleteMap.containsKey(link.LinkedEntityId)){ // ContentDocument doc = [select Id from ContentDocument where Id =: link.ContentDocumentId]; link.addError('备货已审批,不可删除附件'); // link.addError('备货已审批,不可删除附件'); System.debug(Trigger.isBefore+'陈京武'); return; }else{ if(link.LinkedEntityId.getSObjectType().getDescribe().getName() != 'User'){ DeleteReIds.add(link.LinkedEntityId); } // System.debug(Trigger.isBefore+'武'); // DeleteReIds.add(link.LinkedEntityId); } } } if(DeleteReIds.size() > 0){ // List atcList = [select id,ParentId,createddate,createdbyid from Attachment where ParentId in:DeleteReIds]; List linkList = [select LinkedEntityId,ContentDocumentId from ContentDocumentLink where LinkedEntityId in:DeleteReIds]; List idList = new List(); for (ContentDocumentLink link : linkList) { if(link.LinkedEntityId.getSObjectType().getDescribe().getName() != 'User'){ idList.add(link.ContentDocumentId); } } List docList = [select Id,CreatedDate,CreatedById from ContentDocument where Id =: idList]; System.debug(DeleteReIds+'222222222222'); System.debug(docList + 'doclist'); if(docList.size()>0){ for(String ids : DeleteReIds){ for(ContentDocument doc : docList){ if(OppordeleteReTimeMap.containsKey(ids)){ if(doc.CreatedDate > OppordeleteReTimeMap.get(ids)){ OppordeleteReTimeMap.put(ids,doc.CreatedDate); OppordeleteReUserMap.put(ids,doc.CreatedById); }else{ continue; } }else{ OppordeleteReTimeMap.put(ids,doc.CreatedDate); OppordeleteReUserMap.put(ids,doc.CreatedById); } } } System.debug(OppordeleteReTimeMap + 'OppordeleteReTimeMap'); System.debug(OppordeleteReUserMap + 'OppordeleteReUserMap'); List reDateList = [select id,Last_upload_time__c, Is_Locked__c, Last_upload_user__c from Opportunity_File__c where id in:DeleteReIds ]; if(reDateList.size()>0){ for(Opportunity_File__c ofc : reDateList){ ofc.Last_upload_time__c = OppordeleteReTimeMap.get(ofc.id); ofc.Last_upload_user__c = OppordeleteReUserMap.get(ofc.id); System.debug(ofc+'233333333'); } if(Trigger.isInsert && Trigger.isAfter){ update reDateList; } } }else{ List reDateList = [select id,Last_upload_time__c, Is_Locked__c, Last_upload_user__c from Opportunity_File__c where id in:DeleteReIds ]; if(reDateList.size()>0){ for(Opportunity_File__c ofc : reDateList){ if (!ofc.Is_Locked__c) { ofc.Last_upload_time__c = null; ofc.Last_upload_user__c = null; update reDateList; } } } } } //CHAN-BCNCRB ---XHL----Start----- if (opportunity_FileIds.size() > 0) { List opporList = [select id,Last_upload_time__c, Is_Locked__c, Last_upload_user__c, Stock_apply_time__c, Oppor_File_Stage__c from Opportunity_File__c where id in:opportunity_FileIds And Oppor_File_Stage__c = 'G']; List ofIds = new List(); if (opporList.size() > 0) { for (Opportunity_File__c oppf : opporList) { ofIds.add(oppf.Id); } if (ofIds.size() > 0 ) { // List atcList = [select id,ParentId,createddate,createdbyid from Attachment where ParentId in:ofIds]; List linkList = [select ContentDocumentId from ContentDocumentLink where LinkedEntityId in:ofIds]; List idList = new List(); for (ContentDocumentLink link : linkList) { idList.add(link.ContentDocumentId); } List docList = [select Id from ContentDocument where Id in: idList]; if (docList.size() > 0) { delete docList; } } } } //CHAN-BCNCRB ---XHL----End----- if (opportunityFileOrderIds.size() > 0) { List ofoList = [select id, OpporFileStage__c from OpportunityFileOrder__c where Id in:opportunityFileOrderIds And OpporFileStage__c = 'G']; List ofoIds = new List(); if (ofoList.size() > 0) { for (OpportunityFileOrder__c ofo : ofoList) { ofoIds.add(ofo.Id); } if (ofoIds.size() > 0 ) { // List atcList = [select id,ParentId,createddate,createdbyid from Attachment where ParentId in:ofoIds]; List linkList = [select ContentDocumentId from ContentDocumentLink where LinkedEntityId in:ofoIds]; List idList = new List(); for (ContentDocumentLink link : linkList) { idList.add(link.ContentDocumentId); } List docList = [select Id from ContentDocument where Id in: idList]; if (docList.size() > 0) { delete docList; } } } } if (oFOrderIdMap.size() > 0) { List oFOrderList = [select Id,Name,LatestUploadUser__c,LatestUploadTime__c from OpportunityFileOrder__c where Id In : oFOrderIdMap.keySet()]; if (oFOrderList.size() > 0 ) { for (OpportunityFileOrder__c oFOrder :oFOrderList) { System.debug(oFOrderIdMap.get(oFOrder.Id)); if (oFOrderIdMap.get(oFOrder.Id)) { oFOrder.LatestUploadUser__c = UserInfo.getUserId(); oFOrder.LatestUploadTime__c = System.now(); } else if (oFOrderIdMap.get(oFOrder.Id) == false){ oFOrder.LatestUploadUser__c = null; oFOrder.LatestUploadTime__c = null; } } update oFOrderList; } } // DB202304087063 SFDC系统附件上传自动通知功能开发需求 start if (Trigger.isInsert && Trigger.isAfter) { NotetoPdfHandler handler = new NotetoPdfHandler(); handler.run(); } // DB202304087063 SFDC系统附件上传自动通知功能开发需求 end // 20231103 陈京武 Lightning文件修改 End }