Skip to content

Commit 7f36958

Browse files
authored
[W-11333914] FlexCard migration changes & OmniProcessElement name validation removal (#33)
1 parent 11ffd4d commit 7f36958

File tree

8 files changed

+68
-57
lines changed

8 files changed

+68
-57
lines changed

messages/migrate.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,5 +21,6 @@
2121
"duplicatedCardName": "Duplicated Flex Card name",
2222
"duplicatedDrName": "Duplicated DataRaptor name",
2323
"duplicatedOSName": "Duplicated OmniScript name",
24-
"errorWhileActivatingOs": "Could not activate OmniScript"
24+
"errorWhileActivatingOs": "Could not activate OmniScript / Integration Procedure: ",
25+
"errorWhileActivatingCard": "Could not activate Card: "
2526
}

src/commands/omnistudio/migration/migrate.ts

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ import { flags } from '@salesforce/command';
1212
import { Messages } from '@salesforce/core';
1313
import '../../../utils/prototypes';
1414
import OmniStudioBaseCommand from '../../basecommand';
15-
import { MetaDataObjNameCheck } from '../../../migration/metadataobjnamecheck';
1615
import { DataRaptorMigrationTool } from '../../../migration/dataraptor';
1716
import { DebugTimer, MigratedObject, MigratedRecordInfo } from '../../../utils';
1817
import { MigrationResult, MigrationTool } from '../../../migration/interfaces';
@@ -58,15 +57,9 @@ export default class Migrate extends OmniStudioBaseCommand {
5857
// Let's time every step
5958
DebugTimer.getInstance().start();
6059

61-
const namecheck = new MetaDataObjNameCheck(namespace, conn, this.logger, messages, this.ux);
62-
6360
// Register the migration objects
6461
let migrationObjects: MigrationTool[] = [];
6562
if (!migrateOnly) {
66-
await namecheck.checkName('DRBundle__c');
67-
await namecheck.checkName('OmniScript__c');
68-
await namecheck.checkName('VlocityCard__c');
69-
7063
migrationObjects = [
7164
new DataRaptorMigrationTool(namespace, conn, this.logger, messages, this.ux),
7265
new OmniScriptMigrationTool(OmniScriptExportType.All, namespace, conn, this.logger, messages, this.ux),
@@ -75,23 +68,19 @@ export default class Migrate extends OmniStudioBaseCommand {
7568
} else {
7669
switch (migrateOnly) {
7770
case 'os':
78-
await namecheck.checkName('OmniScript__c');
7971
migrationObjects.push(
8072
new OmniScriptMigrationTool(OmniScriptExportType.OS, namespace, conn, this.logger, messages, this.ux)
8173
);
8274
break;
8375
case 'ip':
84-
await namecheck.checkName('OmniScript__c');
8576
migrationObjects.push(
8677
new OmniScriptMigrationTool(OmniScriptExportType.IP, namespace, conn, this.logger, messages, this.ux)
8778
);
8879
break;
8980
case 'fc':
90-
await namecheck.checkName('VlocityCard__c');
9181
migrationObjects.push(new CardMigrationTool(namespace, conn, this.logger, messages, this.ux));
9282
break;
9383
case 'dr':
94-
await namecheck.checkName('DRBundle__c');
9584
migrationObjects.push(new DataRaptorMigrationTool(namespace, conn, this.logger, messages, this.ux));
9685
break;
9786
default:
@@ -169,13 +158,15 @@ export default class Migrate extends OmniStudioBaseCommand {
169158
status: 'Skipped',
170159
errors: record['errors'],
171160
migratedId: undefined,
161+
warnings: [],
172162
};
173163

174164
if (migrationResults.results.has(record['Id'])) {
175165
const recordResults = migrationResults.results.get(record['Id']);
176166
obj.status = !recordResults || recordResults.hasErrors ? 'Error' : 'Complete';
177167
obj.errors = obj.errors || recordResults.errors;
178168
obj.migratedId = recordResults.id;
169+
obj.warnings = recordResults.warnings;
179170
}
180171

181172
mergedResults.push(obj);

src/migration/flexcard.ts

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -145,14 +145,25 @@ export class CardMigrationTool extends BaseMigrationTool implements MigrationToo
145145
}
146146

147147
// If name has been changed, add a warning message
148-
if (transformedCardName !== card[this.namespacePrefix + 'Name']) {
149-
uploadResult.errors.unshift('WARNING: Card name has been modified to fit naming rules: ' + transformedCardName);
150-
}
148+
uploadResult.warnings = uploadResult.warnings || [];
151149
if (transformedCardAuthorName !== card[this.namespacePrefix + 'Author__c']) {
152-
uploadResult.errors.unshift('WARNING: Card author name has been modified to fit naming rules: ' + transformedCardAuthorName);
150+
uploadResult.warnings.unshift('WARNING: Card author name has been modified to fit naming rules: ' + transformedCardAuthorName);
151+
}
152+
if (transformedCardName !== card['Name']) {
153+
uploadResult.warnings.unshift('WARNING: Card name has been modified to fit naming rules: ' + transformedCardName);
153154
}
154155

155156
cardsUploadInfo.set(recordId, uploadResult);
157+
const updateResult = await NetUtils.updateOne(this.connection, CardMigrationTool.OMNIUICARD_NAME, recordId, uploadResult.id, {
158+
[CardMappings.Active__c]: true
159+
});
160+
161+
if (!updateResult.success) {
162+
uploadResult.hasErrors = true;
163+
uploadResult.errors = uploadResult.errors || [];
164+
165+
uploadResult.errors.push(this.messages.getMessage('errorWhileActivatingCard') + updateResult.errors);
166+
}
156167
}
157168
}
158169

@@ -237,7 +248,8 @@ export class CardMigrationTool extends BaseMigrationTool implements MigrationToo
237248

238249
// Clean the name
239250
mappedObject['Name'] = this.cleanName(mappedObject['Name']);
240-
mappedObject['AuthorName'] = this.cleanName(mappedObject['AuthorName']);
251+
mappedObject[CardMappings.Author__c] = this.cleanName(mappedObject[CardMappings.Author__c]);
252+
mappedObject[CardMappings.Active__c] = false;
241253

242254
mappedObject['attributes'] = {
243255
type: CardMigrationTool.OMNIUICARD_NAME,

src/migration/interfaces.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ export interface UploadRecordResult {
3939
referenceId: string;
4040
id?: string;
4141
errors: string[];
42+
warnings: string[];
4243
hasErrors: boolean;
4344
success?: boolean;
4445
}

src/migration/omniscript.ts

Lines changed: 13 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -148,12 +148,6 @@ export class OmniScriptMigrationTool extends BaseMigrationTool implements Migrat
148148
// Get All elements for each OmniScript__c record(i.e IP/OS)
149149
const elements = await this.getAllElementsForOmniScript(recordId);
150150

151-
if (!this.areValidElements(elements)) {
152-
this.setRecordErrors(omniscript, this.messages.getMessage('invalidOrRepeatingOmniscriptElementNames'));
153-
originalOsRecords.set(recordId, omniscript);
154-
continue;
155-
}
156-
157151
// Perform the transformation for OS/IP Parent Record from OmniScript__c
158152
const mappedOmniScript = this.mapOmniScriptRecord(omniscript);
159153

@@ -174,7 +168,6 @@ export class OmniScriptMigrationTool extends BaseMigrationTool implements Migrat
174168
mappedRecords.push(mappedOmniScript);
175169

176170
// Save the OmniScript__c records to Standard BPO i.e OmniProcess
177-
// const osUploadResponse: Map<string, UploadRecordResult> = await this.uploadTransformedData(OmniScriptMigrationTool.OMNIPROCESS_NAME, { mappedRecords, originalRecords });
178171
const osUploadResponse = await NetUtils.createOne(this.connection, OmniScriptMigrationTool.OMNIPROCESS_NAME, recordId, mappedOmniScript);
179172

180173
if (osUploadResponse.success) {
@@ -184,15 +177,17 @@ export class OmniScriptMigrationTool extends BaseMigrationTool implements Migrat
184177
if (!osUploadResponse.success) {
185178
osUploadResponse.errors = Array.isArray(osUploadResponse.errors) ? osUploadResponse.errors : [osUploadResponse.errors];
186179
}
180+
181+
osUploadResponse.warnings = osUploadResponse.warnings || [];
187182

188183
const originalOsName = omniscript[this.namespacePrefix + 'Type__c'] + '_' + omniscript[this.namespacePrefix + 'SubType__c'] + '_' + omniscript[this.namespacePrefix + 'Language__c'];
189184
if (originalOsName !== mappedOsName) {
190-
osUploadResponse.errors.unshift('WARNING: OmniScript name has been modified to fit naming rules: ' + mappedOsName);
185+
osUploadResponse.warnings.unshift('WARNING: OmniScript name has been modified to fit naming rules: ' + mappedOsName);
191186
}
192187

193188
// Upload All elements for each OmniScript__c record(i.e IP/OS)
194189
await this.uploadAllElements(osUploadResponse, elements);
195-
190+
196191
// Get OmniScript Compiled Definitions for OmniScript Record
197192
const omniscriptsCompiledDefinitions = await this.getOmniScriptCompiledDefinition(recordId);
198193

@@ -206,15 +201,16 @@ export class OmniScriptMigrationTool extends BaseMigrationTool implements Migrat
206201
if (mappedRecords[0].IsIntegrationProcedure) {
207202
mappedRecords[0].Language = 'Procedure';
208203
}
204+
205+
const updateResult = await NetUtils.updateOne(this.connection, OmniScriptMigrationTool.OMNIPROCESS_NAME, recordId, osUploadResponse.id, {
206+
[OmniScriptMappings.IsActive__c]: true
207+
});
209208

210-
const updateResult = await this.updateData({ mappedRecords, originalRecords: originalOsRecords });
211-
if (updateResult.has(osUploadResponse.id)) {
212-
const res = updateResult.get(osUploadResponse.id);
213-
if (!res.success) {
214-
osUploadResponse.hasErrors = true;
215-
osUploadResponse.errors = osUploadResponse.errors || [];
216-
osUploadResponse.errors.push(this.messages.getMessage('errorWhileActivatingOs'));
217-
}
209+
if (!updateResult.success) {
210+
osUploadResponse.hasErrors = true;
211+
osUploadResponse.errors = osUploadResponse.errors || [];
212+
213+
osUploadResponse.errors.push(this.messages.getMessage('errorWhileActivatingOs') + updateResult.errors);
218214
}
219215

220216
// Create the return records and response which have been processed
@@ -499,24 +495,6 @@ export class OmniScriptMigrationTool extends BaseMigrationTool implements Migrat
499495
return Object.keys(OmniScriptDefinitionMappings);
500496
}
501497

502-
private areValidElements(elements: AnyJson[]): boolean {
503-
const elementNames = new Set<string>();
504-
for (let element of elements) {
505-
let elementName: string = this.cleanName(element['Name']);
506-
if (!elementName) {
507-
return false;
508-
}
509-
510-
if (elementNames.has(elementName)) {
511-
return false;
512-
}
513-
514-
elementNames.add(elementName);
515-
element['Name'] = elementName;
516-
}
517-
return true;
518-
}
519-
520498
private sleep() {
521499
return new Promise(resolve => {
522500
setTimeout(resolve, 5000);

src/utils/interfaces.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,5 @@ export interface MigratedRecordInfo {
1010
status: string;
1111
errors: string[];
1212
migratedId?: string;
13+
warnings: string[];
1314
}

src/utils/net/index.ts

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,34 @@ class NetUtils {
3838
referenceId,
3939
hasErrors: true,
4040
success: false,
41-
errors: err
41+
errors: err,
42+
warnings: []
43+
};
44+
}
45+
}
46+
47+
public static async updateOne(connection: Connection, objectName: string, referenceId: string, recordId: string, data: any): Promise<UploadRecordResult> {
48+
49+
try {
50+
const url = 'sobjects/' + objectName + '/' + recordId;
51+
52+
await this.request<UploadRecordResult>(connection, url, data, RequestMethod.PATCH);
53+
54+
return {
55+
referenceId,
56+
hasErrors: false,
57+
success: true,
58+
errors: [],
59+
warnings: []
60+
}
61+
62+
} catch (err) {
63+
return {
64+
referenceId,
65+
hasErrors: true,
66+
success: false,
67+
errors: err,
68+
warnings: []
4269
};
4370
}
4471
}

src/utils/resultsbuilder/index.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -81,16 +81,16 @@ export class ResultsBuilder {
8181
<table class="slds-table slds-table_cell-buffer slds-table_bordered slds-table_striped slds-table_col-bordered" aria-label="Results for ${migrationResult.name}">
8282
<thead>
8383
<tr class="slds-line-height_reset">
84-
<th class="" scope="col">
84+
<th class="" scope="col" style="width: 10%">
8585
<div class="slds-truncate" title="Record ID">Record ID</div>
8686
</th>
87-
<th class="" scope="col">
87+
<th class="" scope="col" style="width: 30%">
8888
<div class="slds-truncate" title="Name">Name</div>
8989
</th>
90-
<th class="" scope="col">
90+
<th class="" scope="col" style="width: 10%">
9191
<div class="slds-truncate" title="Status">Status</div>
9292
</th>
93-
<th class="" scope="col">
93+
<th class="" scope="col" style="width: 10%">
9494
<div class="slds-truncate" title="New Record ID">New Record ID</div>
9595
</th>
9696
<th class="" scope="col">

0 commit comments

Comments
 (0)