Skip to content

Commit e278623

Browse files
author
Adam Rutland
authored
Merge pull request #476 from vlocityinc/beta
Beta
2 parents 38c616e + c89edb4 commit e278623

File tree

11 files changed

+627
-64
lines changed

11 files changed

+627
-64
lines changed
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
{
2+
"%vlocity_namespace%__BatchSize__c": 200,
3+
"%vlocity_namespace%__CheckFieldLevelSecurity__c": false,
4+
"%vlocity_namespace%__CustomInputClass__c": "",
5+
"%vlocity_namespace%__CustomOutputClass__c": "",
6+
"%vlocity_namespace%__DRMapItem__c": "DataRaptor-Migration_Mappings.json",
7+
"%vlocity_namespace%__DRMapName__c": "DataRaptor Migration",
8+
"%vlocity_namespace%__DeleteOnSuccess__c": false,
9+
"%vlocity_namespace%__Description__c": "",
10+
"%vlocity_namespace%__GlobalKey__c": "DataRaptor Migration",
11+
"%vlocity_namespace%__IgnoreErrors__c": false,
12+
"%vlocity_namespace%__InputCustom__c": "",
13+
"%vlocity_namespace%__InputJson__c": "",
14+
"%vlocity_namespace%__InputType__c": "",
15+
"%vlocity_namespace%__InputXml__c": "",
16+
"%vlocity_namespace%__InterfaceObject__c": "JSON",
17+
"%vlocity_namespace%__IsDefaultForInterface__c": false,
18+
"%vlocity_namespace%__IsProcessSuperBulk__c": false,
19+
"%vlocity_namespace%__OMplusSyncEnabled__c": true,
20+
"%vlocity_namespace%__OuboundStagingObjectDataField__c": "",
21+
"%vlocity_namespace%__OutboundConfigurationField__c": "",
22+
"%vlocity_namespace%__OutboundConfigurationName__c": "",
23+
"%vlocity_namespace%__OutboundStagingObjectName__c": "",
24+
"%vlocity_namespace%__OutputType__c": "",
25+
"%vlocity_namespace%__OverwriteAllNullValues__c": false,
26+
"%vlocity_namespace%__PreprocessorClassName__c": "",
27+
"%vlocity_namespace%__ProcessNowThreshold__c": -1,
28+
"%vlocity_namespace%__RequiredPermission__c": "",
29+
"%vlocity_namespace%__RollbackOnError__c": false,
30+
"%vlocity_namespace%__SalesforcePlatformCacheType__c": "",
31+
"%vlocity_namespace%__SampleInputCustom__c": "",
32+
"%vlocity_namespace%__SampleInputJSON__c": "",
33+
"%vlocity_namespace%__SampleInputRows__c": "",
34+
"%vlocity_namespace%__SampleInputXML__c": "",
35+
"%vlocity_namespace%__TargetOutCustom__c": "",
36+
"%vlocity_namespace%__TargetOutDocuSignTemplateId__c": "",
37+
"%vlocity_namespace%__TargetOutJson__c": "",
38+
"%vlocity_namespace%__TargetOutPdfDocName__c": "",
39+
"%vlocity_namespace%__TargetOutXml__c": "",
40+
"%vlocity_namespace%__TimeToLiveMinutes__c": "",
41+
"%vlocity_namespace%__Type__c": "Migration",
42+
"%vlocity_namespace%__UseAssignmentRules__c": false,
43+
"%vlocity_namespace%__XmlOutputSequence__c": "",
44+
"%vlocity_namespace%__XmlRemoveDeclaration__c": false,
45+
"Name": "DataRaptor Migration",
46+
"VlocityDataPackType": "SObject",
47+
"VlocityRecordSObjectType": "%vlocity_namespace%__DRBundle__c",
48+
"VlocityRecordSourceKey": "%vlocity_namespace%__DRBundle__c/DataRaptor Migration"
49+
}

DataPackSettings/latest/DataRaptor/DataRaptor-Migration/DataRaptor-Migration_Mappings.json

Lines changed: 322 additions & 0 deletions
Large diffs are not rendered by default.

README.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -645,7 +645,10 @@ This will provide a list of files that are different locally than in the org. In
645645
`packGetAllAvailableExports`: Get list of all DataPacks that can be exported
646646
`refreshVlocityBase`: Deploy and Activate the Base Vlocity DataPacks included in the Managed Package
647647
`installVlocityInitial`: Deploy and Activate the Base Vlocity DataPacks and Configuration DataPacks included in the Managed Package
648-
`installDPsfromStaticResource`: Install DataPacks from Static Resource based on a Query. Add query to job file: StaticResourceQuery:<SOQL>
648+
`installDPsfromStaticResource`: Install DataPacks from Static Resource based on a Query. Please add the query to job file:
649+
```yaml
650+
StaticResourceQuery: Select Name, Body from StaticResource where Name = 'DP_TEMPLATES_AsyncQuoteToContractSample'
651+
```
649652
650653
## Example Commands
651654

apex/AddDocument.cls

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
insert new Document(Name='OmniScript URL Document Do Not Delete', Body=Blob.valueOf('txt'),FolderId=UserInfo.getUserId());

javascript/fixSandboxMetadata.js

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
2+
module.exports = async function(vlocity, currentContextData, jobInfo, callback) {
3+
4+
let metadataToDataBindings = [{
5+
metadataQuery: "Select Id, DeveloperName from OmniUiCardConfig",
6+
dataQuery: "Select Id, Name, AuthorName, VersionNumber from OmniUiCard",
7+
keyFields: [ "Name", "AuthorName", "VersionNumber" ],
8+
type: "OmniUiCardConfig"
9+
},{
10+
metadataQuery: "Select Id, DeveloperName from OmniScriptConfig",
11+
dataQuery: "Select Id, Type, SubType, Language, VersionNumber from OmniProcess",
12+
keyFields: [ "Type", "SubType", "Language", "VersionNumber" ],
13+
type: "OmniScriptConfig"
14+
},{
15+
metadataQuery: "Select Id, DeveloperName from OmniIntegrationProcConfig",
16+
dataQuery: "Select Id, Type, SubType, Language, VersionNumber from OmniProcess",
17+
keyFields: [ "Type", "SubType", "Language", "VersionNumber" ],
18+
type: "OmniIntegrationProcConfig"
19+
},
20+
{
21+
metadataQuery: "Select Id, DeveloperName from OmniDataTransformConfig",
22+
dataQuery: "Select Id, Name, VersionNumber from OmniDataTransform",
23+
keyFields: [ "Name", "VersionNumber" ],
24+
type: "OmniDataTransformConfig"
25+
}];
26+
27+
try {
28+
let allMetadataToDelete = [];
29+
for (let binding of metadataToDataBindings) {
30+
vlocity.jsForceConnection.version = "54.0";
31+
let foundMetadataComponents = await vlocity.jsForceConnection.tooling.query(binding.metadataQuery);
32+
33+
if (foundMetadataComponents.records == 0) {
34+
continue;
35+
}
36+
37+
foundMetadataComponents = foundMetadataComponents.records;
38+
39+
let foundDataComponents = await vlocity.jsForceConnection.query(binding.dataQuery);
40+
41+
foundDataComponents = foundDataComponents.records;
42+
let dataComponentKeys = [];
43+
44+
for (let dataRecord of foundDataComponents) {
45+
let metadataKey = "";
46+
47+
for (let key of binding.keyFields) {
48+
if (metadataKey) {
49+
metadataKey += "_";
50+
}
51+
52+
metadataKey += dataRecord[key];
53+
}
54+
55+
dataComponentKeys.push(metadataKey);
56+
}
57+
58+
for (let metadataRecord of foundMetadataComponents) {
59+
if (!dataComponentKeys.includes(metadataRecord.DeveloperName)) {
60+
allMetadataToDelete.push(metadataRecord);
61+
}
62+
}
63+
}
64+
65+
let iterations = 0;
66+
67+
while (allMetadataToDelete.length > 0 && iterations < 10) {
68+
iterations++;
69+
70+
let failedMetadata = [];
71+
72+
for (let metadataRecord of allMetadataToDelete) {
73+
try {
74+
await vlocity.jsForceConnection.tooling.delete(metadataRecord.attributes.type, metadataRecord.Id);
75+
VlocityUtils.log("Delete Success", metadataRecord.DeveloperName);
76+
} catch (e) {
77+
failedMetadata.push(metadataRecord);
78+
VlocityUtils.log("Delete Failed", metadataRecord.DeveloperName);
79+
}
80+
}
81+
82+
allMetadataToDelete = failedMetadata;
83+
}
84+
85+
86+
87+
} catch (e) {
88+
VlocityUtils.error(e);
89+
}
90+
91+
92+
}

lib/datapacks.js

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,9 +62,18 @@ DataPacks.prototype.makeApexPostRequest = async function(endpoint, payload) {
6262
DataPacks.prototype.ignoreActivationErrors = async function(dataPackId) {
6363
var dataPackObj = { Id: dataPackId };
6464

65-
dataPackObj[this.vlocity.namespacePrefix + 'ActivationStatus__c'] = "";
65+
let sobjectType;
66+
67+
// This is the prefix for this new object
68+
if (dataPackId.indexOf('0nc') == 0) {
69+
sobjectType = 'OmniDataPack';
70+
dataPackObj.ActivationStatus = "";
71+
} else {
72+
dataPackObj[this.vlocity.namespacePrefix + 'ActivationStatus__c'] = "";
73+
sobjectType = this.vlocity.namespacePrefix + 'VlocityDataPack__c'
74+
}
6675

67-
await this.vlocity.jsForceConnection.sobject(this.vlocity.namespacePrefix + 'VlocityDataPack__c').update(dataPackObj);
76+
await this.vlocity.jsForceConnection.sobject(sobjectType).update(dataPackObj);
6877
};
6978

7079
DataPacks.prototype.getDataPackData = async function(dataPackId, retry) {

lib/datapacksjob.js

Lines changed: 81 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -1814,13 +1814,26 @@ DataPacksJob.prototype.deployDataPackMetadataConfigurations = async function(pat
18141814
}
18151815
};
18161816

1817+
DataPacksJob.prototype.ensureDocumentExists = async function() {
1818+
1819+
var query = `Select Id from Document LIMIT 1`;
1820+
let result = await this.vlocity.jsForceConnection.query(query);
1821+
1822+
if (!result.records || result.records.length == 0) {
1823+
VlocityUtils.verbose('Adding Default Document to Org as it affects LWC Compilation and OmniScript Runtime');
1824+
await this.vlocity.datapacksutils.runApex('.', 'AddDocument.cls');
1825+
}
1826+
}
1827+
18171828
DataPacksJob.prototype.updateSettings = async function(jobInfo) {
18181829
var projectPathsToDeploy = [ 'latest' ];
18191830

18201831
if (!this.vlocity.organizationId) {
18211832
return;
18221833
}
18231834

1835+
await this.ensureDocumentExists();
1836+
18241837
if (this.vlocity.isOmniStudioInstalled && !this.vlocity.isOmniStudioIndustryInstalled) {
18251838
return;
18261839
}
@@ -2061,52 +2074,57 @@ DataPacksJob.prototype.activateAll = async function(dataPack, jobInfo, attempts)
20612074

20622075
var shouldRetry = false;
20632076

2064-
for (var dataPack of dataPackData.dataPacks) {
2065-
if (dataPack.ActivationStatus == 'Activated' || allActivated.includes(dataPack.VlocityDataPackKey)) {
2066-
await this.vlocity.datapacksutils.handleDataPackEvent('afterActivationSuccess', dataPack.VlocityDataPackType, {dataPack: dataPack, jobInfo: jobInfo});
2067-
} else if (dataPack.ActivationStatus == 'Ready' && dataPack.VlocityDataPackStatus == 'Success') {
2068-
2069-
// If it is the only one in the deploy and it fails to activate it must be set to error. Otherwise retry the deploy and activation separate from others.
2070-
if (dataPackData.dataPacks.length == 1) {
2071-
var onActivateErrorResult = await this.vlocity.datapacksutils.handleDataPackEvent('onActivateError', dataPack.VlocityDataPackType, dataPackData);
2072-
2073-
var errorMessage = ' --- Not Activated';
2074-
2075-
if (onActivateErrorResult) {
2076-
if (onActivateErrorResult.ActivationStatus === 'Success') {
2077-
continue;
2077+
if (!dataPackData.dataPacks) {
2078+
shouldRetry = attempts < 3;
2079+
attempts++;
2080+
} else {
2081+
for (var dataPack of dataPackData.dataPacks) {
2082+
if (dataPack.ActivationStatus == 'Activated' || allActivated.includes(dataPack.VlocityDataPackKey)) {
2083+
await this.vlocity.datapacksutils.handleDataPackEvent('afterActivationSuccess', dataPack.VlocityDataPackType, {dataPack: dataPack, jobInfo: jobInfo});
2084+
} else if (dataPack.ActivationStatus == 'Ready' && dataPack.VlocityDataPackStatus == 'Success') {
2085+
2086+
// If it is the only one in the deploy and it fails to activate it must be set to error. Otherwise retry the deploy and activation separate from others.
2087+
if (dataPackData.dataPacks.length == 1) {
2088+
var onActivateErrorResult = await this.vlocity.datapacksutils.handleDataPackEvent('onActivateError', dataPack.VlocityDataPackType, dataPackData);
2089+
2090+
var errorMessage = ' --- Not Activated';
2091+
2092+
if (onActivateErrorResult) {
2093+
if (onActivateErrorResult.ActivationStatus === 'Success') {
2094+
continue;
2095+
}
2096+
2097+
errorMessage = ' --- ' + onActivateErrorResult.message;
2098+
} else if (allActivationErrors[dataPack.VlocityDataPackKey]) {
2099+
errorMessage = ' --- ' + allActivationErrors[dataPack.VlocityDataPackKey];
20782100
}
2079-
2080-
errorMessage = ' --- ' + onActivateErrorResult.message;
2081-
} else if (allActivationErrors[dataPack.VlocityDataPackKey]) {
2082-
errorMessage = ' --- ' + allActivationErrors[dataPack.VlocityDataPackKey];
2101+
2102+
jobInfo.hasError = true;
2103+
jobInfo.currentStatus[dataPack.VlocityDataPackKey] = 'Error';
2104+
jobInfo.currentErrors[dataPack.VlocityDataPackKey] = 'Activation Error >> ' + dataPack.VlocityDataPackKey + errorMessage;
2105+
jobInfo.errors.push('Activation Error >> ' + dataPack.VlocityDataPackKey + errorMessage);
2106+
VlocityUtils.error('Activation Error', dataPack.VlocityDataPackKey + errorMessage);
2107+
2108+
} else if (attempts < 3) {
2109+
shouldRetry = true;
2110+
} else {
2111+
jobInfo.currentStatus[dataPack.VlocityDataPackKey] = 'ReadySeparate';
20832112
}
2084-
2113+
} else if (dataPack.ActivationStatus == 'Error') {
2114+
2115+
var message = 'Activation Error >> ' + dataPack.VlocityDataPackKey + ' --- ' + (dataPack.VlocityDataPackMessage ? dataPack.VlocityDataPackMessage : (activateResult.error != 'OK' ? activateResult.error : ''));
2116+
20852117
jobInfo.hasError = true;
20862118
jobInfo.currentStatus[dataPack.VlocityDataPackKey] = 'Error';
2087-
jobInfo.currentErrors[dataPack.VlocityDataPackKey] = 'Activation Error >> ' + dataPack.VlocityDataPackKey + errorMessage;
2088-
jobInfo.errors.push('Activation Error >> ' + dataPack.VlocityDataPackKey + errorMessage);
2089-
VlocityUtils.error('Activation Error', dataPack.VlocityDataPackKey + errorMessage);
2090-
2091-
} else if (attempts < 3) {
2092-
shouldRetry = true;
2093-
} else {
2094-
jobInfo.currentStatus[dataPack.VlocityDataPackKey] = 'ReadySeparate';
2095-
}
2096-
} else if (dataPack.ActivationStatus == 'Error') {
2097-
2098-
var message = 'Activation Error >> ' + dataPack.VlocityDataPackKey + ' --- ' + (dataPack.VlocityDataPackMessage ? dataPack.VlocityDataPackMessage : (activateResult.error != 'OK' ? activateResult.error : ''));
2099-
2100-
jobInfo.hasError = true;
2101-
jobInfo.currentStatus[dataPack.VlocityDataPackKey] = 'Error';
2102-
2103-
jobInfo.currentErrors[dataPack.VlocityDataPackKey] = message;
2104-
2105-
if (jobInfo.errors.indexOf(message) == -1) {
2106-
jobInfo.errors.push(message);
2119+
2120+
jobInfo.currentErrors[dataPack.VlocityDataPackKey] = message;
2121+
2122+
if (jobInfo.errors.indexOf(message) == -1) {
2123+
jobInfo.errors.push(message);
2124+
}
2125+
2126+
VlocityUtils.error('Activation Error', dataPack.VlocityDataPackKey, dataPack.VlocityDataPackMessage ? dataPack.VlocityDataPackMessage : (activateResult.error != 'OK' ? activateResult.error : ''));
21072127
}
2108-
2109-
VlocityUtils.error('Activation Error', dataPack.VlocityDataPackKey, dataPack.VlocityDataPackMessage ? dataPack.VlocityDataPackMessage : (activateResult.error != 'OK' ? activateResult.error : ''));
21102128
}
21112129
}
21122130

@@ -2364,6 +2382,18 @@ DataPacksJob.prototype.deployPack = async function(inputMap) {
23642382
var stepPostDeployResults = [];
23652383
let dataPackData = await this.vlocity.datapacks.getDataPackData(dataPackId);
23662384

2385+
if (!dataPackData.dataPacks) {
2386+
VlocityUtils.error("Error Fetching DataPack Data", result.VlocityDataPackId, allDeploymentKeys);
2387+
allDeploymentKeys.forEach(key => {
2388+
jobInfo.hasError = true;
2389+
jobInfo.currentStatus[key] = 'Error';
2390+
jobInfo.currentErrors[dataPack.VlocityDataPackKey] = `${key} - Error Fetching DataPack Data`;
2391+
jobInfo.errors.push(`${key} - ${result.message}`);
2392+
});
2393+
2394+
return;
2395+
}
2396+
23672397
for (var dataPack of dataPackData.dataPacks) {
23682398
var objectName = self.vlocity.datapacksutils.getBulkJobObjectName(dataPack.VlocityDataPackType);
23692399
var objectKey = self.vlocity.datapacksutils.getBulkJobObjectKey(dataPack.VlocityDataPackType);
@@ -2707,10 +2737,16 @@ DataPacksJob.prototype.deployJob = async function(jobInfo) {
27072737

27082738
// Ensure there is a sfdx-project.json file
27092739
this.vlocity.datapacksutils.getSFDXProject({...jobInfo, sfdxForcePath: tempSfdxLwcFolder});
2710-
2711-
// Deploy using sfdx
2712-
const deployGeneratedLwcFolder = await this.vlocity.utilityservice.sfdx('source:deploy', tempDeployOptions);
2713-
jobInfo.currentStatus = Object.assign(jobInfo.currentStatus, this.vlocity.datapacksutils.formatSalesforceDeployResponse(deployGeneratedLwcFolder));
2740+
try {
2741+
// Deploy using sfdx
2742+
const deployGeneratedLwcFolder = await this.vlocity.utilityservice.sfdx('source:deploy', tempDeployOptions);
2743+
jobInfo.currentStatus = Object.assign(jobInfo.currentStatus, this.vlocity.datapacksutils.formatSalesforceDeployResponse(deployGeneratedLwcFolder));
2744+
} catch (err) {
2745+
VlocityUtils.log(err);
2746+
jobInfo.errors.push( "OmniScript or FlexCard Compilation Failed:\n" + JSON.stringify(err, null, 2));
2747+
jobInfo.hasError = true;
2748+
}
2749+
27142750
} else {
27152751
VlocityUtils.error('Can\'t find compiled LWC components path. Skipping...');
27162752
}

0 commit comments

Comments
 (0)