| | |
| | | <apex:page standardController="Contact" extensions="NewAndEditContactController" id="page" action="{!PageLoad}"> |
| | | <apex:includeScript value="{!URLFOR($Resource.connection20)}"/> |
| | | <apex:includeScript value="{! URLFOR($Resource.AWSService, 'AWSService.js') }" /> |
| | | <script src="../../soap/ajax/53.0/connection.js" type="text/javascript"></script> |
| | | <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; |
| | |
| | | } |
| | | } |
| | | |
| | | if('{!rtTypeId}'){ |
| | | payloadJson.RecordTypeId = '{!rtTypeId}'; |
| | | } |
| | | |
| | | //payloadJson.AWS_Data_Id__c = r.object[0].dataId; |
| | | payloadJson.AWS_Data_Id__c = '{!AWSDataId}'; |
| | | if (isNewMode || {!isCloneMode}) { |
| | | payloadJson.AWS_Data_Id__c = r.object[0].dataId; |
| | | delete payloadJson.OwnerId; |
| | | } else { |
| | | payloadJson.AWS_Data_Id__c = '{!AWSDataId}'; |
| | | } |
| | | // if('{!rtTypeId}'){ |
| | | // payloadJson.RecordTypeId = '{!rtTypeId}'; |
| | | // } |
| | | return payloadJson; |
| | | }, |
| | | queryBack:function (data) { |
| | | console.log('data = ' + data); |
| | | if(data.object){ |
| | | for(let fi in config.AWSToSobjectNonEncryptedMapKeySet){ |
| | | let f = config.AWSToSobjectNonEncryptedMapKeySet[fi]; |
| | | for(let f of config.AWSToSobjectNonEncryptedMapKeySet){ |
| | | let ele = document.getElementById(api_id_map[config.AWSToSobjectNonEncryptedMap[f]]) |
| | | if(data.object.hasOwnProperty(f) && ele){ |
| | | |
| | | // 多选特殊处理 |
| | | if(ele.type == 'select-multiple'){ |
| | | //let me = GetEleByClass(config.ApiPrefix+'_'+field_api_name); |
| | | if(ele ){ |
| | | //_unselected |
| | | let v = ''; |
| | | if(data.object[f]){ |
| | | v = data.object[f]; |
| | | } |
| | | |
| | | let arr = v.split(';'); |
| | | |
| | | 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'); |
| | | if(ra){ |
| | | ra.click(); |
| | | } |
| | | |
| | | } |
| | | //let me = GetEleByClass(config.ApiPrefix+'_'+field_api_name); |
| | | if(ele && data.object[f]){ |
| | | let arr = data.object[f].split(';'); |
| | | |
| | | // 给隐藏的select赋值 |
| | | for(let op of ele.options){ |
| | | op.selected = arr.indexOf(op.value)>-1; |
| | | } |
| | | |
| | | // 利用按钮给显示的select赋值 |
| | | let ra = document.getElementById(ele.id + '_right_arrow'); |
| | | if(ra){ |
| | | ra.click(); |
| | | } |
| | | |
| | | } |
| | | }else{ |
| | | ele.value = data.object[f]; |
| | | } |
| | |
| | | var fieldAPIToLabelMap = JSON.parse('{!fieldAPIToLabelMapStr}'); |
| | | console.log('{!staticResource}'); |
| | | var VLookUpFields = {! VLookUpFieldsJson}; |
| | | |
| | | function ProcessPI(sobjJson, payloadForNewPI) { |
| | | blockme(); |
| | | if ({!isNewMode} || {!isCloneMode}) { |
| | | NewPIToAWS(sobjJson, payloadForNewPI) |
| | | }else { |
| | | UpdatePIToAWS(sobjJson, payloadForNewPI) |
| | | } |
| | | } |
| | | |
| | | function EditButton(isDisabled){ |
| | | var topele = document.getElementById('topButtonRow'); |
| | | var bottomele = document.getElementById('bottomButtonRow'); |
| | |
| | | } |
| | | } |
| | | |
| | | function ProcessPI(sobjJson, payloadForNewPI) { |
| | | blockme(); |
| | | if ({!isNewMode} || {!isCloneMode}) { |
| | | NewPIToAWS(sobjJson, payloadForNewPI) |
| | | }else { |
| | | UpdatePIToAWS(sobjJson, payloadForNewPI) |
| | | } |
| | | } |
| | | |
| | | var GetEleByClass = function(class_name){ |
| | | let eles = document.getElementsByClassName(class_name); |
| | | if(eles.length > 0) return eles[0]; |
| | |
| | | } |
| | | |
| | | var GetEleApiName = function(ele){ |
| | | for(let ci in ele.classList){ |
| | | let c = ele.classList[ci]; |
| | | for(let c of ele.classList){ |
| | | if(c.indexOf(config.ApiPrefix+'_')>-1){ |
| | | return c.replace(config.ApiPrefix+'_',''); |
| | | } |
| | |
| | | } |
| | | |
| | | function IsFormTag(tag_name){ |
| | | if (!tag_name) { |
| | | return false; |
| | | } |
| | | return ['input','select','textarea'].indexOf(tag_name.toLowerCase())>-1; |
| | | return ['input','select','textarea','div'].indexOf(tag_name.toLowerCase())>-1; |
| | | } |
| | | |
| | | function IsFormElement(e){ |
| | |
| | | function validateFieldValueFormate() { |
| | | let error_msg = ''; |
| | | // let textEmail = "[data-id='Email']"; |
| | | // let textPhone = "[data-id='Phone']"; |
| | | // let textPhone = "[data-id='MobilePhone']"; |
| | | // //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 += ';邮件格式错误'; |
| | | // } |
| | | // } |
| | | // if(email && !/^[\w-]{3,12}@[\da-zA-Z]{2,16}\.[a-zA-Z]+$/.test(email.value)){ |
| | | // error_msg += ';邮件格式错误'; |
| | | // } |
| | | // let phone = document.querySelector(textPhone); |
| | | |
| | | // 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 += ';电话号码错误'; |
| | | // } |
| | | // } |
| | | // if(phone && !/^1[3|5|8|7][0-9]\d{4,8}$/.test(phone.value)){ |
| | | // error_msg += ';电话号码错误'; |
| | | // } |
| | | |
| | | 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; |
| | | for(let e of document.getElementsByTagName('select')){ |
| | | for(let op of e.options){ |
| | | if(op.value == "*****" && op.selected){ |
| | | error_msg += ';下拉框不能主动选择密文选项'; |
| | | } |
| | |
| | | console.log(ele.id.indexOf('lkwgt')); |
| | | if (ele.id.indexOf('lkwgt') == -1) { |
| | | let vlookUpNodeId = ele.id + '_lkid'; |
| | | if (tag_name == 'div') { |
| | | vlookUpNodeId = ele.id.substring(0,ele.id.length-4) + '_lkid'; |
| | | } |
| | | let vlook_ele = document.getElementById(vlookUpNodeId); |
| | | let v = ''; |
| | | if(vlook_ele){ |
| | |
| | | v = ele.value; |
| | | } |
| | | |
| | | // if(v && v != "000000000000000"){ |
| | | //if(v && v != "000000000000000"){ |
| | | result[field_api_name] = v; |
| | | // } |
| | | //} |
| | | |
| | | } |
| | | } else if (ele.type == 'checkbox') { |
| | |
| | | |
| | | // 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; |
| | |
| | | window.open('/' + sfId, '_self'); |
| | | } |
| | | } |
| | | |
| | | } |
| | | |
| | | function UpdatePIToAWS(sobjJson, payloadForNewPI) { |
| | |
| | | for(i = 0;i<requiredFieldAPIList.length;i++){ |
| | | if(formData[requiredFieldAPIList[i]] && (VLookUpFields.indexOf(requiredFieldAPIList[i]) == -1)){ |
| | | continue; |
| | | }else if((VLookUpFields.indexOf(requiredFieldAPIList[i]) != -1) && formData[requiredFieldAPIList[i]] != '000000000000000'){ |
| | | }else if((VLookUpFields.indexOf(requiredFieldAPIList[i]) != -1) && formData[requiredFieldAPIList[i]] != '000000000000000' && formData[requiredFieldAPIList[i]] != ''){ |
| | | continue; |
| | | }else{ |
| | | if(blankRequiredFields == ''){ |
| | |
| | | } |
| | | function saveSobjectProcess(save_and_new) { |
| | | EditButton(true); |
| | | |
| | | if(save_and_new){ |
| | | config.SaveAndNew = true; |
| | | } |
| | |
| | | // Check Required Field |
| | | let checkRequiredFieldMsgResult = checkRequiredFieldMsg(sobjJson); |
| | | if (checkRequiredFieldMsgResult) { |
| | | alertErrorMessage('{! $Label.Input_Required_Field_Msg}' + checkRequiredFieldMsgResult); |
| | | alertErrorMessage('{!$Label.Input_Required_Field_Msg}' + checkRequiredFieldMsgResult); |
| | | return |
| | | } |
| | | // //3. Prepare the payload for New PI API To AWS - To Do |
| | |
| | | |
| | | function alertErrorMessage(errorMsg) { |
| | | let errorMsgNode = document.getElementById("page:form:block:msgContent"); |
| | | errorMsg = '错误:无效数据。' + '\n' + errorMsg; |
| | | errorMsgNode.innerText = errorMsg; |
| | | errorMsgNode.className = 'pbError'; |
| | | EditButton(false); |
| | |
| | | |
| | | <!--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)&&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: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="PIBackApi PIBackApi_{!layoutField.fieldAPI}" html-data-id="{!layoutField.fieldAPI}" value="{!Contact[layoutField.fieldAPI]}" rendered="{!not(layoutField.isPlaceHOlder)&&isNewMode}" |
| | | required="{!layoutField.isRequired}" /> |
| | | <apex:inputField styleClass="PIBackApi PIBackApi_{!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="PIBackApi PIBackApi_{!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> |
| | |
| | | <script> |
| | | var init_nodes = document.getElementsByClassName("PIBackApi"); |
| | | var api_id_map={}; |
| | | 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; |
| | | } |
| | | |
| | | for(let e of init_nodes){ |
| | | if(IsFormElement(e)){ |
| | | 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 = ''; |
| | | 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) { |
| | | let e = document.querySelector("[data-id='"+layoutField.fieldAPI+"']"); |
| | | e.disabled = !(layoutField.editableField); |
| | | if (!(layoutField.editableField)) { |
| | | if (e.getAttribute("multiple") && e.getAttribute("multiple") == 'multiple') { |
| | | e.parentNode.classList.add("disabledbutton"); |
| | | } |
| | | if (e.tagName == 'DIV') { |
| | | e.classList.add("disabledbutton"); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | }) |
| | | |
| | | } |
| | | //1. Set Last Name label |
| | | //document.querySelector("[data-id='LastName']").parentNode.parentNode.parentNode.children[2].children[0].innerText = '姓名'; |
| | | //2. Query AWS Data by dataId |
| | |
| | | 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}' |
| | | } |
| | | } |
| | | //3. Set Readonly Attribute |
| | | // document.querySelectorAll("[data-id='OwnerId']")[0].classList.add("disabledbutton"); |
| | | // document.querySelectorAll("[data-id='OwnerId']")[1].classList.add("disabledbutton"); |
| | | |
| | | 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"> |