Skip to content

Commit 099ecd7

Browse files
authored
Merge pull request #389 from mdmehran-qureshi/feature/custom-label-assessment-enhancements
feat: enhance custom label assessment with warnings, failed, and need…
2 parents 2c835a6 + b694e54 commit 099ecd7

File tree

5 files changed

+97
-29
lines changed

5 files changed

+97
-29
lines changed

messages/assess.json

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@
101101
"integrationProcedureManualUpdateMessage": "Integration Procedure reference %s may need manual updates after migration.",
102102
"duplicateCardNameMessage": "Potential duplicate: Another card has the same name %s after name cleaning. This may cause conflicts during migration",
103103
"startingCustomLabelAssessment": "Starting Custom Label assessment",
104-
"assessedCustomLabelsCount": "Assessed %s Custom Labels",
104+
"assessedCustomLabelsCount": "Found %s labels that need attention out of %s total",
105105
"customLabelAssessmentCompleted": "Custom Label assessment completed",
106106
"errorDuringCustomLabelAssessment": "Error during Custom Label assessment: %s",
107107
"duplicateGlobalAutoNumberNameMessage": "Potential duplicate: Another Global Auto Number has the same name %s after name cleaning. This may cause conflicts during migration",
@@ -194,6 +194,9 @@
194194
"apexFileAlreadyHasCallMethod": "File %s already has call method, thus keeping the existing call method intact",
195195
"errorFetchingCustomLabels": "Error fetching custom labels: %s",
196196
"customLabelAssessmentSummary": "Custom Label with same name and different value is already exist without namespace.",
197+
"customLabelWarningSummary": "Custom Label has potential conflicts that need review.",
198+
"customLabelFailedSummary": "Custom Label assessment failed due to errors.",
199+
"customLabelNeedsManualInterventionSummary": "Custom Label requires manual intervention for resolution.",
197200
"generatedCustomLabelAssessmentReportPage": "Generated custom label assessment report page %s of %s with %s labels",
198201
"manualDeploymentSteps": "<a href='%s' target='_blank'>Please refer to this documentation for manual deployment process</a>"
199202
}

src/commands/omnistudio/migration/assess.ts

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,13 @@ export default class Assess extends OmniStudioBaseCommand {
117117
flexipageAssessmentInfos: [],
118118
experienceSiteAssessmentInfos: [],
119119
customLabelAssessmentInfos: [],
120-
customLabelStatistics: { totalLabels: 0, canBeAutomated: 0, needManualIntervention: 0 },
120+
customLabelStatistics: {
121+
totalLabels: 0,
122+
readyForMigration: 0,
123+
needManualIntervention: 0,
124+
warnings: 0,
125+
failed: 0,
126+
},
121127
};
122128

123129
Logger.log(messages.getMessage('assessmentInitialization', [String(namespace)]));
@@ -329,14 +335,17 @@ export default class Assess extends OmniStudioBaseCommand {
329335
const customLabelResult = await CustomLabelsUtil.fetchCustomLabels(conn, namespace, messages);
330336
assesmentInfo.customLabelAssessmentInfos = customLabelResult.labels;
331337
assesmentInfo.customLabelStatistics = customLabelResult.statistics;
332-
Logger.logVerbose(
333-
messages.getMessage('assessedCustomLabelsCount', [assesmentInfo.customLabelAssessmentInfos.length])
334-
);
335338
Logger.log(messages.getMessage('customLabelAssessmentCompleted'));
336339
} catch (error) {
337340
Logger.error(messages.getMessage('errorDuringCustomLabelAssessment', [(error as Error).message]));
338341
assesmentInfo.customLabelAssessmentInfos = [];
339-
assesmentInfo.customLabelStatistics = { totalLabels: 0, canBeAutomated: 0, needManualIntervention: 0 };
342+
assesmentInfo.customLabelStatistics = {
343+
totalLabels: 0,
344+
readyForMigration: 0,
345+
needManualIntervention: 0,
346+
warnings: 0,
347+
failed: 0,
348+
};
340349
}
341350
}
342351
}

src/utils/customLabels.ts

Lines changed: 24 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,10 @@ export interface CustomLabelAssessmentInfo {
2323

2424
export interface CustomLabelStatistics {
2525
totalLabels: number;
26-
canBeAutomated: number;
26+
readyForMigration: number;
2727
needManualIntervention: number;
28+
warnings: number;
29+
failed: number;
2830
}
2931

3032
export interface CustomLabelResult {
@@ -44,7 +46,7 @@ export class CustomLabelsUtil {
4446
if (!customLabels || customLabels.length === 0) {
4547
return {
4648
labels: [],
47-
statistics: { totalLabels: 0, canBeAutomated: 0, needManualIntervention: 0 },
49+
statistics: { totalLabels: 0, readyForMigration: 0, needManualIntervention: 0, warnings: 0, failed: 0 },
4850
};
4951
}
5052

@@ -56,11 +58,11 @@ export class CustomLabelsUtil {
5658
const id = label.Id;
5759

5860
const externalString = externalStrings.find((es) => es.Name === name);
59-
let assessmentStatus = 'Can be Automated';
61+
let assessmentStatus = 'Ready for migration';
6062
let summary = '';
6163

6264
if (externalString && externalString.Value !== value) {
63-
assessmentStatus = 'Need Manual Intervention';
65+
assessmentStatus = 'Warnings';
6466
summary = messages.getMessage('customLabelAssessmentSummary');
6567
}
6668

@@ -78,29 +80,39 @@ export class CustomLabelsUtil {
7880
};
7981
});
8082

81-
const labelsNeedingManualIntervention = processedLabels.filter(
82-
(label) => label.assessmentStatus === 'Need Manual Intervention'
83+
const warnings = processedLabels.filter((label) => label.assessmentStatus === 'Warnings');
84+
85+
const needsManualIntervention = processedLabels.filter(
86+
(label) => label.assessmentStatus === 'Needs Manual Intervention'
8387
);
8488

85-
const canBeAutomated = processedLabels.filter((label) => label.assessmentStatus === 'Can be Automated').length;
89+
const failed = processedLabels.filter((label) => label.assessmentStatus === 'Failed');
90+
91+
const readyForMigration = processedLabels.filter(
92+
(label) => label.assessmentStatus === 'Ready for migration'
93+
).length;
94+
95+
const totalAttentionNeeded = warnings.length + needsManualIntervention.length + failed.length;
8696

8797
Logger.logVerbose(
88-
`Found ${labelsNeedingManualIntervention.length} labels that need manual intervention out of ${processedLabels.length} total`
98+
messages.getMessage('assessedCustomLabelsCount', [String(totalAttentionNeeded), String(processedLabels.length)])
8999
);
90100

91101
return {
92-
labels: labelsNeedingManualIntervention,
102+
labels: [...warnings, ...needsManualIntervention, ...failed],
93103
statistics: {
94104
totalLabels: processedLabels.length,
95-
canBeAutomated,
96-
needManualIntervention: labelsNeedingManualIntervention.length,
105+
readyForMigration,
106+
needManualIntervention: needsManualIntervention.length,
107+
warnings: warnings.length,
108+
failed: failed.length,
97109
},
98110
};
99111
} catch (error) {
100112
Logger.error(messages.getMessage('errorFetchingCustomLabels', [String(error)]));
101113
return {
102114
labels: [],
103-
statistics: { totalLabels: 0, canBeAutomated: 0, needManualIntervention: 0 },
115+
statistics: { totalLabels: 0, readyForMigration: 0, needManualIntervention: 0, warnings: 0, failed: 0 },
104116
};
105117
}
106118
}

src/utils/resultsbuilder/CustomLabelAssessmentReporter.ts

Lines changed: 40 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -69,16 +69,30 @@ export class CustomLabelAssessmentReporter {
6969

7070
public static getSummaryData(customLabelAssessmentInfos: CustomLabelAssessmentInfo[]): SummaryItemDetailParam[] {
7171
const safeCustomLabelInfos = customLabelAssessmentInfos || [];
72-
const needManualIntervention = safeCustomLabelInfos.filter(
73-
(label) => label.assessmentStatus === 'Need Manual Intervention'
72+
const warnings = safeCustomLabelInfos.filter((label) => label.assessmentStatus === 'Warnings').length;
73+
74+
const needsManualIntervention = safeCustomLabelInfos.filter(
75+
(label) => label.assessmentStatus === 'Needs Manual Intervention'
7476
).length;
7577

78+
const failed = safeCustomLabelInfos.filter((label) => label.assessmentStatus === 'Failed').length;
79+
7680
return [
7781
{
78-
name: 'Need Manual Intervention',
79-
count: needManualIntervention,
82+
name: 'Warnings',
83+
count: warnings,
8084
cssClass: 'text-warning',
8185
},
86+
{
87+
name: 'Needs Manual Intervention',
88+
count: needsManualIntervention,
89+
cssClass: 'text-error',
90+
},
91+
{
92+
name: 'Failed',
93+
count: failed,
94+
cssClass: 'text-error',
95+
},
8296
];
8397
}
8498

@@ -137,7 +151,7 @@ export class CustomLabelAssessmentReporter {
137151
false,
138152
undefined,
139153
undefined,
140-
info.assessmentStatus === 'Need Manual Intervention' ? 'text-error' : 'text-success'
154+
this.getStatusCssClass(info.assessmentStatus)
141155
),
142156
createRowDataParam('summary', info.summary || '', false, 1, 1, false, undefined, undefined, undefined, true),
143157
],
@@ -211,8 +225,28 @@ export class CustomLabelAssessmentReporter {
211225
{
212226
label: 'Assessment Status',
213227
key: 'assessmentStatus',
214-
filters: [{ label: 'Can be Automated' }, { label: 'Need Manual Intervention' }],
228+
filters: [
229+
{ label: 'Ready for migration' },
230+
{ label: 'Needs Manual Intervention' },
231+
{ label: 'Warnings' },
232+
{ label: 'Failed' },
233+
],
215234
},
216235
];
217236
}
237+
238+
private static getStatusCssClass(status: string): string {
239+
switch (status) {
240+
case 'Warnings':
241+
return 'text-warning';
242+
case 'Needs Manual Intervention':
243+
return 'text-error';
244+
case 'Failed':
245+
return 'text-error';
246+
case 'Ready for migration':
247+
return 'text-success';
248+
default:
249+
return 'text-success';
250+
}
251+
}
218252
}

src/utils/resultsbuilder/assessmentReporter.ts

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@ export class AssessmentReporter {
132132
)
133133
);
134134

135-
// Generate custom labels report with pagination (empty if no labels need manual intervention)
135+
// Generate custom labels report with pagination
136136
const customLabels = result.customLabelAssessmentInfos || [];
137137
this.generateCustomLabelAssessmentReport(
138138
customLabels,
@@ -442,15 +442,25 @@ export class AssessmentReporter {
442442
total: result.customLabelStatistics.totalLabels,
443443
data: [
444444
{
445-
name: 'Can be Automated',
446-
count: result.customLabelStatistics.canBeAutomated,
445+
name: 'Ready for migration',
446+
count: result.customLabelStatistics.readyForMigration,
447447
cssClass: 'text-success',
448448
},
449449
{
450-
name: 'Need Manual Intervention',
451-
count: result.customLabelStatistics.needManualIntervention,
450+
name: 'Warning',
451+
count: result.customLabelStatistics.warnings,
452452
cssClass: 'text-warning',
453453
},
454+
{
455+
name: 'Needs Manual Intervention',
456+
count: result.customLabelStatistics.needManualIntervention,
457+
cssClass: 'text-error',
458+
},
459+
{
460+
name: 'Failed',
461+
count: result.customLabelStatistics.failed,
462+
cssClass: 'text-error',
463+
},
454464
],
455465
file: this.getCustomLabelAssessmentFileName(result.customLabelStatistics.needManualIntervention),
456466
});

0 commit comments

Comments
 (0)