This document describes the process to execute the Apex script required for the integration setup.


  1. Go to the Developer Console by clicking on the gear icon.
  2. Click on Debug > Open Execute Anonymous Window.
  3. Execute the following script:
// LOAD DEFAULT OBJECT MAPPINGS
StaticResource objectMappingsResource = [SELECT Id, Body FROM StaticResource WHERE Name = 'DefaultObjectMappings' LIMIT 1];
String objectMappingsCSV = objectMappingsResource.Body.toString();
String[] rows = objectMappingsCSV.split('\r\n');
String[] fieldNames = rows[0].split(',');
String[] fieldTypes = new String[fieldNames.size()];
Map<String, Schema.SObjectType> globalDescription = Schema.getGlobalDescribe();
Schema.sObjectType sObjType = globalDescription.get('ObjectMapping__c');
Schema.DescribeSObjectResult sObjectResult = sObjType.getDescribe();
Map<String , Schema.SObjectField> mapFieldList = sObjectResult.fields.getMap();
for (Integer i = 0; i < fieldNames.size(); i++) {
  Schema.DescribeFieldResult fieldResult = mapFieldList.get(fieldNames[i]).getDescribe();
  fieldTypes[i] = String.valueOf(fieldResult.getType());
}
List<ObjectMapping__c> objectMappingsToInsert = new List<ObjectMapping__c>();
for (Integer i = 1; i < rows.size(); i++) {
  ObjectMapping__c objectMapping = new ObjectMapping__c();
  List<String> fieldValues = rows[i].split(',');
  for (Integer j = 0; j < fieldValues.size(); j++) {
    System.debug(fieldNames[j] + ' ' + fieldValues[j]);
    if (fieldTypes[j] == 'BOOLEAN') objectMapping.put(fieldNames[j], Boolean.valueOf(fieldValues[j]));
    else objectMapping.put(fieldNames[j], fieldValues[j]);
  }
  objectMappingsToInsert.add(objectMapping);
}
insert objectMappingsToInsert;

// LOAD DEFAULT FIELD MAPPINGS
StaticResource fieldMappingsResource = [SELECT Id, Body FROM StaticResource WHERE Name = 'DefaultFieldMappings' LIMIT 1];
String fieldMappingsCSV = fieldMappingsResource.Body.toString();
rows = fieldMappingsCSV.split('\r\n');
fieldNames = rows[0].split(',');
fieldTypes = new String[fieldNames.size()];
globalDescription = Schema.getGlobalDescribe();
sObjType = globalDescription.get('FieldMapping__c');
sObjectResult = sObjType.getDescribe();
mapFieldList = sObjectResult.fields.getMap();
for (Integer i = 1; i < fieldNames.size(); i++) {
  Schema.DescribeFieldResult fieldResult = mapFieldList.get(fieldNames[i]).getDescribe();
  fieldTypes[i] = String.valueOf(fieldResult.getType());
}
Map<String, Id> objectMappingNameToIdMap = new Map<String, Id>();
for (ObjectMapping__c objectMapping : [SELECT Id, SFObjectAPIName__c FROM ObjectMapping__c LIMIT 20]) {
  objectMappingNameToIdMap.put(objectMapping.SFObjectAPIName__c, objectMapping.Id);
}
List<FieldMapping__c> fieldMappingsToInsert = new List<FieldMapping__c>();
for (Integer i = 1; i < rows.size(); i++) {
  FieldMapping__c fieldMapping = new FieldMapping__c();
  List<String> fieldValues = rows[i].split(',');
  if (objectMappingNameToIdMap.containsKey(fieldValues[0])) {
    fieldMapping.ObjectLinkedTo__c = objectMappingNameToIdMap.get(fieldValues[0]);
    for (Integer j = 1; j < fieldValues.size(); j++) {
      System.debug(fieldNames[j] + ' ' + fieldValues[j]);
      if (fieldTypes[j] == 'BOOLEAN') fieldMapping.put(fieldNames[j], Boolean.valueOf(fieldValues[j]));
      else fieldMapping.put(fieldNames[j], fieldValues[j]);
    }
    fieldMappingsToInsert.add(fieldMapping);
  }
}
insert fieldMappingsToInsert;

// LOAD CHECKLIST ITEMS
StaticResource checkListItemsResource = [SELECT Id, Body FROM StaticResource WHERE Name = 'SFPAIntegrationChecklistItems' LIMIT 1];
String checkListItemsCSV = checkListItemsResource.Body.toString();
rows = checkListItemsCSV.split('\r\n');
fieldNames = rows[0].split(',');
fieldTypes = new String[fieldNames.size()];
globalDescription = Schema.getGlobalDescribe();
sObjType = globalDescription.get('SF_PA_Integration_Checklist_Item__c');
sObjectResult = sObjType.getDescribe();
mapFieldList = sObjectResult.fields.getMap();
for (Integer i = 0; i < fieldNames.size(); i++) {
  System.debug(fieldNames[i]);
  Schema.DescribeFieldResult fieldResult = mapFieldList.get('' + fieldNames[i]).getDescribe();
  fieldTypes[i] = String.valueOf(fieldResult.getType());
}
List<SF_PA_Integration_Checklist_Item__c> checkListItemsToInsert = new List<SF_PA_Integration_Checklist_Item__c>();
for (Integer i = 1; i < rows.size(); i++) {
  SF_PA_Integration_Checklist_Item__c checkListItem = new SF_PA_Integration_Checklist_Item__c();
  List<String> fieldValues = rows[i].split(',');
  for (Integer j = 0; j < fieldValues.size(); j++) {
    System.debug(fieldNames[j] + ' ' + fieldValues[j] + ' ' + fieldTypes[j]);
    if (fieldTypes[j] == 'BOOLEAN') checkListItem.put(fieldNames[j], Boolean.valueOf(fieldValues[j]));
    else if (fieldTypes[j] == 'DOUBLE') checkListItem.put(fieldNames[j], Double.valueOf(fieldValues[j]));
    else checkListItem.put(fieldNames[j], fieldValues[j]);
  }
  checkListItemsToInsert.add(checkListItem);
}
insert checkListItemsToInsert;

// COMPANY LEVEL ACTIVATION SETTINGS
ActivationSettings__c activationSettings = new ActivationSettings__c();
activationSettings.FlowsActivated__c = true;
activationSettings.TriggersActivated__c = true;
activationSettings.ValidationRulesActivated__c = true;
activationSettings.SetupOwnerId = UserInfo.getOrganizationId();
insert activationSettings;

// Apex Jobs
System.schedule('PartnerAlignMetrics_SCH', '0 0 5 * * ?', new PartnerAlignMetrics_SCH());
System.schedule('PartnerAlignRecordDeletion_SCH', '0 0 6 * * ?', new PartnerAlignRecordDeletion_SCH());
System.schedule('ExceptionLogDeletion_SCH', '0 0 7 * * ?', new ExceptionLogDeletion_SCH());
System.schedule('PartnerAlignToSalesforceResync_SCH', '0 0 3 * * ?', new PartnerAlignToSalesforceResync_SCH());
System.schedule('SalesforceToPartnerAlignResync_SCH', '0 0 4 * * ?', new SalesforceToPartnerAlignResync_SCH());

// LOAD DEFAULT OBJECT MAPPINGS

StaticResource objectMappingsResource = [SELECT Id, Body FROM StaticResource WHERE Name = 'DefaultObjectMappings' LIMIT 1];

String objectMappingsCSV = objectMappingsResource.Body.toString();

String[] rows = objectMappingsCSV.split('\r\n');

String[] fieldNames = rows[0].split(',');

String[] fieldTypes = new String[fieldNames.size()];

Map<String, Schema.SObjectType> globalDescription = Schema.getGlobalDescribe();

Schema.sObjectType sObjType = globalDescription.get('ObjectMapping__c');

Schema.DescribeSObjectResult sObjectResult = sObjType.getDescribe();

Map<String , Schema.SObjectField> mapFieldList = sObjectResult.fields.getMap();

for (Integer i = 0; i < fieldNames.size(); i++) {

    Schema.DescribeFieldResult fieldResult = mapFieldList.get(fieldNames[i]).getDescribe();

    fieldTypes[i] = String.valueOf(fieldResult.getType());

}

List<ObjectMapping__c> objectMappingsToInsert = new List<ObjectMapping__c>();

for (Integer i = 1; i < rows.size(); i++) {

    ObjectMapping__c objectMapping = new ObjectMapping__c();

    List<String> fieldValues = rows[i].split(',');

    for (Integer j = 0; j < fieldValues.size(); j++) {

        System.debug(fieldNames[j] + ' ' + fieldValues[j]);

        if (fieldTypes[j] == 'BOOLEAN') objectMapping.put(fieldNames[j], Boolean.valueOf(fieldValues[j]));

        else objectMapping.put(fieldNames[j], fieldValues[j]);

    }

    objectMappingsToInsert.add(objectMapping);

}

insert objectMappingsToInsert;


// LOAD DEFAULT FIELD MAPPINGS

StaticResource fieldMappingsResource = [SELECT Id, Body FROM StaticResource WHERE Name = 'DefaultFieldMappings' LIMIT 1];

String fieldMappingsCSV = fieldMappingsResource.Body.toString();

rows = fieldMappingsCSV.split('\r\n');

fieldNames = rows[0].split(',');

fieldTypes = new String[fieldNames.size()];

globalDescription = Schema.getGlobalDescribe();

sObjType = globalDescription.get('FieldMapping__c');

sObjectResult = sObjType.getDescribe();

mapFieldList = sObjectResult.fields.getMap();

for (Integer i = 1; i < fieldNames.size(); i++) {

    Schema.DescribeFieldResult fieldResult = mapFieldList.get(fieldNames[i]).getDescribe();

    fieldTypes[i] = String.valueOf(fieldResult.getType());

}

Map<String, Id> objectMappingNameToIdMap = new Map<String, Id>();

for (ObjectMapping__c objectMapping : [SELECT Id, SFObjectAPIName__c FROM ObjectMapping__c LIMIT 20]) {

    objectMappingNameToIdMap.put(objectMapping.SFObjectAPIName__c, objectMapping.Id);

}

List<FieldMapping__c> fieldMappingsToInsert = new List<FieldMapping__c>();

for (Integer i = 1; i < rows.size(); i++) {

    FieldMapping__c fieldMapping = new FieldMapping__c();

    List<String> fieldValues = rows[i].split(',');

    if (objectMappingNameToIdMap.containsKey(fieldValues[0])) {

        fieldMapping.ObjectLinkedTo__c = objectMappingNameToIdMap.get(fieldValues[0]);

        for (Integer j = 1; j < fieldValues.size(); j++) {

            System.debug(fieldNames[j] + ' ' + fieldValues[j]);

            if (fieldTypes[j] == 'BOOLEAN') fieldMapping.put(fieldNames[j], Boolean.valueOf(fieldValues[j]));

            else fieldMapping.put(fieldNames[j], fieldValues[j]);

        }

        fieldMappingsToInsert.add(fieldMapping);

    }

}

insert fieldMappingsToInsert;


// LOAD CHECKLIST ITEMS

StaticResource checkListItemsResource = [SELECT Id, Body FROM StaticResource WHERE Name = 'SFPAIntegrationChecklistItems' LIMIT 1];

String checkListItemsCSV = checkListItemsResource.Body.toString();

rows = checkListItemsCSV.split('\r\n');

fieldNames = rows[0].split(',');

fieldTypes = new String[fieldNames.size()];

globalDescription = Schema.getGlobalDescribe();

sObjType = globalDescription.get('SF_PA_Integration_Checklist_Item__c');

sObjectResult = sObjType.getDescribe();

mapFieldList = sObjectResult.fields.getMap();

for (Integer i = 0; i < fieldNames.size(); i++) {

    System.debug(fieldNames[i]);

    Schema.DescribeFieldResult fieldResult = mapFieldList.get('' + fieldNames[i]).getDescribe();

    fieldTypes[i] = String.valueOf(fieldResult.getType());

}

List<SF_PA_Integration_Checklist_Item__c> checkListItemsToInsert = new List<SF_PA_Integration_Checklist_Item__c>();

for (Integer i = 1; i < rows.size(); i++) {

    SF_PA_Integration_Checklist_Item__c checkListItem = new SF_PA_Integration_Checklist_Item__c();

    List<String> fieldValues = rows[i].split(',');

    for (Integer j = 0; j < fieldValues.size(); j++) {

        System.debug(fieldNames[j] + ' ' + fieldValues[j] + ' ' + fieldTypes[j]);

        if (fieldTypes[j] == 'BOOLEAN') checkListItem.put(fieldNames[j], Boolean.valueOf(fieldValues[j]));

        else if (fieldTypes[j] == 'DOUBLE') checkListItem.put(fieldNames[j], Double.valueOf(fieldValues[j]));

        else checkListItem.put(fieldNames[j], fieldValues[j]);

    }

    checkListItemsToInsert.add(checkListItem);

}

insert checkListItemsToInsert;


// COMPANY LEVEL ACTIVATION SETTINGS

ActivationSettings__c activationSettings = new ActivationSettings__c();

activationSettings.FlowsActivated__c = true;

activationSettings.TriggersActivated__c = true;

activationSettings.ValidationRulesActivated__c = true;

activationSettings.SetupOwnerId = UserInfo.getOrganizationId();

insert activationSettings;


// Apex Jobs

System.schedule('PartnerAlignMetrics_SCH', '0 0 5 * * ?', new PartnerAlignMetrics_SCH());

System.schedule('PartnerAlignRecordDeletion_SCH', '0 0 6 * * ?', new PartnerAlignRecordDeletion_SCH());

System.schedule('ExceptionLogDeletion_SCH', '0 0 7 * * ?', new ExceptionLogDeletion_SCH());

System.schedule('PartnerAlignToSalesforceResync_SCH', '0 0 3 * * ?', new PartnerAlignToSalesforceResync_SCH());

System.schedule('SalesforceToPartnerAlignResync_SCH', '0 0 4 * * ?', new SalesforceToPartnerAlignResync_SCH());