Li Jun
2022-04-06 fb04e7c01d119c60632b4298d18fd93f3ccb3d79
force-app/main/default/pages/SearchContactPage.page
@@ -1,5 +1,9 @@
<apex:page controller="SearchContactController" showHeader="false" id="page">
    <apex:includeScript value="{!URLFOR($Resource.jquery183minjs)}" />
    <apex:includeScript value="{! URLFOR($Resource.AWSService, 'AWSService.js') }" />
    <apex:includeScript value="{!URLFOR($Resource.jquery183minjs)}" />
    <apex:includeScript value="{!URLFOR($Resource.PleaseWaitDialog)}" />
    <apex:stylesheet value="{!URLFOR($Resource.blockUIcss)}" />
    <head>
    </head>
@@ -19,16 +23,16 @@
            var staticResources = JSON.parse('{!staticResource}');
            var contactAWSIds = JSON.parse('{!contactAWSIds}');
            var contactsInfo = JSON.parse('{!contactsInfo}');
            var searchContactName = '';
            var searchKeyWord = '{!searchKeyWord}';
            var searchContactName = searchKeyWord;
            queryLeadFromAWS();
            function searchAWSContact(){
                console.log('Search process!');
                //1. reset table;
                //1. reset table;
                blockme();
                resetTable();
                //2. get contact name value 
                searchContactName = document.getElementById('page:form:lksrch').value;
                queryLeadFromAWS();
            }
            function resetTable(){
                let queryResult = document.getElementById('QueryResult');
@@ -46,22 +50,28 @@
            function queryLeadFromAWS() {
                //1. Prepare the payload for contact search
                let requestSearchPayload = preparePayloadForSearchContact();
                console.log('request payload body:'+requestSearchPayload);
                //2. Invoke AWS Service
                fetch(staticResources.searchUrl, {
                    method: 'POST',
                    body: requestSearchPayload,
                    headers: {
                        'Content-Type': 'application/json',
                        'pi-token': staticResources.token
                    }
                }).then((data) => {
                    return data.json();
                }).then((result) => {
                    if(result.object&&result.object.length>0){
                        initContactTable(result);
                    }
                })
                // fetch(staticResources.searchUrl, {
                //     method: 'POST',
                //     body: requestSearchPayload,
                //     headers: {
                //         'Content-Type': 'application/json',
                //         'pi-token': staticResources.token
                //     }
                // }).then((data) => {
                //     return data.json();
                // }).then((result) => {
                //     if(result.object&&result.object.length>0){
                //         initContactTable(result);
                //     }
                // })
                let queryBackContactName = function queryBackContactName(result){
                    // if(result.object){
                    //     initContactTable(result);
                    // }
                    initContactTable(result);
                };
                AWSService.search(staticResources.searchUrl,requestSearchPayload,queryBackContactName,staticResources.token)
            }
            
            function redirectToParentPage(obj) {
@@ -94,11 +104,12 @@
                let tableBody = document.createElement('TBODY');
                table.appendChild(tableBody);
                let headerTR = document.createElement('TR');
                let colsHeader = ['姓名','客户名称','邮箱', '电话','手机号'];
                tableBody.appendChild(headerTR);
                for (let i = 0; i < cols.length; i++) {
                for (let i = 0; i < colsHeader.length; i++) {
                    let td = document.createElement('TH');
                    td.width = '75';
                    td.appendChild(document.createTextNode(cols[i]));
                    td.appendChild(document.createTextNode(colsHeader[i]));
                    headerTR.appendChild(td);
                }
                //3. Init the AWS data
@@ -109,10 +120,17 @@
                    for (let j = 0; j < cols.length; j++) {
                        let td = document.createElement('TD');
                        td.width = '75';
                        if(j == 0){
                            td.id = contactsInfo[contactInfoTemp.AWSDataId].Id;
                        }
                        td.appendChild(document.createTextNode(contactInfoTemp[cols[j]]));
                        if(contactInfoTemp.pi){
                            if (!contactsInfo.hasOwnProperty(contactInfoTemp.AWSDataId)) {
                                continue;
                            }
                            if(j == 0 && contactsInfo[contactInfoTemp.AWSDataId] ){
                                td.id = contactsInfo[contactInfoTemp.AWSDataId].Id;
                            }
                        }else{
                            td.id = contactInfoTemp.sfRecordId;
                        }
                        td.appendChild(document.createTextNode(contactInfoTemp[cols[j]]!=null?contactInfoTemp[cols[j]]:''));
                        if (cols[j] == 'Name') {
                            td.addEventListener("click", function (obj) {
                                redirectToParentPage(obj);
@@ -122,33 +140,64 @@
                    }
                }
                myTableDiv.appendChild(table);
                unblockUI();
            }
            function initContactTable(data) {            
                let cols = ['Name', 'Email', 'Phone'];
                let cols = ['Name','AccountName', 'Email', 'Phone','MobilePhone'];
                let contactInfoList = [];
                let awsDataIds = [];
                for(var i=0;i<data.object.length;i++){
                    if(data.object[i].dataId){
                        let contactInfo = new Object();
                        contactInfo.Name = data.object[i].lastName;
                        contactInfo.Email = data.object[i].email;
                        contactInfo.Phone = data.object[i].phone;
                        contactInfo.AWSDataId = data.object[i].dataId;
                        awsDataIds.push(contactInfo.AWSDataId);
                        contactInfo.sfRecordId = '';
                        contactInfoList.push(contactInfo);
                    }
                if(data.object){
                    for(var i=0;i<data.object.length;i++){
                        if(data.object[i].dataId){
                            let contactInfo = new Object();
                            contactInfo.Name = data.object[i].lastName;
                            contactInfo.Email = data.object[i].email;
                            contactInfo.MobilePhone = data.object[i].mobilePhone;
                            contactInfo.Phone = data.object[i].phone;
                            contactInfo.AWSDataId = data.object[i].dataId;
                            contactInfo.pi = true;
                            awsDataIds.push(contactInfo.AWSDataId);
                            contactInfo.sfRecordId = '';
                            contactInfoList.push(contactInfo);
                        }
                    }
                }
                let AWSIdToSFIdMapValue = {};
                console.log(awsDataIds);
                //Invoke SF BackEnd
                Visualforce.remoting.Manager.invokeAction(
                    '{!$RemoteAction.SearchContactController.searchContacts}',
                    JSON.stringify(awsDataIds),
                    JSON.stringify(awsDataIds),searchContactName,'{!aId}',
                    function (result, event) {
                        if(event.status){
                            if(result.status = 'success'){
                                contactsInfo = JSON.parse(result.message.replace(/(&quot\;)/g,"\""));
                                if(result.message){
                                    contactsInfo = JSON.parse(result.message.replace(/(&quot\;)/g,"\""));
                                    if(Object.keys(contactsInfo).length>0){
                                        for(let i=0;i<contactInfoList.length;i++){
                                            let contactFromSF = contactsInfo[contactInfoList[i]['AWSDataId']];
                                            if(contactFromSF){
                                                contactInfoList[i].sfRecordId = contactFromSF['Id'];
                                                contactInfoList[i].AccountName = contactFromSF['Account']['Name'];
                                            }
                                        }
                                    }
                                }
                                //1. get SF 非敏感的联系人信息
                                if(result.noPIContactList){
                                    var noPIInfo = JSON.parse(result.noPIContactList.replace(/(&quot\;)/g,"\""));
                                    for(let f in noPIInfo){
                                        let contactInfo = new Object();
                                        contactInfo.Name = noPIInfo[f].Name!=null?noPIInfo[f].Name:'';
                                        contactInfo.Email = noPIInfo[f].Email!=null?noPIInfo[f].Email:'';
                                        contactInfo.Phone = noPIInfo[f].Phone!=null?noPIInfo[f].Phone:'';
                                        contactInfo.MobilePhone = noPIInfo[f].MobilePhone!=null?noPIInfo[f].MobilePhone:'';
                                        contactInfo.AWSDataId = '';
                                        contactInfo.sfRecordId = noPIInfo[f].Id!=null?noPIInfo[f].Id:'';
                                        contactInfo.AccountName = noPIInfo[f]['Account']['Name'];
                                        contactInfo.pi = false;
                                        contactInfoList.push(contactInfo);
                                    }
                                }
                                refreshTable(cols,contactInfoList);
                            }else{
                                console.log('No result');