From 08a21f49f2eaf9cfc19ceb67b196cc36ba689305 Mon Sep 17 00:00:00 2001 From: buli <137736985@qq.com> Date: 星期五, 13 五月 2022 20:52:25 +0800 Subject: [PATCH] FIxSWOPageIssue --- force-app/main/default/classes/SWOController.cls | 21 ++- force-app/main/default/pages/SWOPageRead.page | 198 ++++++++++++++++++++++++++-- force-app/main/default/classes/MetaDataUtility.cls-meta.xml | 5 force-app/main/default/classes/MetaDataUtility.cls | 187 ++++++++++++++++++++++++++ 4 files changed, 388 insertions(+), 23 deletions(-) diff --git a/force-app/main/default/classes/MetaDataUtility.cls b/force-app/main/default/classes/MetaDataUtility.cls new file mode 100644 index 0000000..3466204 --- /dev/null +++ b/force-app/main/default/classes/MetaDataUtility.cls @@ -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; + } + + } +} \ No newline at end of file diff --git a/force-app/main/default/classes/MetaDataUtility.cls-meta.xml b/force-app/main/default/classes/MetaDataUtility.cls-meta.xml new file mode 100644 index 0000000..40d6793 --- /dev/null +++ b/force-app/main/default/classes/MetaDataUtility.cls-meta.xml @@ -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> diff --git a/force-app/main/default/classes/SWOController.cls b/force-app/main/default/classes/SWOController.cls index 6164b52..a35cca6 100644 --- a/force-app/main/default/classes/SWOController.cls +++ b/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 } //鍒濆鍖栬褰昐WO 鍘熷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; } diff --git a/force-app/main/default/pages/SWOPageRead.page b/force-app/main/default/pages/SWOPageRead.page index f53c130..3f64b56 100644 --- a/force-app/main/default/pages/SWOPageRead.page +++ b/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)//鍦ˋSC鈪$爜涓紝绗�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> -- Gitblit v1.9.1