From d8dc84a3d56df839895f1c417a4d9cbee763d262 Mon Sep 17 00:00:00 2001 From: 高章伟 <gaozhangwei@prec-tech.com> Date: 星期五, 03 三月 2023 14:50:59 +0800 Subject: [PATCH] gzw 测试环境代码更新 --- force-app/main/default/pages/NewAndEditContact.page | 312 ++++++++++++++++++++++++++++++++++++++------------- 1 files changed, 232 insertions(+), 80 deletions(-) diff --git a/force-app/main/default/pages/NewAndEditContact.page b/force-app/main/default/pages/NewAndEditContact.page index ef36178..ff011ed 100644 --- a/force-app/main/default/pages/NewAndEditContact.page +++ b/force-app/main/default/pages/NewAndEditContact.page @@ -1,11 +1,21 @@ -<apex:page standardController="Contact" extensions="NewAndEditContactController" id="page"> - <apex:includeScript value="{! URLFOR($Resource.AWSService, 'AWSService.js') }" /> - <script src="../../soap/ajax/53.0/connection.js" type="text/javascript"></script> +<apex:page standardController="Contact" extensions="NewAndEditContactController" id="page" action="{!PageLoad}"> + <apex:includeScript value="{!URLFOR($Resource.connection20)}"/> <apex:stylesheet value="{!URLFOR($Resource.blockUIcss)}"/> <apex:includeScript value="{!URLFOR($Resource.jquery183minjs)}"/> <apex:includeScript value="{!URLFOR($Resource.PleaseWaitDialog)}"/> + <apex:includeScript value="{! URLFOR($Resource.AWSService, 'AWSService.js') }" /> + <style> + .disabledbutton { + pointer-events: none; + opacity: 0.4; + } + </style> <script> - + //zhj MEBG鏂版柟妗堟敼閫� 2022-11-25 start + var accountName = ''; + var dataIdManageCodeMap = {}; + var staticResourceContactV2 = JSON.parse('{!staticResourceContactV2}'); + //zhj MEBG鏂版柟妗堟敼閫� 2022-11-25 end var config = {}; config = { SobjectName : "{!SobjectName}", @@ -36,24 +46,48 @@ return JSON.stringify(leadPayloadList); }, insertOrUpdateBack:function(payloadJson, r, isNewMode){ - - for(let f in config.AWSToSobjectMap){ + //zhj MEBG鏂版柟妗堟敼閫� 2022-11-25 start + debugger + if(r.status == '129'){ + alertErrorMessage('瀹㈡埛 [ '+accountName+ ' ],宸插瓨鍦ㄧ浉鍚屽悕瀛楃殑鑱旂郴浜� 浜哄憳绠$悊缂栫爜 ['+dataIdManageCodeMap[r.object[0].dataId]+' ] 锛屼笉鑳介噸澶嶅垱寤猴紝璇蜂簡瑙�'); + unblockUI(); + return + } + if(r.status == '130'){ + if(r.object[0] && r.object[0].sfRecordId != null && r.object[0].sfRecordId != '') + alertErrorMessage('宸叉壘鍒伴噸澶嶅�硷細 UniqueNumber__c 涓庤褰曞�奸噸澶嶏紝ID 涓�: '+r.object[0].sfRecordId+'瀹㈡埛浜哄憳淇℃伅'); + else + alertErrorMessage('鏁版嵁涓瓨鍦ㄩ噸澶嶇殑鐢佃瘽鍙风爜'); + unblockUI(); + return + } + for(let f in config.AWSToSobjectNonEncryptedMap){ if(r.object[0].hasOwnProperty(f)){ - payloadJson[config.AWSToSobjectMap[f]] = r.object[0][f]; + payloadJson[config.AWSToSobjectNonEncryptedMap[f]] = r.object[0][f]; } else{ console.log(f + 'is not in r.object[0]'); } } + console.log('payloadJson = ' + payloadJson); + // for(let f in config.AWSToSobjectMap){ + // if(r.object[0].hasOwnProperty(f)){ + // payloadJson[config.AWSToSobjectMap[f]] = r.object[0][f]; + // } + // else{ + // console.log(f + 'is not in r.object[0]'); + // } + // } - for(let f in config.AWSToSobjectEncryptedMap){ - if(r.object[0].hasOwnProperty(f)){ - payloadJson[config.AWSToSobjectEncryptedMap[f]] = r.object[0][f]; - } - else{ - console.log(f + 'is not in r.object[0]'); - } - } + // for(let f in config.AWSToSobjectEncryptedMap){ + // if(r.object[0].hasOwnProperty(f)){ + // payloadJson[config.AWSToSobjectEncryptedMap[f]] = r.object[0][f]; + // } + // else{ + // console.log(f + 'is not in r.object[0]'); + // } + // } + //zhj MEBG鏂版柟妗堟敼閫� 2022-11-25 end if('{!rtTypeId}'){ payloadJson.RecordTypeId = '{!rtTypeId}'; @@ -61,8 +95,9 @@ //payloadJson.AWS_Data_Id__c = r.object[0].dataId; payloadJson.AWS_Data_Id__c = '{!AWSDataId}'; - if (isNewMode) { + if (isNewMode || {!isCloneMode}) { payloadJson.AWS_Data_Id__c = r.object[0].dataId; + delete payloadJson.OwnerId; } else { payloadJson.AWS_Data_Id__c = '{!AWSDataId}'; } @@ -71,7 +106,16 @@ queryBack:function (data) { console.log('data = ' + data); if(data.object){ - for(let f of config.AWSToSobjectNonEncryptedMapKeySet){ + for(let i=0; i < config.AWSToSobjectNonEncryptedMapKeySet.length ; i++){ + if(config.AWSToSobjectNonEncryptedMapKeySet[i] == 'type'){ + let temp = config.AWSToSobjectNonEncryptedMapKeySet[0]; + config.AWSToSobjectNonEncryptedMapKeySet[0] = config.AWSToSobjectNonEncryptedMapKeySet[i]; + config.AWSToSobjectNonEncryptedMapKeySet[i] = temp; + break; + } + } + for(let fi in config.AWSToSobjectNonEncryptedMapKeySet){ + let f = config.AWSToSobjectNonEncryptedMapKeySet[fi]; let ele = document.getElementById(api_id_map[config.AWSToSobjectNonEncryptedMap[f]]) if(data.object.hasOwnProperty(f) && ele){ @@ -86,32 +130,10 @@ } let arr = v.split(';'); - - // 娓呯┖宸叉湁閫夐」 - /* - let sl = document.getElementById(ele.id + '_selected'); - if(sl){ - for(let op of sl.options){ - op.selected = true; - } - let la = document.getElementById(ele.id + '_left_arrow'); - if(la){ - la.click(); - } - } - // 璧嬪�兼柊閫夐」 - let us = document.getElementById(ele.id + '_unselected'); - if(us){ - for(let op of us.options){ - op.selected = arr.indexOf(op.value)>-1; - } - let ra = document.getElementById(ele.id + '_right_arrow'); - if(ra){ - ra.click(); - } - }*/ - for(let op of ele.options){ + for(let opi in ele.options){ + let op = ele.options[opi]; + if(!op)continue; op.selected = arr.indexOf(op.value)>-1; } let ra = document.getElementById(ele.id + '_right_arrow'); @@ -144,7 +166,10 @@ // document.querySelector("[data-id='Email']").value = data.object.email; }, updateMethod:"NewAndEditContactController.saveContact", - insertMethod:"NewAndEditContactController.saveContact" + insertMethod:"NewAndEditContactController.saveContact", + //zhj MEBG鏂版柟妗堟敼閫� 2022-11-24 start + searchContactByAccountId:"NewAndEditContactController.searchContactByAccountId" + //zhj MEBG鏂版柟妗堟敼閫� 2022-11-24 end } AWSService.sfSessionId = '{!GETSESSIONID()}'; @@ -153,10 +178,24 @@ var fieldAPIToLabelMap = JSON.parse('{!fieldAPIToLabelMapStr}'); console.log('{!staticResource}'); var VLookUpFields = {! VLookUpFieldsJson}; + + function EditButton(isDisabled){ + var topele = document.getElementById('topButtonRow'); + var bottomele = document.getElementById('bottomButtonRow'); + + if (isDisabled) { + topele.classList.add("disabledbutton"); + bottomele.classList.add("disabledbutton"); + }else { + topele.classList.remove("disabledbutton"); + bottomele.classList.remove("disabledbutton"); + } + } + function ProcessPI(sobjJson, payloadForNewPI) { blockme(); - if ({!isNewMode}) { - NewPIToAWS(sobjJson, payloadForNewPI) + if ({!isNewMode} || {!isCloneMode}) { + NewPIToAWS(sobjJson, payloadForNewPI) }else { UpdatePIToAWS(sobjJson, payloadForNewPI) } @@ -169,7 +208,8 @@ } var GetEleApiName = function(ele){ - for(let c of ele.classList){ + for(let ci in ele.classList){ + let c = ele.classList[ci]; if(c.indexOf(config.ApiPrefix+'_')>-1){ return c.replace(config.ApiPrefix+'_',''); } @@ -178,10 +218,13 @@ } function IsFormTag(tag_name){ + if (!tag_name) { + return false; + } return ['input','select','textarea'].indexOf(tag_name.toLowerCase())>-1; } - - function IsFormElement(e){ + + function IsFormElement(e){ return IsFormTag(e.tagName); } @@ -191,21 +234,41 @@ function validateFieldValueFormate() { let error_msg = ''; - let textEmail = "[data-id='Email']"; - let textPhone = "[data-id='Phone']"; - //Email - let email = document.querySelector(textEmail); - if(email && email.previousSibling && email.previousSibling.className.indexOf('requiredBlock')>-1 && !/^[\w-]{3,12}@[\da-zA-Z]{2,16}\.[a-zA-Z]+$/.test(email.value)){ - error_msg += ';閭欢鏍煎紡閿欒'; - } - let phone = document.querySelector(textPhone); + // let textEmail = "[data-id='Email']"; + // let textPhone = "[data-id='Phone']"; + // //Email + // let email = document.querySelector(textEmail); + // if(email ){ + // if(email.value){ + // if(!/^[\w-]{3,12}@[\da-zA-Z]{2,16}\.[a-zA-Z]+$/.test(email.value)){ + // error_msg += ';閭欢鏍煎紡閿欒'; + // } + // }else{ + // if(email.previousSibling && email.previousSibling.className.indexOf('requiredBlock')>-1){ + // error_msg += ';閭欢鏍煎紡閿欒'; + // } + // } + // } + // let phone = document.querySelector(textPhone); - if(phone && phone.previousSibling && phone.previousSibling.className.indexOf('requiredBlock')>-1 && !/^1[3|5|8|7][0-9]\d{4,8}$/.test(phone.value)){ - error_msg += ';鐢佃瘽鍙风爜閿欒'; - } + // if(phone && false ){ + // if(phone.value){ + // if(!/^1[3|5|8|7][0-9]\d{4,8}$/.test(phone.value)){ + // error_msg += ';鐢佃瘽鍙风爜閿欒'; + // } + // }else{ + // if(phone.previousSibling && phone.previousSibling.className.indexOf('requiredBlock')>-1){ + // error_msg += ';鐢佃瘽鍙风爜閿欒'; + // } + // } + // } - for(let e of document.getElementsByTagName('select')){ - for(let op of e.options){ + let es = document.getElementsByTagName('select') + for(let ei in es){ + let e = es[ei]; + for(let opi in e.options){ + let op = e.options[opi]; + if(!op)continue; if(op.value == "*****" && op.selected){ error_msg += ';涓嬫媺妗嗕笉鑳戒富鍔ㄩ�夋嫨瀵嗘枃閫夐」'; } @@ -244,9 +307,9 @@ v = ele.value; } - if(v && v != "000000000000000"){ + // if(v && v != "000000000000000"){ result[field_api_name] = v; - } + // } } } else if (ele.type == 'checkbox') { @@ -264,7 +327,7 @@ // let e1 = document.getElementById(api_id_map[field_api_name]); // if(!result[field_api_name] && e1 && e1.value){ - // result[field_api_name] = e1.value; + // result[field_api_name] = e1.value; // } } return result; @@ -299,7 +362,6 @@ window.open('/' + sfId, '_self'); } } - } function UpdatePIToAWS(sobjJson, payloadForNewPI) { @@ -307,13 +369,19 @@ let obj = JSON.parse(payloadForNewPI); obj[0].dataId = '{!AWSDataId}'; let payloadForNewPIJson = JSON.stringify(obj); - AWSService.update(staticResources.updateUrl, sobjJson, payloadForNewPIJson, controllerSaveMethod, staticResources.token, staticResources.transactionUrl, false, insertOrUpdateBack,redirectCallBack); + //AWSService.update(staticResources.updateUrl, sobjJson, payloadForNewPIJson, controllerSaveMethod, staticResources.token, staticResources.transactionUrl, false, insertOrUpdateBack,redirectCallBack); + //zhj MEBG鏂版柟妗堟敼閫� 2022-11-25 start + AWSService.update(staticResourceContactV2.updateUrl, sobjJson, payloadForNewPIJson, controllerSaveMethod, staticResources.token, staticResources.transactionUrl, false, insertOrUpdateBack,redirectCallBack); + //zhj MEBG鏂版柟妗堟敼閫� 2022-11-25 end } function NewPIToAWS(sobjJson, payloadForNewPI) { let controllerSaveMethod = config.insertMethod; - AWSService.insert(staticResources.newUrl, sobjJson, payloadForNewPI, controllerSaveMethod, staticResources.token, staticResources.transactionUrl, true, insertOrUpdateBack,redirectCallBack); + //AWSService.insert(staticResources.newUrl, sobjJson, payloadForNewPI, controllerSaveMethod, staticResources.token, staticResources.transactionUrl, true, insertOrUpdateBack,redirectCallBack); + //zhj MEBG鏂版柟妗堟敼閫� 2022-11-25 start + AWSService.insert(staticResourceContactV2.newUrl, sobjJson, payloadForNewPI, controllerSaveMethod, staticResources.token, staticResources.transactionUrl, true, insertOrUpdateBack,redirectCallBack); + //zhj MEBG鏂版柟妗堟敼閫� 2022-11-25 end } @@ -321,7 +389,9 @@ function checkRequiredFieldMsg(formData) { let blankRequiredFields = ''; for(i = 0;i<requiredFieldAPIList.length;i++){ - if(formData[requiredFieldAPIList[i]]){ + if(formData[requiredFieldAPIList[i]] && (VLookUpFields.indexOf(requiredFieldAPIList[i]) == -1)){ + continue; + }else if((VLookUpFields.indexOf(requiredFieldAPIList[i]) != -1) && formData[requiredFieldAPIList[i]] != '000000000000000'){ continue; }else{ if(blankRequiredFields == ''){ @@ -335,6 +405,8 @@ return blankRequiredFields; } function saveSobjectProcess(save_and_new) { + EditButton(true); + if(save_and_new){ config.SaveAndNew = true; } @@ -354,7 +426,7 @@ // Check Required Field let checkRequiredFieldMsgResult = checkRequiredFieldMsg(sobjJson); if (checkRequiredFieldMsgResult) { - alertErrorMessage('requiredErrorMsg' + checkRequiredFieldMsgResult); + alertErrorMessage('{! $Label.Input_Required_Field_Msg}' + checkRequiredFieldMsgResult); return } // //3. Prepare the payload for New PI API To AWS - To Do @@ -363,16 +435,59 @@ // //4. Get Authentication Information for AWS // loadAWSAuthentication(); + //zhj MEBG鏂版柟妗堟敼閫� 2022-11-24 start + //鏂板contactIds瀛楁锛屽湪AWS杩涜contact鐨勫敮涓�鎬ф牎楠岋紝鏇挎崲ContactTriggerHandler閲岄潰鐨刴obileNumberVerification鏂规硶 + if('{!rtTypeId}'){ + var RecordTypeId = '{!rtTypeId}'; + } + var Isactive = document.querySelector("[data-id='Isactive__c']").value; + console.log('Isactive = ' + Isactive); + console.log('RecordTypeId = ' + RecordTypeId); + Visualforce.remoting.Manager.invokeAction( + config.searchContactByAccountId, + sobjJson.AccountId, + RecordTypeId, + Isactive, + function (result, event) { + if(result.status == 'fail'){ + alertErrorMessage(result.message); + return + } + console.log('result = ' + JSON.stringify(result)); + accountName = result.accountName; + dataIdManageCodeMap = result.dataIdManageCodeMap; + var contactList = ''; + for(var i = 0; i<result.contactList.length; i++){ + if(result.contactList[i].AWS_Data_Id__c) + contactList += ',' + result.contactList[i].AWS_Data_Id__c; + } + contactList = contactList.substring(1); + + payloadForNewPI = JSON.parse(payloadForNewPI); + payloadForNewPI[0].contactIds = contactList; + payloadForNewPI[0].isMobileVerif = result.isMobileVerif; + payloadForNewPI[0].isNameMobileVerif = result.isNameMobileVerif; + payloadForNewPI = JSON.stringify(payloadForNewPI); + ProcessPI(sobjJson, payloadForNewPI); + }, + { escape: true } + ); + + // //5. lead to AWS - ProcessPI(sobjJson, payloadForNewPI); + //ProcessPI(sobjJson, payloadForNewPI); + //zhj MEBG鏂版柟妗堟敼閫� 2022-11-24 end + // awsToken = TestToken; // NewPIToAWS(sobjJson,awsToken, payloadForNewPI) } function alertErrorMessage(errorMsg) { let errorMsgNode = document.getElementById("page:form:block:msgContent"); + errorMsg = '閿欒锛氭棤鏁堟暟鎹��' + '\n' + errorMsg; errorMsgNode.innerText = errorMsg; errorMsgNode.className = 'pbError'; + EditButton(false); } function hiddenErrorMsgNode() { let errorMsgNode = document.getElementById("page:form:block:msgContent"); @@ -384,10 +499,10 @@ <div class="ptBody"> <div class="content"> <img src="/img/s.gif" alt="{! SobjectLabel}" class="pageTitleIcon" title="{! SobjectLabel}" /> - <h1 class="pageType">{! SobjectLabel}<apex:outputText rendered="{!isNewMode}">{!$Label.New}</apex:outputText><apex:outputText rendered="{!not(isNewMode)}">{!$Label.Edit}</apex:outputText> + <h1 class="pageType">{! SobjectLabel}<apex:outputText rendered="{!isNewMode || isCloneMode}">{!$Label.New}</apex:outputText><apex:outputText rendered="{!not(isNewMode || isCloneMode)}">{!$Label.Edit}</apex:outputText> <span class="titleSeparatingColon">:</span> </h1> - <h2 class="pageDescription"> <apex:outputText rendered="{!isNewMode}">{!$Label.New}</apex:outputText><apex:outputText rendered="{!not(isNewMode)}">{!$Label.Edit}</apex:outputText>{! SobjectLabel}</h2> + <h2 class="pageDescription"> <apex:outputText rendered="{!isNewMode || isCloneMode}">{!$Label.New}</apex:outputText><apex:outputText rendered="{!not(isNewMode || isCloneMode)}">{!$Label.Edit}</apex:outputText>{! SobjectLabel}</h2> <div class="blank"> </div> </div> <div class="links"> @@ -409,9 +524,9 @@ <tr> <td class="pbTitle"> <img src="/img/s.gif" alt="" class="minWidth" title="" width="1" height="1" /> - <h2 class="mainTitle">{! SobjectLabel}<apex:outputText rendered="{!isNewMode}">{!$Label.New}</apex:outputText><apex:outputText rendered="{!not(isNewMode)}">{!$Label.Edit}</apex:outputText></h2> + <h2 class="mainTitle">{! SobjectLabel}<apex:outputText rendered="{!isNewMode || isCloneMode}">{!$Label.New}</apex:outputText><apex:outputText rendered="{!not(isNewMode || isCloneMode)}">{!$Label.Edit}</apex:outputText></h2> </td> - <td class="pbButton" id="topButtonRow"> + <td class="pbButton" id="topButtonRow" style="pointer-events: none; opacity: 0.4;"> <input class="btn" type="Button" value="{!$Label.Save}" onclick="saveSobjectProcess()" /> <input class="btn" type="Button" value="{!$Label.SaveAndNew}" onclick="saveSobjectProcess(1)" /> <apex:commandButton action="{!cancel}" value="{!$Label.Cancel}" /> @@ -433,8 +548,9 @@ <!--Each section has layoutFields, let's iterate them as well--> <apex:repeat value="{!layoutSection.layoutFields}" var="layoutField"> - <apex:inputField styleClass="{!ApiPrefix} {!ApiPrefix}_{!layoutField.fieldAPI}" html-data-id="{!layoutField.fieldAPI}" value="{!Contact[layoutField.fieldAPI]}" rendered="{!not(layoutField.isPlaceHOlder)}" - required="{!layoutField.isRequired}" /> + <apex:inputField styleClass="{!ApiPrefix} {!ApiPrefix}_{!layoutField.fieldAPI}" html-data-id="{!layoutField.fieldAPI}" value="{!Contact[layoutField.fieldAPI]}" rendered="{!not(layoutField.isPlaceHOlder)&&isNewMode}" required="{!layoutField.isRequired}" /> + <apex:inputField styleClass="{!ApiPrefix} {!ApiPrefix}_{!layoutField.fieldAPI}" html-data-id="{!layoutField.fieldAPI}" value="{!Contact[layoutField.fieldAPI]}" rendered="{!not(layoutField.isPlaceHOlder)&¬(isNewMode)&&layoutField.fieldAPI!='RecordTypeId'}" required="{!layoutField.isRequired}" /> + <apex:outputField styleClass="{!ApiPrefix} {!ApiPrefix}_{!layoutField.fieldAPI}" html-data-id="{!layoutField.fieldAPI}" value="{!Contact[layoutField.fieldAPI]}" rendered="{!not(layoutField.isPlaceHOlder)&¬(isNewMode)&&layoutField.fieldAPI=='RecordTypeId'}" /> <apex:pageblocksectionitem rendered="{!layoutField.isPlaceHolder}"> </apex:pageblocksectionitem> </apex:repeat> @@ -444,16 +560,24 @@ <script> var init_nodes = document.getElementsByClassName("PIBackApi"); var api_id_map={}; - for(let e of init_nodes){ - if(IsFormElement(e)){ + for(let ei in init_nodes){ + let e = init_nodes[ei]; + if(IsFormElement(e)){ if(e.getAttribute("multiple") != 'multiple' || e.style.display == 'none' && e.id.indexOf('selected') < 0){ api_id_map[GetEleApiName(e)] = e.id; } - + } } console.log(api_id_map); sfdcPage.appendToOnloadQueue(function () { + + jQuery('option').each(function(i,e){ + if(e.value == '_\x01_'){ + e.value = ''; + } + }) + //1. Set Last Name label //document.querySelector("[data-id='LastName']").parentNode.parentNode.parentNode.children[2].children[0].innerText = '濮撳悕'; //2. Query AWS Data by dataId @@ -461,7 +585,35 @@ if (!{!isNewMode}) { blockme(); QuerySobjectFromAWS(); + }else{ + let ot = jQuery('input[data-id="OwnerId"]'); + let oi = document.getElementById(ot.attr("id")+'_lkid'); + ot.val('{!CurrentUserName}'); + ot.attr("readonly",""); + ot.css("background","unset"); + ot.css("border","0"); + ot.css("outline","0"); + + if(oi){ + oi.value = '{!CurrentUserId}' + } } + document.getElementById('topButtonRow').style = ''; + document.getElementById('bottomButtonRow').style = ''; + + jQuery('a[data-id="OwnerId"]').remove(); + + var layoutSections = JSON.parse('{!layoutSectionsStr}'); + for (let m = 0; m < layoutSections.length; m++) { + let layoutSection = layoutSections[m].layoutFields; + for (let n = 0; n < layoutSection.length; n++) { + let layoutField = layoutSection[n]; + if (layoutField.fieldAPI != '' && document.querySelector("[data-id='"+layoutField.fieldAPI+"']") != null) { + document.querySelector("[data-id='"+layoutField.fieldAPI+"']").disabled = !(layoutField.editableField); + } + } + } + }); </script> <div class="pbBottomButtons"> @@ -470,7 +622,7 @@ <tr> <td class="pbTitle"> <img src="/img/s.gif" alt="" class="minWidth" title="" width="1" height="1" /> </td> - <td class="pbButtonb" id="bottomButtonRow"> + <td class="pbButtonb" id="bottomButtonRow" style="pointer-events: none; opacity: 0.4;"> <input class="btn" type="Button" value="{!$Label.Save}" onclick="saveSobjectProcess()" /> <input class="btn" type="Button" value="{!$Label.SaveAndNew}" onclick="saveSobjectProcess()" /> <apex:commandButton action="{!cancel}" value="{!$Label.Cancel}" /> -- Gitblit v1.9.1