buli
2022-05-13 08a21f49f2eaf9cfc19ceb67b196cc36ba689305
FIxSWOPageIssue
2个文件已添加
2个文件已修改
411 ■■■■■ 已修改文件
force-app/main/default/classes/MetaDataUtility.cls 187 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/MetaDataUtility.cls-meta.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/SWOController.cls 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/pages/SWOPageRead.page 198 ●●●●● 补丁 | 查看 | 原始文档 | 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>&nbsp;&nbsp;<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>