SyncMadeEasy/force-app/main/default/classes/BatchForCreateWebhookMultiS...

161 lines
12 KiB
OpenEdge ABL

/**
* ─────────────────────────────────────────────────────────────────────────────────────────────────┐
* This batch class is handle webhook craete process into the Shopify platform.
* Using Shopify API we are creating the webhooks into the Shopify.
* As per the user requirement we are creating webhooks and delete as well.
* We must create webhool for customer and product.
* Shopify API Documentation: https://shopify.dev/docs/admin-api/rest/reference
* Create Shopify Store: https://www.shopify.com/signup?itcat=identity&itterm=create-new-store
* Shopify API Release 2020: https://www.shopify.in/partners/blog/shopify-api-release-january-2020
* What is Person Account in Salesforce ? https://help.salesforce.com/articleView?id=account_person.htm&type=5
* ──────────────────────────────────────────────────────────────────────────────────────────────────
* @author Sumit <sumit@hicShopify.com>
* ──────────────────────────────────────────────────────────────────────────────────────────────────
*/
global with sharing class BatchForCreateWebhookMultiStore implements Database.Batchable<HIC_ShopifySync__HIC_Webhook__c>, Database.AllowsCallouts, Database.Stateful{
//Providing Username and Password
public static string USER_NAME;
public static string PASSWORD;
//Provide URL of the Shopify store to HTTP requests
public static string shopifyUrl;
String store = 'Default';
public static List<HIC_ShopifySync__HIC_Configuration__c > configurationList = new List<HIC_ShopifySync__HIC_Configuration__c >();
global BatchForCreateWebhookMultiStore(String store){
this.store = store;
configurationList = [Select id, name, HIC_ShopifySync__Shopify_URL__c, HIC_ShopifySync__API_Key__c, HIC_ShopifySync__Private_Key_Password__c, HIC_ShopifySync__Opportunity__c, HIC_ShopifySync__Order__c, HIC_ShopifySync__Opportunity_Line_Item__c, HIC_ShopifySync__Order_Line_Item__c, HIC_ShopifySync__Order_Fulfillment__c, HIC_ShopifySync__Person_Account__c,HIC_ShopifySync__Enable_Draft_Order__c from HIC_ShopifySync__HIC_Configuration__c where HIC_ShopifySync__Store__c =: store limit 1];
USER_NAME = configurationList[0].HIC_ShopifySync__API_Key__c;
PASSWORD = configurationList[0].HIC_ShopifySync__Private_Key_Password__c;
shopifyUrl = configurationList[0].HIC_ShopifySync__Shopify_URL__c;
}
global BatchForCreateWebhookMultiStore(){
}
List <HIC_ShopifySync__HIC_Webhook__c> webhookListToPass = new List <HIC_ShopifySync__HIC_Webhook__c>();
global Iterable<HIC_ShopifySync__HIC_Webhook__c> start(Database.BatchableContext bc){
List <HIC_ShopifySync__HIC_Webhook__c> webhookList;
if(store != 'Default'){
List <HIC_ShopifySync__HIC_Configuration__c> config = [Select id, HIC_ShopifySync__Shopify_Objects__c, HIC_ShopifySync__Opportunity_Sync__c, HIC_ShopifySync__Inventory_Location_Sync__c, HIC_ShopifySync__Draft_Order_Sync__c, HIC_ShopifySync__Order_Sync__c, HIC_ShopifySync__Customer_Sync__c, HIC_ShopifySync__Collection_Sync__c, HIC_ShopifySync__Product_Sync__c, HIC_ShopifySync__Salesforce_Site_URL__c,HIC_ShopifySync__Enable_Draft_Order__c,HIC_ShopifySync__Inventory_Location__c from HIC_ShopifySync__HIC_Configuration__c WHERE HIC_ShopifySync__Store__c=: store LIMIT 1];
Set <String> selectedObjects = new Set <String>();
for (HIC_ShopifySync__HIC_Configuration__c con : config){
if(con.HIC_ShopifySync__Order_Sync__c ){
selectedObjects.add('Order');
}
if(con.HIC_ShopifySync__Draft_Order_Sync__c ){
selectedObjects.add('DraftOrder');
}
if(con.HIC_ShopifySync__Customer_Sync__c){
selectedObjects.add('Customer');
}
if(con.HIC_ShopifySync__Collection_Sync__c){
selectedObjects.add('HIC_ShopifySync__Collection__c');
}
if(con.HIC_ShopifySync__Product_Sync__c){
selectedObjects.add('Product2');
}
if(con.HIC_ShopifySync__Inventory_Location__c){
selectedObjects.add('HIC_ShopifySync__Inventory_Level__c');
selectedObjects.add('HIC_ShopifySync__Location__c');
}
if(con.HIC_ShopifySync__Shopify_Objects__c != null && con.HIC_ShopifySync__Shopify_Objects__c != ''){
for(String shObject : con.HIC_ShopifySync__Shopify_Objects__c.split(',')){
selectedObjects.add(shObject);
}
}
}
webhookList = [Select HIC_ShopifySync__Store__c,HIC_ShopifySync__SF_URL_Mapping__c, HIC_ShopifySync__Shopify_Object__c,HIC_ShopifySync__DML_Type__c,HIC_ShopifySync__Topic__c,HIC_ShopifySync__Metafields_Namespace__c, HIC_ShopifySync__Webhook_Id__c from HIC_ShopifySync__HIC_Webhook__c where HIC_ShopifySync__Shopify_Object__c IN: selectedObjects AND HIC_ShopifySync__Store__c =: store LIMIT 500];
}else{
webhookList = [Select HIC_ShopifySync__Store__c,HIC_ShopifySync__SF_URL_Mapping__c, HIC_ShopifySync__Shopify_Object__c,HIC_ShopifySync__DML_Type__c,HIC_ShopifySync__Topic__c,HIC_ShopifySync__Metafields_Namespace__c, HIC_ShopifySync__Webhook_Id__c from HIC_ShopifySync__HIC_Webhook__c where HIC_ShopifySync__Store__c != 'Default' LIMIT 2000];
}
return webhookList;
}
global void execute(Database.BatchableContext bc , List<HIC_ShopifySync__HIC_Webhook__c> scope){
String orgId = UserInfo.getOrganizationId();
List <HIC_ShopifySync__HIC_Configuration__c> confList;
if(Schema.sObjectType.HIC_ShopifySync__HIC_Configuration__c.isAccessible() &&
Schema.sObjectType.HIC_ShopifySync__HIC_Configuration__c.fields.Salesforce_Site_URL__c.isAccessible() &&
Schema.sObjectType.HIC_ShopifySync__HIC_Configuration__c.fields.name.isAccessible())
confList = [Select id, HIC_ShopifySync__Shopify_Objects__c, HIC_ShopifySync__Opportunity_Sync__c, HIC_ShopifySync__Inventory_Location_Sync__c, HIC_ShopifySync__Draft_Order_Sync__c, HIC_ShopifySync__Order_Sync__c, HIC_ShopifySync__Customer_Sync__c, HIC_ShopifySync__Collection_Sync__c, HIC_ShopifySync__Product_Sync__c, HIC_ShopifySync__Salesforce_Site_URL__c,HIC_ShopifySync__Enable_Draft_Order__c,HIC_ShopifySync__Inventory_Location__c from HIC_ShopifySync__HIC_Configuration__c WHERE HIC_ShopifySync__Store__c =: scope[0].HIC_ShopifySync__Store__c LIMIT 1];
if(confList.isEmpty()) return;
string webhookURL;
if(!ShopifyController.isSiteSupportedOrg()){
system.debug('@@@ NON SITE confList[0].HIC_ShopifySync__Salesforce_Site_URL__c BEFORE: '+confList[0].HIC_ShopifySync__Salesforce_Site_URL__c);
//webhookURL = confList[0].HIC_ShopifySync__Salesforce_Site_URL__c+'/api/webhook/shopify/'+Scope[0].HIC_ShopifySync__SF_URL_Mapping__c+'?objectname='+Scope[0].HIC_ShopifySync__Shopify_Object__c+'&DMLType='+Scope[0].HIC_ShopifySync__DML_Type__c+'&store='+scope[0].HIC_ShopifySync__Store__c+'&orgId='+orgId;
webhookURL = confList[0].HIC_ShopifySync__Salesforce_Site_URL__c+'/api/webhook/shopify?objectname='+Scope[0].HIC_ShopifySync__Shopify_Object__c+'&DMLType='+Scope[0].HIC_ShopifySync__DML_Type__c+'&store='+scope[0].HIC_ShopifySync__Store__c+'&orgId='+orgId;
}else{
system.debug('@@@ SITE confList[0].HIC_ShopifySync__Salesforce_Site_URL__c BEFORE: '+confList[0].HIC_ShopifySync__Salesforce_Site_URL__c);
webhookURL = confList[0].HIC_ShopifySync__Salesforce_Site_URL__c+'/services/apexrest/HIC_ShopifySync/'+Scope[0].HIC_ShopifySync__SF_URL_Mapping__c+'?objectname='+Scope[0].HIC_ShopifySync__Shopify_Object__c+'&DMLType='+Scope[0].HIC_ShopifySync__DML_Type__c+'&store='+scope[0].HIC_ShopifySync__Store__c;
}
system.debug('@@@ webhookURL : '+webhookURL);
//string webhookURL = confList[0].HIC_ShopifySync__Salesforce_Site_URL__c+'/services/apexrest/HIC_ShopifySync/'+Scope[0].HIC_ShopifySync__SF_URL_Mapping__c+'?objectname='+Scope[0].HIC_ShopifySync__Shopify_Object__c+'&DMLType='+Scope[0].HIC_ShopifySync__DML_Type__c+'&store='+scope[0].HIC_ShopifySync__Store__c+'&orgId='+orgId;
Set <String> selectedObjects = new Set <String>();
if(store == 'Default'){
for (HIC_ShopifySync__HIC_Configuration__c con : confList){
if(con.HIC_ShopifySync__Order_Sync__c ){
selectedObjects.add('Order');
}
if(con.HIC_ShopifySync__Draft_Order_Sync__c ){
selectedObjects.add('DraftOrder');
}
if(con.HIC_ShopifySync__Customer_Sync__c){
selectedObjects.add('Customer');
}
if(con.HIC_ShopifySync__Collection_Sync__c){
selectedObjects.add('HIC_ShopifySync__Collection__c');
}
if(con.HIC_ShopifySync__Product_Sync__c){
selectedObjects.add('Product2');
}
if(con.HIC_ShopifySync__Inventory_Location__c){
selectedObjects.add('HIC_ShopifySync__Inventory_Level__c');
selectedObjects.add('HIC_ShopifySync__Location__c');
}
if(con.HIC_ShopifySync__Shopify_Objects__c != null && con.HIC_ShopifySync__Shopify_Objects__c != ''){
for(String shObject : con.HIC_ShopifySync__Shopify_Objects__c.split(',')){
selectedObjects.add(shObject);
}
}
}
if(!selectedObjects.contains(Scope[0].HIC_ShopifySync__Shopify_Object__c)) return;
}
webhookClass webhookObj = new webhookClass();
webhookClass.cls_webhook innerObj = new webhookClass.cls_webhook();
innerObj.topic = Scope[0].HIC_ShopifySync__Topic__c;
innerObj.format = 'json';
innerObj.address = webhookURL;
if(Scope[0].HIC_ShopifySync__Metafields_Namespace__c!=null && Scope[0].HIC_ShopifySync__Metafields_Namespace__c.trim() != ''){
innerObj.metafield_namespaces = (Object[])JSON.deserializeUntyped(Scope[0].HIC_ShopifySync__Metafields_Namespace__c);
}
webhookObj.webhook = innerObj;
string webhookBody = JSON.serialize(webhookObj);
system.debug('webhookbody-->'+json.serializepretty(webhookBody));
Map<string,string> responseMap = HICWebhookUtility.processRequest('webhooks','POST',webhookBody,scope[0].HIC_ShopifySync__Store__c);
if(responseMap.containsKey('Ok')){
webhookClass webhookResponseObj = (webhookClass)JSON.deserialize(responseMap.get('Ok'), webhookClass.class);
Scope[0].Webhook_Id__c = webhookResponseObj.webhook.id;
try{
update Scope[0];
//return 'Webhook created in Shopify';
}catch(Exception e){
system.debug('***Error in--'+e.getMessage());
}
}
}
global void finish(Database.BatchableContext bc){
}
}