<apex:page standardController="Tender_information__c" extensions="NewAndEditTenderinformationController" id="page">
|
<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)}"/>
|
<script>
|
|
var config = {};
|
config = {
|
SobjectName : "{!SobjectName}",
|
ApiPrefix:"{!ApiPrefix}",
|
SaveAndNew:false,
|
AWSToSobjectMap:{!AWSToSobjectMapJson},
|
AWSToSobjectNonEncryptedMap:{!AWSToSobjectNonEncryptedMapJson},
|
AWSToSobjectEncryptedMap:{!AWSToSobjectEncryptedMapJson},
|
SobjectToAWSModel:function (sobjJson) {
|
let leadPayloadList = [];
|
let leadPIData = {};
|
|
for(let f in config.AWSToSobjectMap){
|
if(sobjJson.hasOwnProperty(config.AWSToSobjectMap[f])){
|
leadPIData[f] = sobjJson[config.AWSToSobjectMap[f]]
|
}
|
else{
|
console.log(config.AWSToSobjectMap[f] + 'is not in sobjJson');
|
}
|
}
|
|
|
leadPIData.sfRecordId = '';
|
console.log('Sobject PI Data:' + leadPIData);
|
leadPayloadList.push(leadPIData);
|
console.log(JSON.stringify(leadPayloadList));
|
return JSON.stringify(leadPayloadList);
|
},
|
insertOrUpdateBack:function(payloadJson, r, isNewMode){
|
|
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]');
|
}
|
}
|
|
//payloadJson.AWS_Data_Id__c = r.object[0].dataId;
|
payloadJson.AWS_Data_Id__c = '{!AWSDataId}';
|
if (isNewMode) {
|
payloadJson.AWS_Data_Id__c = r.object[0].dataId;
|
} else {
|
payloadJson.AWS_Data_Id__c = '{!AWSDataId}';
|
}
|
return payloadJson;
|
},
|
queryBack:function (data) {
|
console.log('data = ' + data);
|
if(data.object){
|
for(let f in config.AWSToSobjectNonEncryptedMap){
|
let ele = GetEleByClass(config.ApiPrefix + "_"+ config.AWSToSobjectNonEncryptedMap[f]);
|
if(data.object.hasOwnProperty(f) && ele){
|
|
// 多选特殊处理
|
if(ele.type == 'select-multiple'){
|
//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];
|
}
|
|
}
|
else{
|
console.log(f + 'is not in data.object');
|
}
|
}
|
}
|
else{
|
console.log('data.object = ' + data.object);
|
}
|
|
|
// document.querySelector("[data-id='LastName']").value = data.object.lastName;
|
// document.querySelector("[data-id='Phone']").value = data.object.phone;
|
// document.querySelector("[data-id='Email']").value = data.object.email;
|
},
|
updateMethod:"NewAndEditTenderinformationController.saveTenderinformation",
|
insertMethod:"NewAndEditTenderinformationController.saveTenderinformation"
|
}
|
AWSService.sfSessionId = '{!GETSESSIONID()}';
|
var staticResources = JSON.parse('{!staticResource}');
|
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)
|
}else {
|
UpdatePIToAWS(sobjJson, payloadForNewPI)
|
}
|
}
|
|
var GetEleByClass = function(class_name){
|
let eles = document.getElementsByClassName(class_name);
|
if(eles.length > 0) return eles[0];
|
return null;
|
}
|
|
var GetEleApiName = function(ele){
|
for(let c of ele.classList){
|
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 getPIPayload(sobjJson) {
|
return config.SobjectToAWSModel(sobjJson);
|
}
|
|
function validateFieldValueFormate() {
|
let error_msg = '';
|
let textEmail = "[data-id='Email']";
|
let textPhone = "[data-id='Phone']";
|
//Email
|
let email = document.querySelector(textEmail);
|
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 && !/^1[3|5|8|7][0-9]\d{4,8}$/.test(phone.value)){
|
error_msg += ';电话号码错误';
|
}
|
|
for(let e of document.getElementsByTagName('select')){
|
for(let op of e.options){
|
if(op.value == "*****" && op.selected){
|
error_msg += ';下拉框不能主动选择密文选项';
|
}
|
}
|
}
|
|
if(error_msg.length>0 && error_msg[0]== ';'){
|
error_msg = error_msg.substring(1);
|
}
|
|
return error_msg;
|
}
|
|
function getSobjectInformation() {
|
|
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);
|
let tag_name = ele.tagName.toLowerCase();
|
if(!IsFormElement(tag_name)){
|
console.log('tag_name='+tag_name+',field_api_name'+field_api_name+' is not a form element');
|
continue;
|
}
|
|
if (VLookUpFields.indexOf(field_api_name)>=0) {
|
console.log(ele.id.indexOf('lkwgt'));
|
if (ele.id.indexOf('lkwgt') == -1) {
|
let vlookUpNodeId = ele.id + '_lkid';
|
let vlook_ele = document.getElementById(vlookUpNodeId);
|
let v = '';
|
if(vlook_ele){
|
v = vlook_ele.value;
|
}else{
|
v = ele.value;
|
}
|
|
if(v && v != "000000000000000"){
|
result[field_api_name] = v;
|
}
|
|
}
|
} else if (ele.type == 'checkbox') {
|
result[field_api_name] = ele.checked;
|
} else if (ele.type == 'select-multiple') {
|
//field_api_name
|
let multiple = field_api_name;
|
//let targets = GetEleByClass(config.ApiPrefix+'_'+field_api_name).parentNode.children[1].children[0].children[1].children[2].children[0].innerText;
|
let targets = [];
|
for(let i = 0; i < ele.selectedOptions.length; i++) {
|
//let ele = nodelist[i];
|
//targets = targets.replace(ele.selectedOptions[i].value,";");
|
targets.push(ele.selectedOptions[i].value);
|
}
|
//targets = targets.replace(/\n/g, ";");
|
console.log('targets = ' + targets);
|
result[field_api_name] = targets.join(";");
|
} else {
|
result[field_api_name] = ele.value;
|
}
|
}
|
return result;
|
}
|
function QuerySobjectFromAWS() {
|
AWSService.query(staticResources.queryUrl, '{!AWSDataId}', queryBack, staticResources.token);
|
}
|
function queryBack(data) {
|
console.log('data = ' + data);
|
config.queryBack(data);
|
unblockUI();
|
};
|
|
|
function insertOrUpdateBack(payloadJson, result, isNewMode) {
|
console.log(result);
|
let r = result;
|
console.log('Result from AWS' + r);
|
console.log('payloadJson=' + payloadJson);
|
return config.insertOrUpdateBack(payloadJson, r, isNewMode);
|
}
|
|
function redirectCallBack(sfId,errorMsg) {
|
unblockUI();
|
if(errorMsg){
|
alertErrorMessage(errorMsg);
|
}
|
else{
|
if(config.SaveAndNew){
|
window.open('{! SaveAndNewButtonUrl }','_self');
|
}else{
|
window.open('/' + sfId, '_self');
|
}
|
}
|
|
}
|
|
function UpdatePIToAWS(sobjJson, payloadForNewPI) {
|
let controllerSaveMethod = config.updateMethod;
|
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);
|
|
}
|
|
function NewPIToAWS(sobjJson, payloadForNewPI) {
|
let controllerSaveMethod = config.insertMethod;
|
AWSService.insert(staticResources.newUrl, sobjJson, payloadForNewPI, controllerSaveMethod, staticResources.token, staticResources.transactionUrl, true, insertOrUpdateBack,redirectCallBack);
|
|
}
|
|
|
function checkRequiredFieldMsg(formData) {
|
let blankRequiredFields = '';
|
for(i = 0;i<requiredFieldAPIList.length;i++){
|
if(formData[requiredFieldAPIList[i]]){
|
continue;
|
}else{
|
if(blankRequiredFields == ''){
|
blankRequiredFields =blankRequiredFields + fieldAPIToLabelMap[requiredFieldAPIList[i]];
|
}else{
|
blankRequiredFields =blankRequiredFields+',' + fieldAPIToLabelMap[requiredFieldAPIList[i]];
|
}
|
|
}
|
}
|
return blankRequiredFields;
|
}
|
function saveSobjectProcess(save_and_new) {
|
if(save_and_new){
|
config.SaveAndNew = true;
|
}
|
|
hiddenErrorMsgNode();
|
//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
|
}
|
// Check Required Field
|
let checkRequiredFieldMsgResult = checkRequiredFieldMsg(sobjJson);
|
if (checkRequiredFieldMsgResult) {
|
alertErrorMessage('requiredErrorMsg' + checkRequiredFieldMsgResult);
|
return
|
}
|
// //3. Prepare the payload for New PI API To AWS - To Do
|
let payloadForNewPI = getPIPayload(sobjJson);
|
|
// //4. Get Authentication Information for AWS
|
// loadAWSAuthentication();
|
|
// //5. lead to AWS
|
ProcessPI(sobjJson, payloadForNewPI);
|
// awsToken = TestToken;
|
// NewPIToAWS(sobjJson,awsToken, payloadForNewPI)
|
}
|
|
function alertErrorMessage(errorMsg) {
|
let errorMsgNode = document.getElementById("page:form:block:msgContent");
|
errorMsgNode.innerText = errorMsg;
|
errorMsgNode.className = 'pbError';
|
}
|
function hiddenErrorMsgNode() {
|
let errorMsgNode = document.getElementById("page:form:block:msgContent");
|
errorMsgNode.innerText = '';
|
errorMsgNode.className = '';
|
}
|
</script>
|
<div class="bPageTitle">
|
<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>
|
<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>
|
<div class="blank"> </div>
|
</div>
|
<div class="links">
|
<a href="javascript:openPopupFocusEscapePounds(%27https://help.salesforce.com/apex/htdoor?loc=help&target={!sobjectTypeValue}s_edit.htm&section={!sobjectTypeValue}s&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">{! SobjectLabel}<apex:outputText rendered="{!isNewMode}">{!$Label.New}</apex:outputText><apex:outputText rendered="{!not(isNewMode)}">{!$Label.Edit}</apex:outputText></h2>
|
</td>
|
<td class="pbButton" id="topButtonRow">
|
<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}" />
|
</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="{!ApiPrefix} {!ApiPrefix}_{!layoutField.fieldAPI}" html-data-id="{!layoutField.fieldAPI}" value="{!Tender_information__c[layoutField.fieldAPI]}" rendered="{!not(layoutField.isPlaceHOlder)}"
|
required="{!layoutField.isRequired}" />
|
<apex:pageblocksectionitem rendered="{!layoutField.isPlaceHolder}">
|
</apex:pageblocksectionitem>
|
</apex:repeat>
|
|
</apex:pageBlockSection>
|
</apex:repeat>
|
<script>
|
sfdcPage.appendToOnloadQueue(function () {
|
//1. Set Last Name label
|
//document.querySelector("[data-id='LastName']").parentNode.parentNode.parentNode.children[2].children[0].innerText = '姓名';
|
//2. Query AWS Data by dataId
|
console.log('Mode for Sobject Page:' + {!isNewMode});
|
if (!{!isNewMode}) {
|
bolckme();
|
QuerySobjectFromAWS();
|
}
|
});
|
</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">
|
<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}" />
|
</td>
|
</tr>
|
</tbody>
|
</table>
|
</div>
|
</apex:pageblock>
|
|
</apex:form>
|
</apex:page>
|