161 lines
12 KiB
OpenEdge ABL
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){
|
|
}
|
|
} |