force-app/main/default/classes/MetaDataUtility.cls | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
force-app/main/default/classes/MetaDataUtility.cls-meta.xml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
force-app/main/default/classes/SWOController.cls | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
force-app/main/default/pages/SWOPageRead.page | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
force-app/main/default/classes/MetaDataUtility.cls
New file @@ -0,0 +1,187 @@ public without sharing class MetaDataUtility { public static List<Metadata.LayoutSection> GetRecordTypePageLayout(string record_type_id,string objectType){ Map<string,object> mso = null; string layout_name = GetRecordTypePageLayoutName(record_type_id,objectType,UserInfo.getProfileId()); system.debug('layout_name='+layout_name); List<Metadata.LayoutSection> temp = GetLayoutSections(objectType,layout_name); if(temp==null){ return null; } List<Metadata.LayoutSection> layoutSectionList = new List<Metadata.LayoutSection>(); for(Metadata.LayoutSection section : temp){ boolean a = false; for( Metadata.LayoutColumn c: section.layoutColumns){ //system.debug(c); if(c.layoutItems != null && c.layoutItems.size() > 0 ){ a = true; } } if(a){ layoutSectionList.add(section); } } return layoutSectionList; } /*[{ "attributes": { "type": "Layout", "url": "/services/data/v53.0/tooling/sobjects/Layout/00h10000009iAb5AAE" }, "Id": "00h10000009iAb5AAE", "Name": ".客户人员レイアウト", "TableEnumOrId": "01I10000000er3hEAA", "LayoutType": "Standard" }] */ public static string GetTableOrEnumId(string objectType){ Map<string,object> mso = null; string resp = null; string table_or_enum_id = objectType; List<EntityDefinition> led = [SELECT Id, DurableId, DeveloperName, MasterLabel, Label, QualifiedApiName FROM EntityDefinition where QualifiedApiName = :objectType]; if(led.size()>0){ table_or_enum_id = led[0].DurableId; } /* if(objectType.endsWith('__c')){ resp = ToolingQuery('SELECT id,DeveloperName from CustomObject where DeveloperName =\''+objectType.replace('__c', '')+'\''); if(resp == null){ system.debug('resp is not ok'); return null; }else{ mso = (Map<string,object>)Json.deserializeUntyped(resp); if(integer.valueOf(mso.get('size')) > 0){ table_or_enum_id = string.valueOf(((Map<string,object>)(((List<object>)mso.get('records'))[0])).get('Id')); }else{ system.debug('no records'); return null; } } }*/ return table_or_enum_id; } /* public static List<object> GetAllPageLayout(string objectType){ string resp = null; Map<string,object> mso = null; string table_or_enum_id = GetTableOrEnumId(objectType); if(string.isBlank(table_or_enum_id)){ return new List<object>(); } resp = ToolingQuery('SELECT id,name,TableEnumOrId,LayoutType FROM Layout where TableEnumOrId = \''+table_or_enum_id+'\''); if(resp == null){ system.debug('Layout where TableEnumOrId='+table_or_enum_id+' is null'); return null; }else{ mso = (Map<string,object>)Json.deserializeUntyped(resp); if(integer.valueOf(mso.get('size')) > 0){ return (List<object>)mso.get('records'); }else{ system.debug('no records'); return new List<object>(); } } }*/ public static string GetRecordTypePageLayoutName(string record_type_id,string objectType, string profile_id){ // if(!string.isBlank(objectType)){ // List<sobject> lso = [SELECT Id, Name, DeveloperName, SobjectType, IsActive, Description, BusinessProcessId FROM RecordType where SobjectType = :objectType]; // if(lso.size()==0){ // return string.valueOf(((Map<string,object>)(GetAllPageLayout(objectType)[0])).get('Name')); // } // } // 01210000000QfWdAAK string query = 'SELECT Layout.Name, Layout.TableEnumOrId, ProfileId, Profile.Name, RecordTypeId FROM ProfileLayout where id!=null '; if(!string.isBlank(record_type_id)){ query += ' and RecordTypeId = \''+record_type_id+'\''; } if(!string.isBlank(objectType)){ query += ' and TableEnumOrId = \''+ GetTableOrEnumId(objectType) +'\''; } if(!string.isBlank(profile_id)){ query += ' and ProfileId = \''+profile_id+'\''; } query += ' order by LastModifiedDate desc '; string s = ToolingQuery(query); if(string.isBlank(s)){ system.debug('s is blank'); return null; }else{ Map<string,object> mso = (Map<string,object>)JSON.deserializeUntyped(s); if(integer.valueOf(mso.get('size')) > 0){ List<object> records = ((List<object>)mso.get('records')); mso = (Map<string,object>)(records[0]); return string.valueOf(((Map<string,object>)(mso.get('Layout'))).get('Name')); }else{ return null; } } } public static string ToolingQuery(string query){ system.debug('query='+query); String baseURL = 'callout:SF_Rest_API/services/data/v41.0/tooling/query?q='+ query.replace(' ', '+'); HttpResponse resp = null; HttpRequest req = new HttpRequest(); req.setMethod('GET'); //req.setHeader('Authorization', 'Bearer ' + UserInfo.getsessionid()); //req.setEndpoint(baseURL); req.setEndpoint(baseURL); Http client = new Http(); resp = client.send(req); system.debug(resp.getStatus()); system.debug(resp.getStatusCode()); if(resp.getStatus() == 'OK'){ string s = resp.getBody(); system.debug(resp.getBody()); return s; }else{ system.debug('status is not ok,error:'+resp.getBody()); return null; } } public static List<Metadata.LayoutSection> GetLayoutSections(string object_name, string layout_name){ List<String> componentNameList = new List<String>{object_name+'-'+layout_name}; //通过Metadata.Operations.retrieve获取metadata //Metadata.Layout -> Metadata.LayoutSection -> Metadata.LayoutColumn objects -> Metadata.LayoutItem objects List<Metadata.Metadata> componentList = Metadata.Operations.retrieve(Metadata.MetadataType.Layout, componentNameList); if(componentList?.size() > 0){ Metadata.Layout layout = (Metadata.Layout) componentList.get(0); List<Metadata.LayoutSection> layoutSectionList = layout.layoutSections; return layoutSectionList; } else{ return null; } } } force-app/main/default/classes/MetaDataUtility.cls-meta.xml
New file @@ -0,0 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> <ApexClass xmlns="http://soap.sforce.com/2006/04/metadata"> <apiVersion>54.0</apiVersion> <status>Active</status> </ApexClass> force-app/main/default/classes/SWOController.cls
@@ -6,6 +6,7 @@ public String accId {get; set;} public String conId {get; set;} public List<EmailInfo> mailList {get; set;} public String mailListStr {get{return JSON.serialize(mailList);} set;}// 20220512 PI改造 by zhj public String baseUrl {get; set;} public String type {get; set;} @@ -34,12 +35,13 @@ private String SwoStatus; public String staticResource { get; private set; }// 20220313 PI改造 by Chen Yanan public String contactstaticResource { get; private set; }// 20220313 PI改造 by Chen Yanan public String staticResourceMailMerge { get; private set; }// 20220512 PI改造 by zhj public String contactAWSDataId { get; private set; }// 20220313 PI改造 by Chen Yanan public String contactName { get; private set; }// 20220422 PI改造 by zhj public String contactName { get; private set; }// 20220522 PI改造 by zhj public String swoawsDataId{set;get;}// 20220313 PI改造 by Chen Yanan public Boolean isNew { get; set; }// 20220313 PI改造 by Chen Yanan public String frontCaseId { get; set; }// 20220422 PI改造 by zhj public String frontSwoId { get; set; }// 20220424 PI改造 by zhj public String frontCaseId { get; set; }// 20220522 PI改造 by zhj public String frontSwoId { get; set; }// 20220524 PI改造 by zhj //ASSIGNEDTO__c public SWOController() { @@ -54,6 +56,7 @@ type = System.currentPageReference().getParameters().get('type'); staticResource = JSON.serialize(PIHelper.getPIIntegrationInfo('SWO__c'));// 20220313 PI改造 by Chen Yanan contactstaticResource = JSON.serialize(PIHelper.getPIIntegrationInfo('Contact'));// 20220313 PI改造 by Chen Yanan staticResourceMailMerge = JSON.serialize(PIHelper.getPIIntegrationInfo('Mail_Merge__c'));// 20220512 PI改造 by zhj } public void init() { @@ -80,8 +83,6 @@ // ca = [select id, NUMBER__c,COMPANY__c,CONTACT__c,SUBJECT__c from User_FaultInfo__c where id = : caseId]; ca = [select id, NUMBER__c,COMPANY__c,CONTACT__c,SUBJECT__c, CONTACT__r.AWS_Data_Id__c, CONTACT__r.Name, CONTACT__r.Email from User_FaultInfo__c where id = : caseId];// 20220313 PI改造 by Chen Yanan temp = [select id from SWO__c where CASE_NUMBER__c = :caseId]; contactAWSDataId = String.isNotBlank(ca.CONTACT__r.AWS_Data_Id__c)?ca.CONTACT__r.AWS_Data_Id__c:''; contactName = String.isNotBlank(ca.CONTACT__r.Name)?ca.CONTACT__r.Name:''; } System.debug('ca' + ca.NUMBER__c); System.debug('temp' + temp.size()); @@ -107,7 +108,6 @@ if (swoList.size() > 0) { swo = swoList[0]; swoawsDataId = swo.AWS_Data_Id__c;// 20220313 PI改造 by Chen Yanan // contactAWSDataId = String.isNotBlank(swo.CONTACT__r.AWS_Data_Id__c)?swo.CONTACT__r.AWS_Data_Id__c:'';// 20220313 PI改造 by Chen Yanan } //初始化记录SWO 原始ASSIGNED TO,保存时判断用户是否变更,如果变更给用户发送邮件 assignedUser = swo.ASSIGNEDTO__c; @@ -117,7 +117,7 @@ List<FileAddress__c> attList = new List<FileAddress__c>(); Map<String, List<FileAddress__c>> attMap = new Map<String, List<FileAddress__c>>(); Map<String, Mail_Merge__c> mailMap = new Map<String, Mail_Merge__c>([select id, FROM__c, ccName__c, SUBJECT__c, MESSAGE__c, DATE__c, toName__c, EMAIL_SENT__c from Mail_Merge__c where SWO__c = :swoid order by id]); Map<String, Mail_Merge__c> mailMap = new Map<String, Mail_Merge__c>([select id, FROM__c, ccName__c, SUBJECT__c, MESSAGE__c, DATE__c, toName__c, EMAIL_SENT__c ,AWS_Data_Id__c from Mail_Merge__c where SWO__c = :swoid order by id]); //mailMap = [select id,FROM__c,ccName__c,SUBJECT__c,MESSAGE__c from Mail_Merge__c where SWO__c = :id order by id]; if (mailMap != null) { @@ -190,6 +190,13 @@ swo.SWO_STATUS__c = 'Not Started'; System.debug('SWO: ' + swo); } // update PIPL 20220426 By Chen Yanan Start System.debug('contactAWSDataId: ' + swo.CONTACT__c); if(swo.CONTACT__c != null || ca.CONTACT__c != null){ contactAWSDataId = String.isNotBlank(swo.CONTACT__r.AWS_Data_Id__c)?swo.CONTACT__r.AWS_Data_Id__c:(String.isNotBlank(ca.CONTACT__r.AWS_Data_Id__c)?ca.CONTACT__r.AWS_Data_Id__c:'');// 20220313 PI改造 by Chen Yanan contactName = String.isNotBlank(swo.CONTACT__r.Name)?swo.CONTACT__r.Name:(String.isNotBlank(ca.CONTACT__r.Name)?ca.CONTACT__r.Name:'');// 20220313 PI改造 by Chen Yanan } // update PIPL 20220426 By Chen Yanan End SwoStatus = swo.SWO_STATUS__c; } force-app/main/default/pages/SWOPageRead.page
@@ -8,13 +8,14 @@ <!-- Update 20220315 By Chen Yanan --> <apex:includeScript value="{! URLFOR($Resource.AWSService, 'AWSService.js') }" /> <script> // 20220315 PI改造 by Chen Yanan start var staticResources = JSON.parse('{!staticResource}'); // 20220313 PI改造 by Chen Yanan start AWSService.sfSessionId = '{!GETSESSIONID()}'; var staticResources = JSON.parse('{!staticResource}'); var contactstaticResource = JSON.parse('{!contactstaticResource}'); var aws_data = {}; console.log('AWS' + '{!contactAWSDataId}'); function Decrypt(r,dataIds,callback){ function Decrypt1(r,dataIds,callback){ if (!(dataIds && dataIds.length)) { if(callback)callback(); return; @@ -27,6 +28,7 @@ let $e =j$("[aws-id='"+d.dataId+ "']"); $e.each((i,e)=>{ j$(e).html(d[j$(e).attr("aws-api")]); //j$(e).attr('value',d[j$(e).attr("aws-api")]) }) } @@ -73,8 +75,7 @@ dataIds1.push(v); } }); Decrypt(contactstaticResource,dataIds1,callback); Decrypt1(contactstaticResource,dataIds1,callback); } @@ -86,14 +87,14 @@ dataIds2.push(v); } }); Decrypt(staticResources,dataIds2,callback); Decrypt1(staticResources,dataIds2,callback); } j$(function(){ DecryptSWOAll(); DecryptAll(); }) // 20220315 PI改造 by Chen Yanan end // 20220313 PI改造 by Chen Yanan end j$(document).ready(function() { var type = j$(escapeVfId("type")).value(); @@ -343,7 +344,10 @@ <!-- 20220315 PI改造 by Chen Yanan start --> <!-- <td colspan="2"><apex:outputField value="{!swo.CONTACT_NAME_HIDDEN__c}"/></td> --> <!-- <td colspan="2" align="left" ><apex:outputField html-aws-obj="SWO__C" html-aws-api="contactName" html-aws-id="{!swo.CONTACT_NAME_HIDDEN__c}" id="CONTACT_NAME_HIDDEN__c" value="{!swo.CONTACT_NAME_HIDDEN__c}"/></td> --> <td colspan="2" align="left" ><apex:outputField html-aws-obj="SWO__c" html-aws-api="contactNameHidden" html-aws-id="{!swo.AWS_Data_Id__c}" id="CONTACT_NAME_HIDDEN__c" value="{!swo.CONTACT_NAME_HIDDEN__c}"/></td> <td colspan="2" align="left" > <apex:inputHidden id="AWS_Data_Id__c" value="{!swo.AWS_Data_Id__c}"/> <apex:outputField html-aws-obj="SWO__c" html-aws-api="contactNameHidden" html-aws-id="{!swo.AWS_Data_Id__c}" id="CONTACT_NAME_HIDDEN__c" value="{!swo.CONTACT_NAME_HIDDEN__c}"/> </td> <!-- 20220315 PI改造 by Chen Yanan End --> </tr> @@ -543,14 +547,14 @@ <td>INTERNAL ONLY</td> </tr> <apex:repeat value="{!mailList}" var="mail" id="lines"> <tr class="row"> <tr class="row" id="{!mail.mm.AWS_Data_Id__c}" onmouseover="showPI('{!mail.mm.AWS_Data_Id__c}')"> <td><apex:outputLink value="/apex/SendEmail?id={!mail.mm.ID}&type=SWO&typeid={!swoid}&openType=View">View</apex:outputLink> <apex:outputLink value="/apex/SendEmail?id={!mail.mm.ID}&type=SWO&typeid={!swoid}&openType=Reply">Reply</apex:outputLink></td> <td><apex:outputField value="{!mail.mm.DATE__c}" /></td> <td><apex:outputField value="{!mail.mm.FROM__c}" /></td> <td><apex:outputField value="{!mail.mm.MESSAGE__c}" /></td> <td><apex:outputText value="{!mail.mm.EMAIL_SENT__c}" /></td> <td><apex:outputField value="{!mail.mm.toName__c}" /></td> <td><apex:outputField value="{!mail.mm.ccName__c}" /></td> <td><apex:outputField value="{!mail.mm.DATE__c}"/></td> <td id="{!mail.mm.AWS_Data_Id__c}_FROM"><apex:outputField value="{!mail.mm.FROM__c}" /></td> <td><apex:outputField value="{!mail.mm.MESSAGE__c}"/></td> <td><apex:outputText value="{!mail.mm.EMAIL_SENT__c}"/></td> <td id="{!mail.mm.AWS_Data_Id__c}_toName"><apex:outputField value="{!mail.mm.toName__c}"/></td> <td id="{!mail.mm.AWS_Data_Id__c}_ccName"><apex:outputField value="{!mail.mm.ccName__c}"/></td> <td><apex:outputText value="{!mail.haveAtt}" /></td> <td> <apex:repeat value="{!mail.attList}" var="att" id="lines"> @@ -768,7 +772,8 @@ <!-- 20220315 PI改造 by Chen Yanan start --> <!-- <td><apex:outputField value="{!swo.CONTACT__c}" ></apex:outputField></td> --> <td colspan="2" align="left" > <a href="/{!swo.CONTACT__c}" aws-obj="Contact" aws-api="lastName" aws-id="{!contactAWSDataId}">{!swo.CONTACT__r.Name}</a> <!-- <a href="/{!swo.CONTACT__c}" aws-obj="Contact" aws-api="lastName" aws-id="{!contactAWSDataId}">{!swo.CONTACT__r.Name}</a> --> <a href="/{!swo.CONTACT__c}" aws-obj="Contact" aws-api="lastName" aws-id="{!contactAWSDataId}">{!contactName}</a> </td> <!-- 20220315 PI改造 by Chen Yanan End --> <td><apex:outputField value="{!swo.TRAN__c}"/></td> @@ -1829,6 +1834,167 @@ <br/> <br/> <apex:commandButton action="{!edit}" value="EDIT" style="width: 5%;"/> <script> function stringbuilder() { this.arr = new Array(); this.append = function (str) { this.arr.push(str); } this.tostring = function () { return this.arr.join(''); } } function toJSONString(s) { var sb = new stringbuilder() for (var i = 0; i < s.length; i++) { var c = s[i]; switch (c) { case '\"': sb.append("\\\""); break; case '\\': sb.append("\\\\"); break; case '/': sb.append("\\/"); break; case '\b': sb.append("\\b"); break; case '\f': sb.append("\\f"); break; case '\n': sb.append("\\n"); break; case '\r': sb.append("\\r"); break; case '\t': sb.append("\\t"); break; case '=': sb.append("="); break; case '&': sb.append("&"); break; case '?': sb.append("?"); break; case '%': sb.append("%"); break; default: if ((c >= 0 && c <= 31) || c == 127)//在ASCⅡ码中,第0~31号及第127号(共33个)是控制字符或通讯专用字符 { } else { sb.append(c); } break; } } return sb.tostring() } console.log('{!mailListStr}'.replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/\s+/g,"").replace("\"/g","\\\"")) var mailListObj = JSON.parse('{!mailListStr}'.replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/\s+/g,"")) var staticResourceMailMerge = JSON.parse('{!staticResourceMailMerge}') var mailList = [] var PIDataObjList = {} function showPI(awsId){ if(awsId){ document.getElementById(awsId).children[2].children[0].children[0].innerText = PIDataObjList[awsId].author document.getElementById(awsId).children[5].children[0].innerText = PIDataObjList[awsId].premaryRecipient document.getElementById(awsId).children[6].children[0].innerText = PIDataObjList[awsId].cc } } for(var i=0;i<mailListObj.length;i++){ mailList.push(mailListObj[i].mm.AWS_Data_Id__c) } var queryBack = function queryBack(data){ console.log(data) if (data.object) { for (var i=0;i<data.object.length;i++) { // var PIDataObj = {}; // var d = {}; // PIDataObj.author = data.object[i].author // PIDataObj.premaryRecipient = data.object[i].premaryRecipient // PIDataObj.cc = data.object[i].cc // d[data.object[i].dataId] = PIDataObj // PIDataObjList.push(d) var PIDataObj = {}; PIDataObj.author = data.object[i].author PIDataObj.premaryRecipient = data.object[i].premaryRecipient PIDataObj.cc = data.object[i].cc PIDataObjList[data.object[i].dataId] = PIDataObj; } } unblockUI(); }; document.body.onload = function(){ blockme(); console.log('appendToOnloadQueue'); let searchPayload = new Object(); searchPayload.dataIds = mailList; AWSService.search(staticResourceMailMerge.searchUrl,JSON.stringify(searchPayload),queryBack,staticResourceMailMerge.token); } </script> </apex:form>