From de443ac0b8b34e3d4fe13cfac7df65ad5bea41b6 Mon Sep 17 00:00:00 2001
From: 黄千龙 <huangqianlong@prec-tech.com>
Date: 星期二, 25 四月 2023 17:25:20 +0800
Subject: [PATCH] On-Call
---
force-app/main/default/pages/NewOnCall.page | 427 +++++++++++++++++++++++++++++++++++++++++++++++++++++
force-app/main/default/pages/NewOnCall.page-meta.xml | 7
2 files changed, 434 insertions(+), 0 deletions(-)
diff --git a/force-app/main/default/pages/NewOnCall.page b/force-app/main/default/pages/NewOnCall.page
new file mode 100644
index 0000000..11b0441
--- /dev/null
+++ b/force-app/main/default/pages/NewOnCall.page
@@ -0,0 +1,427 @@
+<apex:page standardController="On_Call__c" extensions="OnCallController" id="page" lightningStylesheets="true">
+ <apex:includeScript value="{! URLFOR($Resource.AWSService, 'AWSService.js') }" />
+ <apex:stylesheet value="{!URLFOR($Resource.blockUIcss)}"/>
+ <apex:includeScript value="{!URLFOR($Resource.jquery183minjs)}"/>
+ <apex:includeScript value="{!URLFOR($Resource.PleaseWaitDialog)}"/>
+ <apex:includeScript value="{!URLFOR($Resource.connection20)}"/>
+ <style>
+ .disabledbutton {
+ pointer-events: none;
+ opacity: 0.4;
+ }
+ </style>
+ <script>
+ //Initial Required Information
+ AWSService.sfSessionId = '{!GETSESSIONID()}';
+ var staticResources = JSON.parse('{!staticResource}');
+ //zhj MEBG鏂版柟妗堟敼閫� 2022-11-29 start
+ var staticResourcesV2 = JSON.parse('{!staticResourceV2}');
+ //zhj MEBG鏂版柟妗堟敼閫� 2022-11-29 end
+ var requiredFieldAPIList = JSON.parse('{!requiredFieldAPIListStr}');
+ var fieldAPIToLabelMap = JSON.parse('{!fieldAPIToLabelMapStr}');
+ var VLookUpFields = new Set(['segment__c','Hospital__c','Oncall_Equipment__c','OwnerId']);
+ var redirectMode = 'Save';
+
+ //Redirect Required Parameter
+ var redirectCallBack = function redirectCallBack(sfId, errorMessage) {
+ if (sfId) {
+ if (redirectMode == 'Save') {
+ window.open('/' + sfId, '_self');
+ } else if (redirectMode == 'SaveAndNew') {
+ window.open('/setup/ui/recordtypeselect.jsp?ent=' + '{!sobjecttypeForFrontEnd}' + '&retURL=/' + '{!sobjectPrefix}' + '/o&save_new_url=/' + '{!sobjectPrefix}' + '/e?retURL=%2F' + '{!sobjectPrefix}' + '%2Fo', '_self');
+ }
+ } else {
+ // alert(errorMessage);
+ alertErrorMessage(errorMessage);
+ }
+ }
+
+ //Query Required Parameter
+ var queryBack = function queryBack(data) {
+ console.log('data = ' + data);
+ //document.querySelector("[id='page:form:pageBlock:pageBlockSection:j_id1:0:j_id2']").value = data.object.callerPhone;
+ if(document.getElementById(api_id_map['Caller_phone__c']))
+ document.getElementById(api_id_map['Caller_phone__c']).value = data.object.callerPhone; //20220404 By Chen Yanan
+ if(document.querySelector("[data-id='Responsible_Person_HP__c']"))
+ document.querySelector("[data-id='Responsible_Person_HP__c']").value = data.object.responsiblePersonHP;
+ unblockUI();
+ };
+
+ //Check If Insert Or Update
+ var insertOrUpdateBack = function insertOrUpdateBack(payloadJson, result, isNewMode) {
+ debugger
+ console.log(result);
+ let r = result;
+ console.log('Result from AWS' + JSON.stringify(r));
+ console.log('payloadJson=' + JSON.stringify(payloadJson));
+ payloadJson.Caller_phone__c = r.object[0].callerPhone;
+ payloadJson.Responsible_Person_HP__c = r.object[0].responsiblePersonHP;
+ //zhj MEBG鏂版柟妗堟敼閫� 2022-11-29 start
+ // payloadJson.Caller_Phone_Encrypt__c = r.object[0].callerPhoneEncrypt;
+ // payloadJson.Responsible_PersonHP_Encrypt__c = r.object[0].responsiblePersonHPEncrypt;
+ //zhj MEBG鏂版柟妗堟敼閫� 2022-11-29 end
+ payloadJson.AWS_Data_Id__c = '{!AWSDataId}';
+ if (isNewMode|| {!isCloneMode} ||!'{!AWSDataId}') {//Add by Li Jun for PIPL 20220413
+ payloadJson.AWS_Data_Id__c = r.object[0].dataId;
+ delete payloadJson.OwnerId;
+ } else {
+ payloadJson.AWS_Data_Id__c = '{!AWSDataId}';
+ }
+ if('{!sfRecordIdForEdit}'){
+ payloadJson.Id = '{!sfRecordIdForEdit}';
+ }
+ if('{!rtTypeId}'){
+ payloadJson.RecordTypeId = '{!rtTypeId}';//Add by zhj for Record Type Issue 20220421
+ }
+ return payloadJson;
+ }
+
+ // New Or Edit
+ function ProcessPI(onCallJson, payloadForNewPI) {
+ blockme();
+ if ({!isNewMode} || {!isCloneMode} ||!'{!AWSDataId}') {//Add by Li Jun for PIPL 20220413
+ NewPIToAWS(onCallJson, payloadForNewPI)
+ }else {
+ UpdatePIToAWS(onCallJson, payloadForNewPI)
+ }
+ }
+
+ //Get Sensitive Information
+ function getPIPayload(onCallJson) {
+ let onCallPayloadList = [];
+ let callerPhone = onCallJson.Caller_phone__c;
+ let responsiblePersonHP = onCallJson.Responsible_Person_HP__c;
+ let onCallPIData = new Object();
+ onCallPIData.callerPhone = callerPhone;
+ onCallPIData.responsiblePersonHP = responsiblePersonHP;
+ onCallPIData.sfRecordId = '';
+ console.log('onCall PI Data:' + JSON.stringify(onCallPIData));
+ onCallPayloadList.push(onCallPIData);
+ console.log(JSON.stringify(onCallPayloadList));
+ return JSON.stringify(onCallPayloadList);
+ }
+
+ //Check Validate Field Value
+ function validateFieldValueFormate() {
+ return true;
+ }
+
+ //Get Page Information
+ function getOnCallInformation() {
+ let nodelist = document.querySelectorAll("[data-id]");
+ let result = {}
+ for (let index = 0; index < nodelist.length; index++) {
+ if (VLookUpFields.has(nodelist[index].getAttribute("data-id"))) {
+ console.log(nodelist[index].id.indexOf('lkwgt'));
+ if (nodelist[index].id.indexOf('lkwgt') == -1) {
+ let vlookUpNodeId = nodelist[index].id + '_lkid';
+ let vlookUpNodeValue = document.getElementById(vlookUpNodeId);
+ let v = '';
+ if(vlookUpNodeValue){
+ v = vlookUpNodeValue.value;
+ }else{
+ v = nodelist[index].value;
+ }
+ result[nodelist[index].getAttribute("data-id")] = v;
+ }
+ } else if (nodelist[index].type == 'checkbox') {
+ result[nodelist[index].getAttribute("data-id")] = nodelist[index].checked;
+ } else if (nodelist[index].type == 'select-multiple') {
+ //nodelist[index].getAttribute("data-id")
+ let multiple = nodelist[index].getAttribute("data-id");
+ let targets = document.querySelector("[data-id=" + multiple + "]").parentNode.children[1].children[0].children[1].children[2].children[0].innerText;
+ targets = targets.replace(/\n/g, ";");
+ console.log('targets = ' + targets);
+ result[nodelist[index].getAttribute("data-id")] = targets;
+ } else {
+ result[nodelist[index].getAttribute("data-id")] = nodelist[index].value;
+ }
+ let x = index + 1;
+ if (x <= nodelist.length - 1 && (nodelist[x].getAttribute("data-id") == nodelist[index].getAttribute("data-id"))) {
+ index++;
+ }
+ }
+ console.log(JSON.stringify(result));
+ return result;
+ }
+
+ //Query from AWS
+ function QueryOnCallFromAWS() {
+ AWSService.query(staticResources.queryUrl, '{!AWSDataId}', queryBack, staticResources.token);
+ }
+
+ //Update Sensitive Information to AWS
+ function UpdatePIToAWS(onCallJson, payloadForNewPI) {
+ let controllerSaveMethod = '{!$RemoteAction.OnCallController.saveOnCall}';
+ let obj = JSON.parse(payloadForNewPI);
+ obj[0].dataId = '{!AWSDataId}';
+ let payloadForNewPIJson = JSON.stringify(obj);
+ //zhj MEBG鏂版柟妗堟敼閫� 2022-11-29 start
+ //AWSService.update(staticResources.updateUrl, onCallJson, payloadForNewPIJson, controllerSaveMethod, staticResources.token, staticResources.transactionUrl, false, insertOrUpdateBack, redirectCallBack);
+ AWSService.update(staticResourcesV2.updateUrl, onCallJson, payloadForNewPIJson, controllerSaveMethod, staticResources.token, staticResourcesV2.transactionUrl, false, insertOrUpdateBack, redirectCallBack);
+ //zhj MEBG鏂版柟妗堟敼閫� 2022-11-29 end
+ }
+
+ //Insert Sensitive Information to AWS
+ function NewPIToAWS(onCallJson, payloadForNewPI) {
+ let controllerSaveMethod = '{!$RemoteAction.OnCallController.saveOnCall}';
+ //zhj MEBG鏂版柟妗堟敼閫� 2022-11-29 start
+ //AWSService.insert(staticResources.newUrl, onCallJson, payloadForNewPI, controllerSaveMethod, staticResources.token, staticResources.transactionUrl,{!isNewMode}, insertOrUpdateBack, redirectCallBack);
+ AWSService.insert(staticResourcesV2.newUrl, onCallJson, payloadForNewPI, controllerSaveMethod, staticResourcesV2.token, staticResources.transactionUrl,{!isNewMode}, insertOrUpdateBack, redirectCallBack);
+ //zhj MEBG鏂版柟妗堟敼閫� 2022-11-29 end
+ }
+
+ //Check Required Fields
+ function checkRequiredFieldMsg(formData) {
+ let blankRequiredFields = '';
+ for (i = 0; i < requiredFieldAPIList.length; i++) {
+ if (formData[requiredFieldAPIList[i]] && !VLookUpFields.has(requiredFieldAPIList[i])) {
+ continue;
+ }else if(VLookUpFields.has(requiredFieldAPIList[i]) && formData[requiredFieldAPIList[i]] != '000000000000000'){
+ continue;
+ } else {
+ if (blankRequiredFields == '') {
+ blankRequiredFields = blankRequiredFields + fieldAPIToLabelMap[requiredFieldAPIList[i]];
+ } else {
+ blankRequiredFields = blankRequiredFields + ',' + fieldAPIToLabelMap[requiredFieldAPIList[i]];
+ }
+
+ }
+ }
+ return blankRequiredFields;
+ }
+ 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");
+ }
+ }
+ //Base Process
+ function saveOnCallProcess(saveMode) {
+ EditButton(true);
+ redirectMode = saveMode;
+ console.log('redirectMode' + redirectMode);
+ hiddenErrorMsgNode();
+ //1. Get onCall Information from Form
+ let onCallJson = getOnCallInformation();
+ //2. Validate the onCall 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('閭鏍煎紡杈撳叆鏈夎锛岃閲嶆柊杈撳叆锛�');
+ return
+ }
+ // Check Required Field
+ let checkRequiredFieldMsgResult = checkRequiredFieldMsg(onCallJson);
+ if (checkRequiredFieldMsgResult) {
+ alertErrorMessage('{!Input_Required_Field_Msg}' + checkRequiredFieldMsgResult);
+ return
+ }
+ //3. Prepare the payload for New PI API To AWS - To Do
+ let payloadForNewPI = getPIPayload(onCallJson);
+
+ //4. onCall to AWS
+ ProcessPI(onCallJson, payloadForNewPI);
+ }
+
+ //Alert Error Message
+ function alertErrorMessage(errorMsg) {
+ let errorMsgNode = document.getElementById("page:form:block:msgContent");
+ errorMsg = '閿欒锛氭棤鏁堟暟鎹��' + '\n' + errorMsg;
+ errorMsgNode.innerText = errorMsg;
+ errorMsgNode.className = 'pbError';
+ unblockUI();
+ EditButton(false);
+ }
+
+ //Hide Error Message
+ function hiddenErrorMsgNode() {
+ let errorMsgNode = document.getElementById("page:form:block:msgContent");
+ errorMsgNode.innerText = '';
+ errorMsgNode.className = '';
+ }
+ var GetEleApiName = function(ele){
+ for(let ci in ele.classList){
+ let c = ele.classList[ci];
+ if(c.indexOf('PIBackApi'+'_')>-1){
+ return c.replace('PIBackApi'+'_','');
+ }
+ }
+ return '';
+ }
+
+ 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);
+ }
+ </script>
+ <div class="bPageTitle">
+ <div class="ptBody">
+ <div class="content">
+ <img src="/img/s.gif" alt="OnCall" class="pageTitleIcon" title="OnCall" />
+ <h1 class="pageType">OnCall缂栬緫
+ <span class="titleSeparatingColon">:</span>
+ </h1>
+ <h2 class="pageDescription">鏂板缓OnCall</h2>
+ <div class="blank"> </div>
+ </div>
+ <div class="links">
+ <a href="javascript:openPopupFocusEscapePounds(%27https://help.salesforce.com/apex/htdoor?loc=help&target=onCalls_edit.htm&section=onCalls&language=zh_CN&release=234.18.8&instance=CS117&showSplash=true%27, %27Help%27, 700, 600, %27width=700,height=600,resizable=yes,toolbar=yes,status=no,scrollbars=yes,menubar=yes,directories=no,location=no,dependant=no%27, false, false);"
+ title="姝ら〉闈㈢殑甯姪 锛堟柊绐楀彛锛�">
+ <span class="helpLink">姝ら〉闈㈢殑甯姪</span>
+ <img src="/img/s.gif" alt="" class="helpIcon" />
+ </a>
+ </div>
+ </div>
+ <div class="ptBreadcrumb"></div>
+ </div>
+ <apex:form id="form">
+ <apex:pageblock id="block" >
+ <div class="pbHeader">
+ <table cellspacing="0" cellpadding="0" border="0">
+ <tbody>
+ <tr>
+ <td class="pbTitle">
+ <img src="/img/s.gif" alt="" class="minWidth" title="" width="1" height="1" />
+ <h2 class="mainTitle">OnCall缂栬緫</h2>
+ </td>
+ <td class="pbButton" id="topButtonRow" style="pointer-events: none; opacity: 0.4;">
+ <input class="btn" type="Button" value="淇濆瓨" onclick="saveOnCallProcess('Save')" />
+ <input class="btn" type="Button" value="淇濆瓨骞舵柊寤�" onclick="saveOnCallProcess('SaveAndNew')" />
+ <apex:commandButton action="{!cancel}" value="鍙栨秷" />
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <!-- Error Msg-->
+ <div style="text-align: center;">
+ <apex:outputPanel id="errorMsg">
+ <apex:pageMessages id="msgContent" escape="false" />
+ </apex:outputPanel>
+ </div>
+ <!-- Iterate the layoutSections, which is a list of sections -->
+ <apex:repeat value="{!layoutSections}" var="layoutSection">
+ <apex:pageBlockSection title="{!layoutSection.name}" collapsible="{!layoutSection.allowCollapse}" columns="{!layoutSection.columns}">
+
+ <!--Each section has layoutFields, let's iterate them as well-->
+ <apex:repeat value="{!layoutSection.layoutFields}" var="layoutField">
+ <apex:inputField styleClass="PIBackApi PIBackApi_{!layoutField.fieldAPI}" html-data-id="{!layoutField.fieldAPI}" value="{!On_Call__c[layoutField.fieldAPI]}" rendered="{!not(layoutField.isPlaceHOlder)&&isNewMode}"
+ required="{!layoutField.isRequired}" />
+ <apex:inputField styleClass="PIBackApi PIBackApi_{!layoutField.fieldAPI}" html-data-id="{!layoutField.fieldAPI}" value="{!On_Call__c[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="{!On_Call__c[layoutField.fieldAPI]}" rendered="{!not(layoutField.isPlaceHOlder)&¬(isNewMode)&&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;
+ }
+
+ }
+ }
+ //Append Page
+ sfdcPage.appendToOnloadQueue(function () {
+ 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");
+ }
+ }
+ }
+ }
+ }
+ //2. Query AWS Data by dataId
+ console.log('Mode for onCall Page:' + {!isNewMode});
+ if (!{!isNewMode}) {
+ blockme();
+ QueryOnCallFromAWS();
+ };
+ document.querySelector("[data-id='OwnerId']").classList.add("disabledbutton");
+
+ 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 = '';
+ }
+ }
+ });
+ });
+ </script>
+ <div class="pbBottomButtons">
+ <table cellspacing="0" cellpadding="0" border="0">
+ <tbody>
+ <tr>
+ <td class="pbTitle">
+ <img src="/img/s.gif" alt="" class="minWidth" title="" width="1" height="1" /> </td>
+ <td class="pbButtonb" id="bottomButtonRow" style="pointer-events: none; opacity: 0.4;">
+ <input class="btn" type="Button" value="淇濆瓨" onclick="saveOnCallProcess('Save')" />
+ <input class="btn" type="Button" value="淇濆瓨骞舵柊寤�" onclick="saveOnCallProcess('SaveAndNew')" />
+ <apex:commandButton action="{!cancel}" value="鍙栨秷" />
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ </apex:pageblock>
+
+ </apex:form>
+</apex:page>
\ No newline at end of file
diff --git a/force-app/main/default/pages/NewOnCall.page-meta.xml b/force-app/main/default/pages/NewOnCall.page-meta.xml
new file mode 100644
index 0000000..276c499
--- /dev/null
+++ b/force-app/main/default/pages/NewOnCall.page-meta.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ApexPage xmlns="http://soap.sforce.com/2006/04/metadata">
+ <apiVersion>54.0</apiVersion>
+ <availableInTouch>false</availableInTouch>
+ <confirmationTokenRequired>false</confirmationTokenRequired>
+ <label>NewOnCall</label>
+</ApexPage>
--
Gitblit v1.9.1