| | |
| | | ApiPrefix:"{!ApiPrefix}", |
| | | SaveAndNew:false, |
| | | AWSToSobjectMap:{!AWSToSobjectMapJson}, |
| | | AWSToSobjectNonEncryptedMapKeySet:{!AWSToSobjectNonEncryptedMapKeySet}, |
| | | AWSToSobjectNonEncryptedMap:{!AWSToSobjectNonEncryptedMapJson}, |
| | | AWSToSobjectEncryptedMap:{!AWSToSobjectEncryptedMapJson}, |
| | | SobjectToAWSModel:function (sobjJson) { |
| | |
| | | |
| | | //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}'; |
| | | } |
| | |
| | | queryBack:function (data) { |
| | | console.log('data = ' + data); |
| | | if(data.object){ |
| | | for(let f in config.AWSToSobjectNonEncryptedMap){ |
| | | let ele = GetEleByClass(config.ApiPrefix + "_"+ config.AWSToSobjectNonEncryptedMap[f]); |
| | | 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){ |
| | | |
| | | // 多选特殊处理 |
| | |
| | | let arr = data.object[f].split(';'); |
| | | |
| | | // 给隐藏的select赋值 |
| | | for(let op of ele.options){ |
| | | for(let opi in ele.options){ |
| | | let op = ele.options[opi] |
| | | op.selected = arr.indexOf(op.value)>-1; |
| | | } |
| | | |
| | |
| | | ele.value = data.object[f]; |
| | | } |
| | | |
| | | if(ele.type.indexOf("select")>-1 && ele.value){ |
| | | jQuery(ele).change() |
| | | } |
| | | } |
| | | else{ |
| | | console.log(f + 'is not in data.object'); |
| | |
| | | } |
| | | |
| | | var staticResources = JSON.parse('{!staticResource}'); |
| | | var staticResourceAWSContact = JSON.parse('{!staticResourceAWSContact}'); |
| | | |
| | | var requiredFieldAPIList = JSON.parse('{!requiredFieldAPIListStr}'); |
| | | var fieldAPIToLabelMap = JSON.parse('{!fieldAPIToLabelMapStr}'); |
| | | console.log('{!staticResource}'); |
| | | var VLookUpFields = {! VLookUpFieldsJson}; |
| | | function ProcessPI(sobjJson, payloadForNewPI) { |
| | | blockme(); |
| | | if ({!isNewMode}) { |
| | | NewPIToAWS(sobjJson, payloadForNewPI) |
| | | if ({!isNewMode} || {!isCloneMode}) { |
| | | NewPIToAWS(sobjJson, payloadForNewPI) |
| | | }else { |
| | | UpdatePIToAWS(sobjJson, payloadForNewPI) |
| | | } |
| | |
| | | } |
| | | |
| | | 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+'_',''); |
| | | } |
| | |
| | | return ''; |
| | | } |
| | | |
| | | function IsFormElement(tag_name){ |
| | | return ['input','select','textarea'].indexOf(tag_name)>-1; |
| | | function IsFormTag(tag_name){ |
| | | if (!tag_name) { |
| | | return false; |
| | | } |
| | | return ['input','select','textarea'].indexOf(tag_name.toLowerCase())>-1; |
| | | } |
| | | |
| | | function IsFormElement(e){ |
| | | return IsFormTag(e.tagName); |
| | | } |
| | | |
| | | function getPIPayload(sobjJson) { |
| | |
| | | error_msg += ';电话号码错误'; |
| | | } |
| | | |
| | | for(let e of document.getElementsByTagName('select')){ |
| | | for(let op of e.options){ |
| | | for(let ei in document.getElementsByTagName('select')){ |
| | | let e = e.options[ei]; |
| | | for(let opi in e.options){ |
| | | let op = e.options[opi]; |
| | | if(op.value == "*****" && op.selected){ |
| | | error_msg += ';下拉框不能主动选择密文选项'; |
| | | } |
| | |
| | | |
| | | function getSobjectInformation() { |
| | | |
| | | let nodelist = document.getElementsByClassName(config.ApiPrefix); |
| | | //let nodelist = document.getElementsByClassName(config.ApiPrefix); |
| | | let result = {} |
| | | for (let index = 0; index < nodelist.length; index++) { |
| | | let ele = nodelist[index]; |
| | | let field_api_name = GetEleApiName(ele); |
| | | for (let index in api_id_map) { |
| | | let ele = document.getElementById(api_id_map[index]); |
| | | let field_api_name = index; |
| | | let tag_name = ele.tagName.toLowerCase(); |
| | | if(!IsFormElement(tag_name)){ |
| | | if(!IsFormTag(tag_name)){ |
| | | console.log('tag_name='+tag_name+',field_api_name'+field_api_name+' is not a form element'); |
| | | continue; |
| | | } |
| | |
| | | v = ele.value; |
| | | } |
| | | |
| | | if(v && v != "000000000000000"){ |
| | | // if(v && v != "000000000000000"){ |
| | | result[field_api_name] = v; |
| | | } |
| | | // } |
| | | |
| | | } |
| | | } else if (ele.type == 'checkbox') { |
| | |
| | | //1. Get Sobject Information from Form |
| | | let sobjJson = getSobjectInformation(); |
| | | //2. Validate the Sobject field value formate, for example the email formate or phone formate |
| | | |
| | | let validationResultMessage = validateFieldValueFormate(); |
| | | console.log(validationResultMessage); |
| | | if (validationResultMessage) { |
| | | //Popup error message. - To Do After POC |
| | | alertErrorMessage(validationResultMessage); |
| | | return |
| | | } |
| | | //updated by Lijun0325 Start |
| | | //let validationResultMessage = validateFieldValueFormate(); |
| | | //console.log(validationResultMessage); |
| | | // if (validationResultMessage) { |
| | | // //Popup error message. - To Do After POC |
| | | // alertErrorMessage(validationResultMessage); |
| | | // return |
| | | // } |
| | | //updated by Lijun0325 End |
| | | // Check Required Field |
| | | let checkRequiredFieldMsgResult = checkRequiredFieldMsg(sobjJson); |
| | | if (checkRequiredFieldMsgResult) { |
| | |
| | | console.log(accountValue); |
| | | if(true || accountValue !='000000000000000'){ |
| | | let baseUrl = "/apex/SearchContactPage"; |
| | | let suffixUrl = "?contactId="+contactNodeId+"&accountId="+accountValue; |
| | | let searchContactKeyWord = document.querySelector("[data-id='Contact__c']").value; |
| | | let suffixUrl = "?contactId="+contactNodeId+"&accountId="+accountValue+"&searchContactKeyWord=" + searchContactKeyWord; |
| | | let newSearchContactParam = 'height=600,width=800,left=100,top=100,dialogHide=true,resizable=no,scrollbars=yes,toolbar=no,status=no'; |
| | | newSearchContactWindow = window.open(baseUrl+suffixUrl, 'Popup', newSearchContactParam); |
| | | if (window.focus) { |
| | |
| | | let sfId = document.getElementById(document.querySelector("[data-id='Contact__c']").id + '_lkid').value; |
| | | let contactsInfo = JSON.parse('{!LookUpOverrideFieldsMapJson}'); |
| | | let dataId = contactsInfo[sfId]; |
| | | let url = staticResourcesContact.queryUrl + '?dataId=' + dataId; |
| | | fetch(url, { |
| | | method: 'GET', |
| | | headers: { |
| | | 'Content-Type': 'application/json', |
| | | 'pi-token': staticResources.token |
| | | } |
| | | }).then((data) => { |
| | | return data.json(); |
| | | }).then((result) => { |
| | | document.querySelector("[data-id='Contact__c']").value = result.object.lastName; |
| | | }) |
| | | |
| | | if(dataId){ |
| | | AWSService.query(staticResourceAWSContact.queryUrl,dataId,function(result){ |
| | | if(result.object){ |
| | | document.querySelector("[data-id='Contact__c']").value = result.object.lastName; |
| | | } |
| | | |
| | | },staticResources.token); |
| | | } |
| | | |
| | | } |
| | | |
| | | </script> |
| | |
| | | <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"> |
| | |
| | | <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}" /> |
| | |
| | | |
| | | <!--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="{!Agency_Contact__c[layoutField.fieldAPI]}" rendered="{!not(layoutField.isPlaceHOlder)}" |
| | | <apex:inputField styleClass="{!ApiPrefix} {!ApiPrefix}_{!layoutField.fieldAPI}" html-data-id="{!layoutField.fieldAPI}" value="{!Agency_Contact__c[layoutField.fieldAPI]}" rendered="{!not(layoutField.isPlaceHOlder)&&layoutField.fieldAPI!='RecordTypeId'}" |
| | | required="{!layoutField.isRequired}" /> |
| | | <apex:outputField styleClass="PIBackApi PIBackApi_{!layoutField.fieldAPI}" html-data-id="{!layoutField.fieldAPI}" value="{!Agency_Contact__c[layoutField.fieldAPI]}" rendered="{!not(layoutField.isPlaceHOlder)&&layoutField.fieldAPI=='RecordTypeId'}" |
| | | /> |
| | | <apex:pageblocksectionitem rendered="{!layoutField.isPlaceHolder}"> |
| | | </apex:pageblocksectionitem> |
| | | </apex:repeat> |
| | |
| | | </apex:pageBlockSection> |
| | | </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; |
| | | } |
| | | |
| | | } |
| | | } |
| | | console.log(api_id_map); |
| | | sfdcPage.appendToOnloadQueue(function () { |
| | | jQuery('option').each(function(i,e){ |
| | | if(e.value == '_\x01_'){ |
| | | e.value = ''; |
| | | } |
| | | }) |
| | | //Replace Vlookup Field |
| | | replaceSearchContactLookup(); |
| | | |
| | | //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}' |
| | | } |
| | | } |
| | | jQuery('a[data-id="OwnerId"]').remove(); |
| | | |
| | | document.getElementById('topButtonRow').style = ''; |
| | | document.getElementById('bottomButtonRow').style = ''; |
| | | /* |
| | | jQuery(".lookupInput").each(function(i,e){ |
| | | let je =jQuery(e).find('input'); |
| | | je.attr("readonly",""); |
| | | je.css("background","unset"); |
| | | |
| | | let dataid = je.attr('data-id'); |
| | | if(['Hospital_Name__c','Department_Class__c','OwnerId'].indexOf(dataid) > -1) return; |
| | | jQuery(e).children(":last-child").before('<img class="closeIcon" data-id="'+dataid+'" generate="" alt="Clear" src="/s.gif" style="display: inline-block;">'); |
| | | }) |
| | | |
| | | jQuery(".lookupInput").on("mouseenter","img[generate]",function(e){ |
| | | this.className = "closeIconOn"; |
| | | }); |
| | | |
| | | jQuery(".lookupInput").on("mouseleave","img[generate]",function(e){ |
| | | this.className = "closeIcon" |
| | | }); |
| | | |
| | | jQuery(".lookupInput").on("click","img[generate]",function(e){ |
| | | let id = jQuery("input[data-id='"+jQuery(this).attr("data-id")+ "']").attr("id"); |
| | | let input = document.getElementById(id); |
| | | if(input){ |
| | | input.value = ''; |
| | | let hidden = document.getElementById(id+'_lkid'); |
| | | if(hidden){ |
| | | hidden.value = ''; |
| | | } |
| | | } |
| | | });*/ |
| | | let previous_value = {}; |
| | | jQuery(".lookupInput input").each(function(i,e){ |
| | | let je =jQuery(e); |
| | | |
| | | let dataid = je.attr('data-id'); |
| | | if(['Contact__c'].indexOf(dataid) < 0) return; |
| | | |
| | | jQuery(e).focus(function(){ |
| | | previous_value[this.id] = this.value; |
| | | }) |
| | | |
| | | jQuery(e).change(function(){ |
| | | if (previous_value[this.id] != jQuery(this).val()) { |
| | | document.getElementById(this.id+'_lkid').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) { |
| | | document.querySelector("[data-id='"+layoutField.fieldAPI+"']").disabled = !(layoutField.editableField); |
| | | } |
| | | } |
| | | } |
| | | |
| | | //Replace Vlookup Field |
| | | replaceSearchContactLookup(); |
| | | |
| | | }); |
| | | </script> |
| | | <div class="pbBottomButtons"> |
| | |
| | | <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}" /> |