/*
|
* Author: Bubba Li
|
* Created Date: 01/26/2022
|
* Purpose: Utility class for PI
|
* Test Class: PIHelper
|
* History:
|
* 01/26/2022 - Bubba Li - Initial Code.
|
*
|
* */
|
global without sharing class PIHelper {
|
public static Set<String> displayByOrderNumberObject = new set<String>{'Report__c'};
|
public static String getObjectKeyPrefix(String objName){
|
try{
|
schema.sObjectType sObjType = Schema.getGlobalDescribe().get(objName);
|
return (sObjType.getDescribe().getKeyPrefix());
|
}catch(Exception e){
|
system.debug('Exception from get key prefix:'+e.getMessage());
|
return '';
|
}
|
}
|
// confirm file transaction
|
// @future(callout =true)
|
public static void confirmFileTrans(String module,Integer isSuccess, String sfRecordId ,String transId ,String token,String transUrl){
|
Boolean result =false;
|
Transaction_Log__c traLog = new Transaction_Log__c();
|
traLog.Module__c = 'ConfirmFileTransaction '+module;
|
traLog.Interface_URL__c = transUrl;
|
traLog.TransId__c = transId;
|
// traLog.SFRecordId__c=sfRecordId;
|
Integer MaxLogColumnLength = 131072;
|
try {
|
Http http = new Http();
|
HttpRequest request = new HttpRequest();
|
request.setEndpoint(transUrl);
|
request.setMethod('POST');
|
request.setHeader('pi-token',token);
|
request.setHeader('Content-Type', 'application/json');
|
TransRequestBody requestBody =new TransRequestBody();
|
requestBody.isSuccess=isSuccess;
|
requestBody.sfRecordId=sfRecordId;
|
requestBody.txId =transId;
|
request.setBody(JSON.serialize(requestBody));
|
system.debug('request---'+request.tostring());
|
HttpResponse response = http.send(request);
|
system.debug('token--'+token);
|
system.debug('confirm result--'+response.getBody());
|
Map<String, Object> results = (Map<String, Object>) JSON.deserializeUntyped(response.getBody());
|
result = (Boolean)results.get('success');
|
System.debug('result = ' + result);
|
traLog.Status__c = 'success';
|
String res=response.getBody();
|
traLog.Response__c=res.substring(0, (res.length() > MaxLogColumnLength ? MaxLogColumnLength : res.length()));
|
|
} catch (Exception e) {
|
traLog.Status__c = 'fail';
|
traLog.Response__c = e.getMessage();
|
}
|
insert traLog;
|
}
|
// confirm tx transaction
|
|
public static void confirmTrans(String module,Integer isSuccess, String sfRecordId ,String transId ,String token,String transUrl,List<idList> idList){
|
Boolean result =false;
|
Transaction_Log__c traLog = new Transaction_Log__c();
|
traLog.Module__c = 'Confirm Transaction '+module;
|
traLog.Interface_URL__c = transUrl;
|
traLog.TransId__c = transId;
|
Integer MaxLogColumnLength = 131072;
|
if (!String.isEmpty(sfRecordId)) {
|
traLog.SFRecordId__c=sfRecordId;
|
}else {
|
traLog.SFRecordId__c=JSON.serialize(idList);
|
}
|
|
try {
|
Http http = new Http();
|
HttpRequest request = new HttpRequest();
|
request.setEndpoint(transUrl);
|
request.setMethod('POST');
|
request.setHeader('pi-token',token);
|
request.setHeader('Content-Type', 'application/json');
|
TransactionRequestBody requestBody =new TransactionRequestBody();
|
requestBody.isSuccess=isSuccess;
|
requestBody.sfRecordId=sfRecordId;
|
requestBody.idList=idList;
|
requestBody.txId =transId;
|
request.setBody(JSON.serialize(requestBody));
|
system.debug('request---'+request.tostring());
|
HttpResponse response = http.send(request);
|
system.debug('confirm result--'+response.getBody());
|
Map<String, Object> results = (Map<String, Object>) JSON.deserializeUntyped(response.getBody());
|
result = (Boolean)results.get('success');
|
System.debug('result = ' + result);
|
traLog.Status__c = 'success';
|
String res=response.getBody();
|
traLog.Response__c=res.substring(0, (res.length() > MaxLogColumnLength ? MaxLogColumnLength : res.length()));
|
} catch (Exception e) {
|
traLog.Status__c = 'fail';
|
traLog.Response__c = e.getMessage();
|
}
|
insert traLog;
|
}
|
// Use this log method
|
public static void saveTransLog(String module,String awsDataId,String sfId, String transId,String content,String status,String respMsg){
|
Transaction_Log__c traLog = new Transaction_Log__c();
|
traLog.AWS_Data_Id__c = awsDataId;
|
traLog.SFRecordId__c = sfId;
|
traLog.Module__c = 'Upsert SF ' + module;
|
traLog.TransId__c = transId;
|
traLog.Request__c = content;
|
traLog.Status__c = status;
|
traLog.Response__c = respMsg;
|
traLog.Interface_URL__c = traLog.Module__c;
|
insert traLog;
|
}
|
//save qianlima log method add sushanhu 20220324
|
// model 0 为文件 1为数据
|
public static void insertConfirmTrans(String module,Integer isSuccess, String sfRecordId ,String transId ,Integer model,String transUrl,List<idList> idList){
|
Boolean result =false;
|
Transaction_Log__c traLog = new Transaction_Log__c();
|
if (model==0) {
|
traLog.Module__c = 'ConfirmFileTransaction '+module;
|
}else {
|
traLog.Module__c = 'Confirm Transaction '+module;
|
}
|
traLog.Interface_URL__c = transUrl;
|
traLog.TransId__c = transId;
|
Integer MaxLogColumnLength = 131072;
|
if (!String.isEmpty(sfRecordId)) {
|
traLog.Request__c=sfRecordId.substring(0, (sfRecordId.length() > MaxLogColumnLength ? MaxLogColumnLength : sfRecordId.length()));
|
}else {
|
String sfIds =JSON.serialize(idList);
|
traLog.Request__c=sfIds.substring(0, (sfIds.length() > MaxLogColumnLength ? MaxLogColumnLength : sfIds.length()));
|
}
|
if(isSuccess==0){
|
traLog.Status__c = 'fail';
|
} else {
|
traLog.Status__c='success';
|
}
|
insert traLog;
|
}
|
public static PIIntegration getPIIntegrationInfo(String sobjectType){
|
PIIntegration piIntegration = new PIIntegration();
|
//查询url
|
System.debug('thhsobjectType = ' + sobjectType);
|
PI_Policy_Configuration__c config = [SELECT Full_New_URL__c,Full_Search_URL__c,Full_Update_URL__c,Full_Undelete_URL__c,Full_Read_URL__c,Full_Delete_URL__c,Full_View_Unified_Contact_URL__c,TransactionURL__c FROM PI_Policy_Configuration__c WHERE Sobject_Type__c =:sobjectType];
|
System.debug('thhconfig = ' + config);
|
|
//获取appid和appsecret
|
AWS_Integration_Info__mdt awsConfiguration = [SELECT App_Id__c,Max_Query_Number__c,Token_URL__c,App_Secret__c,Host_URL__c FROM AWS_Integration_Info__mdt WHERE DeveloperName = 'AWS_Default_Configuration'];
|
if (awsConfiguration == null) {
|
System.debug('AWS_Integration_Info__mdt没配置');
|
return null;
|
}
|
String awsAppId = awsConfiguration.App_Id__c;
|
String awsAppSecret = awsConfiguration.App_Secret__c;
|
|
System.debug('awsAppId = ' + awsAppId);
|
System.debug('awsAppSecret = ' + awsAppSecret);
|
System.debug('Host_URL__c = ' + awsConfiguration.Host_URL__c);
|
System.debug('Token URL = ' + awsConfiguration.Token_URL__c);
|
|
//获取token
|
String token = '';
|
try{
|
Http http = new Http();
|
HttpRequest request = new HttpRequest();
|
String url = awsConfiguration.Token_URL__c;
|
request.setEndpoint(url);
|
request.setMethod('GET');
|
HttpResponse response = http.send(request);
|
system.debug('response.getBody()='+response.getBody());
|
Map<String, Object> results = (Map<String, Object>) JSON.deserializeUntyped(response.getBody());
|
token = (String)results.get('object');
|
System.debug('token = ' + token);
|
}catch(Exception e){
|
Transaction_Log__c traLog = new Transaction_Log__c();
|
traLog.Module__c = 'Get Token';
|
traLog.Status__c = 'fail';
|
traLog.Response__c = e.getMessage();
|
traLog.Interface_URL__c = awsConfiguration.Token_URL__c;
|
insert traLog;
|
}
|
|
//Insert Get Token Log
|
|
//获取敏感字段
|
piIntegration.PIDetails = [select id,PI_Policy_Configuration__r.Full_New_URL__c, Enable_Encrypt__c, SF_Field_API_Name__c,SF_Field_Encrypted_API__c, AWS_Field_API__c,AWS_Encrypted_Field_API__c,Field_Type__c from PI_Field_Policy_Detail__c where PI_Policy_Configuration_Name__c =:sobjectType and Enable_Encrypt__c=true];
|
if(displayByOrderNumberObject.contains(sobjectType)){
|
piIntegration.PIDetails = [select id,PI_Policy_Configuration__r.Full_New_URL__c, Enable_Encrypt__c, SF_Field_API_Name__c,SF_Field_Encrypted_API__c, AWS_Field_API__c,AWS_Encrypted_Field_API__c,Field_Type__c from PI_Field_Policy_Detail__c where PI_Policy_Configuration_Name__c =:sobjectType and Enable_Encrypt__c=true order by Order_Number__c];
|
}
|
List<String> vLookUpFields = new List<String>();
|
List<String> PIFields = new List<String>();
|
for (PI_Field_Policy_Detail__c PIDetail : piIntegration.PIDetails) {
|
if(PIDetail.Field_Type__c == 'Reference'){
|
vLookUpFields.add(PIDetail.SF_Field_API_Name__c);
|
}
|
PIFields.add(PIDetail.SF_Field_API_Name__c);
|
}
|
|
System.debug('vLookUpFields = ' + vLookUpFields.toString());
|
System.debug('PIFields = ' + PIFields.toString());
|
|
//填充数据
|
piIntegration.maxQueryNumber = Integer.valueof(awsConfiguration.Max_Query_Number__c);
|
piIntegration.newUrl = config.Full_New_URL__c;
|
piIntegration.updateUrl = config.Full_Update_URL__c;
|
piIntegration.queryUrl = config.Full_Read_URL__c;
|
piIntegration.deleteUrl = config.Full_Delete_URL__c;
|
piIntegration.undeleteUrl = config.Full_Undelete_URL__c;
|
piIntegration.viewUnifiedContactUrl = config.Full_View_Unified_Contact_URL__c;
|
piIntegration.transactionURL = config.TransactionURL__c;
|
piIntegration.hostUrl = awsConfiguration.Host_URL__c;
|
piIntegration.searchUrl = config.Full_Search_URL__c;
|
piIntegration.token = token;
|
piIntegration.awsAppId = awsAppId;
|
piIntegration.awsAppSecret = awsAppSecret;
|
piIntegration.vLookUpFields = vLookUpFields;
|
piIntegration.PIFields = PIFields;
|
piIntegration.sobjectPrefix = getObjectKeyPrefix(sobjectType);
|
System.debug('piIntegration' + piIntegration);
|
return piIntegration;
|
}
|
global class PIIntegration{
|
public Integer maxQueryNumber{set;get;}
|
public String sobjectPrefix{set;get;}
|
public String searchUrl{set;get;}
|
public String newUrl{set;get;}
|
public String updateUrl{set;get;}
|
public String queryUrl{set;get;}
|
public String deleteUrl{set;get;}
|
public String undeleteUrl{set;get;}
|
public String viewUnifiedContactUrl{set;get;}
|
public String hostUrl{set;get;}
|
public String token{set;get;}
|
public String awsAppId{set;get;}
|
public String awsAppSecret{set;get;}
|
public String transactionUrl{set;get;}
|
public List<String> vLookUpFields{set;get;}
|
public List<String> PIFields{set;get;}
|
public List<PI_Field_Policy_Detail__c > PIDetails{set;get;}
|
}
|
global class TransRequestBody{
|
public Integer isSuccess{set;get;}
|
public String sfRecordId{set;get;}
|
public String txId{set;get;}
|
|
}
|
global class TransactionRequestBody{
|
public Integer isSuccess{set;get;}
|
public String sfRecordId{set;get;}
|
public String txId{set;get;}
|
public List<idList> idList{set;get;}
|
}
|
global class idList{
|
public String awsId{set;get;}
|
public String sfRecordId{set;get;}
|
}
|
}
|