@mcp-consultant-tools/powerplatform-core 26.0.0-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/auth/index.d.ts +64 -0
- package/build/auth/index.d.ts.map +1 -0
- package/build/auth/index.js +39 -0
- package/build/auth/index.js.map +1 -0
- package/build/auth/interactive-auth.d.ts +60 -0
- package/build/auth/interactive-auth.d.ts.map +1 -0
- package/build/auth/interactive-auth.js +429 -0
- package/build/auth/interactive-auth.js.map +1 -0
- package/build/auth/service-principal-auth.d.ts +26 -0
- package/build/auth/service-principal-auth.d.ts.map +1 -0
- package/build/auth/service-principal-auth.js +60 -0
- package/build/auth/service-principal-auth.js.map +1 -0
- package/build/auth/token-cache.d.ts +40 -0
- package/build/auth/token-cache.d.ts.map +1 -0
- package/build/auth/token-cache.js +108 -0
- package/build/auth/token-cache.js.map +1 -0
- package/build/client/PowerPlatformClient.d.ts +78 -0
- package/build/client/PowerPlatformClient.d.ts.map +1 -0
- package/build/client/PowerPlatformClient.js +198 -0
- package/build/client/PowerPlatformClient.js.map +1 -0
- package/build/client/index.d.ts +6 -0
- package/build/client/index.d.ts.map +1 -0
- package/build/client/index.js +6 -0
- package/build/client/index.js.map +1 -0
- package/build/client/types.d.ts +300 -0
- package/build/client/types.d.ts.map +1 -0
- package/build/client/types.js +5 -0
- package/build/client/types.js.map +1 -0
- package/build/index.d.ts +36 -0
- package/build/index.d.ts.map +1 -0
- package/build/index.js +55 -0
- package/build/index.js.map +1 -0
- package/build/services/AppManagementService.d.ts +95 -0
- package/build/services/AppManagementService.d.ts.map +1 -0
- package/build/services/AppManagementService.js +322 -0
- package/build/services/AppManagementService.js.map +1 -0
- package/build/services/AppService.d.ts +39 -0
- package/build/services/AppService.d.ts.map +1 -0
- package/build/services/AppService.js +173 -0
- package/build/services/AppService.js.map +1 -0
- package/build/services/AttributeService.d.ts +28 -0
- package/build/services/AttributeService.d.ts.map +1 -0
- package/build/services/AttributeService.js +86 -0
- package/build/services/AttributeService.js.map +1 -0
- package/build/services/BusinessRuleService.d.ts +22 -0
- package/build/services/BusinessRuleService.d.ts.map +1 -0
- package/build/services/BusinessRuleService.js +85 -0
- package/build/services/BusinessRuleService.js.map +1 -0
- package/build/services/DataService.d.ts +53 -0
- package/build/services/DataService.d.ts.map +1 -0
- package/build/services/DataService.js +204 -0
- package/build/services/DataService.js.map +1 -0
- package/build/services/DependencyService.d.ts +27 -0
- package/build/services/DependencyService.d.ts.map +1 -0
- package/build/services/DependencyService.js +47 -0
- package/build/services/DependencyService.js.map +1 -0
- package/build/services/EntityService.d.ts +42 -0
- package/build/services/EntityService.d.ts.map +1 -0
- package/build/services/EntityService.js +132 -0
- package/build/services/EntityService.js.map +1 -0
- package/build/services/FlowService.d.ts +55 -0
- package/build/services/FlowService.d.ts.map +1 -0
- package/build/services/FlowService.js +608 -0
- package/build/services/FlowService.js.map +1 -0
- package/build/services/FormService.d.ts +36 -0
- package/build/services/FormService.d.ts.map +1 -0
- package/build/services/FormService.js +55 -0
- package/build/services/FormService.js.map +1 -0
- package/build/services/MetadataService.d.ts +63 -0
- package/build/services/MetadataService.d.ts.map +1 -0
- package/build/services/MetadataService.js +176 -0
- package/build/services/MetadataService.js.map +1 -0
- package/build/services/OptionSetService.d.ts +40 -0
- package/build/services/OptionSetService.d.ts.map +1 -0
- package/build/services/OptionSetService.js +91 -0
- package/build/services/OptionSetService.js.map +1 -0
- package/build/services/PluginDeploymentService.d.ts +102 -0
- package/build/services/PluginDeploymentService.d.ts.map +1 -0
- package/build/services/PluginDeploymentService.js +412 -0
- package/build/services/PluginDeploymentService.js.map +1 -0
- package/build/services/PluginService.d.ts +61 -0
- package/build/services/PluginService.d.ts.map +1 -0
- package/build/services/PluginService.js +289 -0
- package/build/services/PluginService.js.map +1 -0
- package/build/services/PublishingService.d.ts +37 -0
- package/build/services/PublishingService.d.ts.map +1 -0
- package/build/services/PublishingService.js +65 -0
- package/build/services/PublishingService.js.map +1 -0
- package/build/services/RelationshipService.d.ts +29 -0
- package/build/services/RelationshipService.d.ts.map +1 -0
- package/build/services/RelationshipService.js +46 -0
- package/build/services/RelationshipService.js.map +1 -0
- package/build/services/SolutionService.d.ts +60 -0
- package/build/services/SolutionService.d.ts.map +1 -0
- package/build/services/SolutionService.js +125 -0
- package/build/services/SolutionService.js.map +1 -0
- package/build/services/ValidationService.d.ts +31 -0
- package/build/services/ValidationService.d.ts.map +1 -0
- package/build/services/ValidationService.js +391 -0
- package/build/services/ValidationService.js.map +1 -0
- package/build/services/ViewService.d.ts +36 -0
- package/build/services/ViewService.d.ts.map +1 -0
- package/build/services/ViewService.js +55 -0
- package/build/services/ViewService.js.map +1 -0
- package/build/services/WebResourceService.d.ts +40 -0
- package/build/services/WebResourceService.d.ts.map +1 -0
- package/build/services/WebResourceService.js +64 -0
- package/build/services/WebResourceService.js.map +1 -0
- package/build/services/WorkflowManagementService.d.ts +157 -0
- package/build/services/WorkflowManagementService.d.ts.map +1 -0
- package/build/services/WorkflowManagementService.js +567 -0
- package/build/services/WorkflowManagementService.js.map +1 -0
- package/build/services/WorkflowService.d.ts +28 -0
- package/build/services/WorkflowService.d.ts.map +1 -0
- package/build/services/WorkflowService.js +285 -0
- package/build/services/WorkflowService.js.map +1 -0
- package/build/services/index.d.ts +29 -0
- package/build/services/index.d.ts.map +1 -0
- package/build/services/index.js +31 -0
- package/build/services/index.js.map +1 -0
- package/build/utils/auditLogger.d.ts +76 -0
- package/build/utils/auditLogger.d.ts.map +1 -0
- package/build/utils/auditLogger.js +110 -0
- package/build/utils/auditLogger.js.map +1 -0
- package/build/utils/best-practices-formatters.d.ts +26 -0
- package/build/utils/best-practices-formatters.d.ts.map +1 -0
- package/build/utils/best-practices-formatters.js +238 -0
- package/build/utils/best-practices-formatters.js.map +1 -0
- package/build/utils/bestPractices.d.ts +150 -0
- package/build/utils/bestPractices.d.ts.map +1 -0
- package/build/utils/bestPractices.js +324 -0
- package/build/utils/bestPractices.js.map +1 -0
- package/build/utils/iconManager.d.ts +84 -0
- package/build/utils/iconManager.d.ts.map +1 -0
- package/build/utils/iconManager.js +338 -0
- package/build/utils/iconManager.js.map +1 -0
- package/build/utils/index.d.ts +11 -0
- package/build/utils/index.d.ts.map +1 -0
- package/build/utils/index.js +18 -0
- package/build/utils/index.js.map +1 -0
- package/build/utils/prompt-templates.d.ts +9 -0
- package/build/utils/prompt-templates.d.ts.map +1 -0
- package/build/utils/prompt-templates.js +31 -0
- package/build/utils/prompt-templates.js.map +1 -0
- package/build/utils/publisherConfig.d.ts +33 -0
- package/build/utils/publisherConfig.d.ts.map +1 -0
- package/build/utils/publisherConfig.js +54 -0
- package/build/utils/publisherConfig.js.map +1 -0
- package/build/utils/rate-limiter.d.ts +108 -0
- package/build/utils/rate-limiter.d.ts.map +1 -0
- package/build/utils/rate-limiter.js +242 -0
- package/build/utils/rate-limiter.js.map +1 -0
- package/package.json +65 -0
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SolutionService
|
|
3
|
+
*
|
|
4
|
+
* Service for solution management operations.
|
|
5
|
+
* Note: This service should only be used by powerplatform-customization package.
|
|
6
|
+
*/
|
|
7
|
+
export class SolutionService {
|
|
8
|
+
client;
|
|
9
|
+
constructor(client) {
|
|
10
|
+
this.client = client;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Create a publisher
|
|
14
|
+
*/
|
|
15
|
+
async createPublisher(publisher) {
|
|
16
|
+
return this.client.makeRequest('api/data/v9.2/publishers', 'POST', publisher);
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Get publishers
|
|
20
|
+
*/
|
|
21
|
+
async getPublishers() {
|
|
22
|
+
return this.client.makeRequest('api/data/v9.2/publishers?$filter=isreadonly eq false');
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Create a solution
|
|
26
|
+
*/
|
|
27
|
+
async createSolution(solution) {
|
|
28
|
+
return this.client.makeRequest('api/data/v9.2/solutions', 'POST', solution);
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Get solutions
|
|
32
|
+
*/
|
|
33
|
+
async getSolutions() {
|
|
34
|
+
return this.client.makeRequest('api/data/v9.2/solutions?$filter=isvisible eq true&$orderby=createdon desc');
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Get solution by unique name
|
|
38
|
+
*/
|
|
39
|
+
async getSolution(uniqueName) {
|
|
40
|
+
const result = await this.client.makeRequest(`api/data/v9.2/solutions?$filter=uniquename eq '${uniqueName}'&$top=1`);
|
|
41
|
+
return result.value && result.value.length > 0 ? result.value[0] : null;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Add component to solution
|
|
45
|
+
*/
|
|
46
|
+
async addComponentToSolution(solutionUniqueName, componentId, componentType, addRequiredComponents = true, includedComponentSettingsValues) {
|
|
47
|
+
await this.client.makeRequest('api/data/v9.2/AddSolutionComponent', 'POST', {
|
|
48
|
+
SolutionUniqueName: solutionUniqueName,
|
|
49
|
+
ComponentId: componentId,
|
|
50
|
+
ComponentType: componentType,
|
|
51
|
+
AddRequiredComponents: addRequiredComponents,
|
|
52
|
+
IncludedComponentSettingsValues: includedComponentSettingsValues,
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Remove component from solution
|
|
57
|
+
*/
|
|
58
|
+
async removeComponentFromSolution(solutionUniqueName, componentId, componentType) {
|
|
59
|
+
await this.client.makeRequest('api/data/v9.2/RemoveSolutionComponent', 'POST', {
|
|
60
|
+
SolutionUniqueName: solutionUniqueName,
|
|
61
|
+
ComponentId: componentId,
|
|
62
|
+
ComponentType: componentType,
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Get solution components
|
|
67
|
+
*/
|
|
68
|
+
async getSolutionComponents(solutionUniqueName) {
|
|
69
|
+
const solution = await this.getSolution(solutionUniqueName);
|
|
70
|
+
if (!solution) {
|
|
71
|
+
throw new Error(`Solution '${solutionUniqueName}' not found`);
|
|
72
|
+
}
|
|
73
|
+
return this.client.makeRequest(`api/data/v9.2/solutioncomponents?$filter=_solutionid_value eq ${solution.solutionid}&$orderby=componenttype`);
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Export solution
|
|
77
|
+
*/
|
|
78
|
+
async exportSolution(solutionName, managed = false) {
|
|
79
|
+
return this.client.makeRequest('api/data/v9.2/ExportSolution', 'POST', {
|
|
80
|
+
SolutionName: solutionName,
|
|
81
|
+
Managed: managed,
|
|
82
|
+
ExportAutoNumberingSettings: true,
|
|
83
|
+
ExportCalendarSettings: true,
|
|
84
|
+
ExportCustomizationSettings: true,
|
|
85
|
+
ExportEmailTrackingSettings: true,
|
|
86
|
+
ExportGeneralSettings: true,
|
|
87
|
+
ExportMarketingSettings: true,
|
|
88
|
+
ExportOutlookSynchronizationSettings: true,
|
|
89
|
+
ExportRelationshipRoles: true,
|
|
90
|
+
ExportIsvConfig: true,
|
|
91
|
+
ExportSales: true,
|
|
92
|
+
ExportExternalApplications: true,
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Import solution
|
|
97
|
+
*/
|
|
98
|
+
async importSolution(customizationFile, publishWorkflows = true, overwriteUnmanagedCustomizations = false) {
|
|
99
|
+
return this.client.makeRequest('api/data/v9.2/ImportSolution', 'POST', {
|
|
100
|
+
CustomizationFile: customizationFile,
|
|
101
|
+
PublishWorkflows: publishWorkflows,
|
|
102
|
+
OverwriteUnmanagedCustomizations: overwriteUnmanagedCustomizations,
|
|
103
|
+
SkipProductUpdateDependencies: false,
|
|
104
|
+
HoldingSolution: false,
|
|
105
|
+
ImportJobId: this.generateGuid(),
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Delete a solution
|
|
110
|
+
*/
|
|
111
|
+
async deleteSolution(solutionId) {
|
|
112
|
+
await this.client.makeRequest(`api/data/v9.2/solutions(${solutionId})`, 'DELETE');
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Generate a GUID
|
|
116
|
+
*/
|
|
117
|
+
generateGuid() {
|
|
118
|
+
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {
|
|
119
|
+
const r = (Math.random() * 16) | 0;
|
|
120
|
+
const v = c === 'x' ? r : (r & 0x3) | 0x8;
|
|
121
|
+
return v.toString(16);
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=SolutionService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SolutionService.js","sourceRoot":"","sources":["../../src/services/SolutionService.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ValidationService
|
|
3
|
+
*
|
|
4
|
+
* Read-only service for validating entities against best practices.
|
|
5
|
+
*/
|
|
6
|
+
import type { PowerPlatformClient } from '../client/PowerPlatformClient.js';
|
|
7
|
+
import type { BestPracticesValidationResult } from '../client/types.js';
|
|
8
|
+
export declare class ValidationService {
|
|
9
|
+
private client;
|
|
10
|
+
constructor(client: PowerPlatformClient);
|
|
11
|
+
/**
|
|
12
|
+
* Validate entities against Dataverse best practices
|
|
13
|
+
*/
|
|
14
|
+
validateBestPractices(solutionUniqueName: string | undefined, entityLogicalNames: string[] | undefined, publisherPrefix: string, recentDays?: number, includeRefDataTables?: boolean, rules?: string[], maxEntities?: number, requiredColumns?: string[]): Promise<BestPracticesValidationResult>;
|
|
15
|
+
/**
|
|
16
|
+
* Helper method to validate entity-level properties and attributes against best practice rules
|
|
17
|
+
*/
|
|
18
|
+
private validateEntityAndAttributes;
|
|
19
|
+
/**
|
|
20
|
+
* Build violations summary with complete lists of affected entities and columns grouped by rule
|
|
21
|
+
*/
|
|
22
|
+
private buildViolationsSummary;
|
|
23
|
+
/**
|
|
24
|
+
* Validate schema name against PowerPlatform naming rules
|
|
25
|
+
*/
|
|
26
|
+
validateSchemaName(schemaName: string, prefix: string): {
|
|
27
|
+
valid: boolean;
|
|
28
|
+
errors: string[];
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=ValidationService.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ValidationService.d.ts","sourceRoot":"","sources":["../../src/services/ValidationService.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AAC5E,OAAO,KAAK,EAEV,6BAA6B,EAI9B,MAAM,oBAAoB,CAAC;AAE5B,qBAAa,iBAAiB;IAChB,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,mBAAmB;IAE/C;;OAEG;IACG,qBAAqB,CACzB,kBAAkB,EAAE,MAAM,GAAG,SAAS,EACtC,kBAAkB,EAAE,MAAM,EAAE,GAAG,SAAS,EACxC,eAAe,EAAE,MAAM,EACvB,UAAU,GAAE,MAAW,EACvB,oBAAoB,GAAE,OAAc,EACpC,KAAK,GAAE,MAAM,EAOZ,EACD,WAAW,GAAE,MAAU,EACvB,eAAe,GAAE,MAAM,EAAiC,GACvD,OAAO,CAAC,6BAA6B,CAAC;IAiNzC;;OAEG;YACW,2BAA2B;IAkMzC;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAuE9B;;OAEG;IACH,kBAAkB,CAChB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,GACb;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE;CAyBxC"}
|
|
@@ -0,0 +1,391 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ValidationService
|
|
3
|
+
*
|
|
4
|
+
* Read-only service for validating entities against best practices.
|
|
5
|
+
*/
|
|
6
|
+
export class ValidationService {
|
|
7
|
+
client;
|
|
8
|
+
constructor(client) {
|
|
9
|
+
this.client = client;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Validate entities against Dataverse best practices
|
|
13
|
+
*/
|
|
14
|
+
async validateBestPractices(solutionUniqueName, entityLogicalNames, publisherPrefix, recentDays = 30, includeRefDataTables = true, rules = [
|
|
15
|
+
'prefix',
|
|
16
|
+
'lowercase',
|
|
17
|
+
'lookup',
|
|
18
|
+
'optionset',
|
|
19
|
+
'required-column',
|
|
20
|
+
'entity-icon',
|
|
21
|
+
], maxEntities = 0, requiredColumns = ['{prefix}updatedbyprocess']) {
|
|
22
|
+
const startTime = Date.now();
|
|
23
|
+
const statisticsCounters = {
|
|
24
|
+
systemColumns: 0,
|
|
25
|
+
oldColumns: 0,
|
|
26
|
+
};
|
|
27
|
+
let entities = [];
|
|
28
|
+
let solutionFriendlyName;
|
|
29
|
+
// STEP 1: Discover entities
|
|
30
|
+
if (solutionUniqueName) {
|
|
31
|
+
// Get solution ID
|
|
32
|
+
const solutionResponse = await this.client.makeRequest(`api/data/v9.2/solutions?$filter=uniquename eq '${solutionUniqueName}'&$select=solutionid,friendlyname,uniquename`);
|
|
33
|
+
if (!solutionResponse.value || solutionResponse.value.length === 0) {
|
|
34
|
+
throw new Error(`Solution not found: ${solutionUniqueName}`);
|
|
35
|
+
}
|
|
36
|
+
const solution = solutionResponse.value[0];
|
|
37
|
+
const solutionId = solution.solutionid;
|
|
38
|
+
solutionFriendlyName = solution.friendlyname;
|
|
39
|
+
// Get solution components (entities only, componenttype = 1)
|
|
40
|
+
const componentsResponse = await this.client.makeRequest(`api/data/v9.2/solutioncomponents?$filter=_solutionid_value eq ${solutionId} and componenttype eq 1&$select=objectid`);
|
|
41
|
+
// Get entity metadata for each component
|
|
42
|
+
for (const component of componentsResponse.value || []) {
|
|
43
|
+
const metadataId = component.objectid;
|
|
44
|
+
try {
|
|
45
|
+
// Query entity by MetadataId
|
|
46
|
+
const entityResponse = await this.client.makeRequest(`api/data/v9.2/EntityDefinitions(${metadataId})?$select=LogicalName,SchemaName`);
|
|
47
|
+
const logicalName = entityResponse.LogicalName;
|
|
48
|
+
// Filter: Only entities with publisher prefix
|
|
49
|
+
if (logicalName.startsWith(publisherPrefix)) {
|
|
50
|
+
// Filter: Optionally exclude RefData tables
|
|
51
|
+
if (includeRefDataTables ||
|
|
52
|
+
!logicalName.startsWith(`${publisherPrefix}ref_`)) {
|
|
53
|
+
entities.push(logicalName);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
// Skip entities that can't be queried (managed/system entities)
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
// Apply max entities limit
|
|
62
|
+
if (maxEntities > 0 && entities.length > maxEntities) {
|
|
63
|
+
entities = entities.slice(0, maxEntities);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
else if (entityLogicalNames) {
|
|
67
|
+
// Use explicit entity list
|
|
68
|
+
entities = entityLogicalNames.filter((name) => name.startsWith(publisherPrefix));
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
throw new Error('Either solutionUniqueName or entityLogicalNames must be provided');
|
|
72
|
+
}
|
|
73
|
+
// STEP 2: Validate each entity
|
|
74
|
+
const results = [];
|
|
75
|
+
for (const entityLogicalName of entities) {
|
|
76
|
+
try {
|
|
77
|
+
// Get entity metadata (including icon information)
|
|
78
|
+
const entityMetadata = await this.client.makeRequest(`api/data/v9.2/EntityDefinitions(LogicalName='${entityLogicalName}')?$select=LogicalName,SchemaName,DisplayName,MetadataId,IconVectorName,IsCustomEntity`);
|
|
79
|
+
// Get all attributes for entity
|
|
80
|
+
const attributesResponse = await this.client.makeRequest(`api/data/v9.2/EntityDefinitions(LogicalName='${entityLogicalName}')/Attributes?$select=LogicalName,AttributeType,DisplayName,CreatedOn,IsCustomAttribute,AttributeTypeName`);
|
|
81
|
+
const attributes = attributesResponse.value || [];
|
|
82
|
+
// Apply filtering
|
|
83
|
+
const filteredAttributes = attributes.filter((attr) => {
|
|
84
|
+
const logicalName = attr.LogicalName;
|
|
85
|
+
const isCustomAttribute = attr.IsCustomAttribute;
|
|
86
|
+
const createdOn = attr.CreatedOn;
|
|
87
|
+
// Rule: Must have publisher prefix
|
|
88
|
+
if (!logicalName.startsWith(publisherPrefix)) {
|
|
89
|
+
statisticsCounters.systemColumns++;
|
|
90
|
+
return false; // Exclude system columns
|
|
91
|
+
}
|
|
92
|
+
// Rule: Must be custom attribute (additional safety)
|
|
93
|
+
if (!isCustomAttribute) {
|
|
94
|
+
statisticsCounters.systemColumns++;
|
|
95
|
+
return false;
|
|
96
|
+
}
|
|
97
|
+
// Rule: Must be within time threshold
|
|
98
|
+
if (recentDays > 0 && createdOn) {
|
|
99
|
+
const createdDate = new Date(createdOn);
|
|
100
|
+
const daysAgo = (Date.now() - createdDate.getTime()) / (1000 * 60 * 60 * 24);
|
|
101
|
+
if (daysAgo > recentDays) {
|
|
102
|
+
statisticsCounters.oldColumns++;
|
|
103
|
+
return false; // Too old
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
return true;
|
|
107
|
+
});
|
|
108
|
+
// Validate entity-level properties and attributes
|
|
109
|
+
const violations = await this.validateEntityAndAttributes(entityMetadata, filteredAttributes, attributes, // Pass all attributes for required column check
|
|
110
|
+
publisherPrefix, rules, requiredColumns);
|
|
111
|
+
const displayName = entityMetadata.DisplayName?.UserLocalizedLabel?.Label || entityMetadata.LogicalName;
|
|
112
|
+
results.push({
|
|
113
|
+
logicalName: entityMetadata.LogicalName,
|
|
114
|
+
schemaName: entityMetadata.SchemaName,
|
|
115
|
+
displayName: displayName,
|
|
116
|
+
isRefData: entityMetadata.LogicalName.startsWith(`${publisherPrefix}ref_`),
|
|
117
|
+
attributesChecked: filteredAttributes.length,
|
|
118
|
+
violations: violations,
|
|
119
|
+
isCompliant: violations.length === 0,
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
catch {
|
|
123
|
+
// Skip entities that fail validation
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
// STEP 3: Calculate summary statistics
|
|
127
|
+
const summary = {
|
|
128
|
+
entitiesChecked: results.length,
|
|
129
|
+
attributesChecked: results.reduce((sum, e) => sum + e.attributesChecked, 0),
|
|
130
|
+
totalViolations: results.reduce((sum, e) => sum + e.violations.length, 0),
|
|
131
|
+
criticalViolations: results.reduce((sum, e) => sum + e.violations.filter((v) => v.severity === 'MUST').length, 0),
|
|
132
|
+
warnings: results.reduce((sum, e) => sum + e.violations.filter((v) => v.severity === 'SHOULD').length, 0),
|
|
133
|
+
compliantEntities: results.filter((e) => e.isCompliant).length,
|
|
134
|
+
};
|
|
135
|
+
const executionTimeMs = Date.now() - startTime;
|
|
136
|
+
// STEP 4: Build violations summary with complete lists
|
|
137
|
+
const violationsSummary = this.buildViolationsSummary(results);
|
|
138
|
+
// Build final result
|
|
139
|
+
return {
|
|
140
|
+
metadata: {
|
|
141
|
+
generatedAt: new Date().toISOString(),
|
|
142
|
+
solutionName: solutionFriendlyName,
|
|
143
|
+
solutionUniqueName: solutionUniqueName,
|
|
144
|
+
publisherPrefix,
|
|
145
|
+
recentDays,
|
|
146
|
+
executionTimeMs,
|
|
147
|
+
},
|
|
148
|
+
summary,
|
|
149
|
+
violationsSummary,
|
|
150
|
+
entities: results,
|
|
151
|
+
statistics: {
|
|
152
|
+
systemColumnsExcluded: statisticsCounters.systemColumns,
|
|
153
|
+
oldColumnsExcluded: statisticsCounters.oldColumns,
|
|
154
|
+
refDataTablesSkipped: results.filter((e) => e.isRefData).length,
|
|
155
|
+
},
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Helper method to validate entity-level properties and attributes against best practice rules
|
|
160
|
+
*/
|
|
161
|
+
async validateEntityAndAttributes(entityMetadata, filteredAttributes, allAttributes, publisherPrefix, rules, requiredColumns) {
|
|
162
|
+
const violations = [];
|
|
163
|
+
const entityLogicalName = entityMetadata.LogicalName;
|
|
164
|
+
// ENTITY-LEVEL VALIDATION: Check if entity has an icon
|
|
165
|
+
if (rules.includes('entity-icon')) {
|
|
166
|
+
// Only check custom entities (IsCustomEntity = true)
|
|
167
|
+
if (entityMetadata.IsCustomEntity) {
|
|
168
|
+
const iconVectorName = entityMetadata.IconVectorName;
|
|
169
|
+
const hasIcon = iconVectorName && iconVectorName.length > 0 && iconVectorName !== null;
|
|
170
|
+
if (!hasIcon) {
|
|
171
|
+
violations.push({
|
|
172
|
+
attributeLogicalName: undefined, // Entity-level violation
|
|
173
|
+
rule: 'Entity Icon',
|
|
174
|
+
severity: 'SHOULD',
|
|
175
|
+
message: `Entity "${entityLogicalName}" does not have a custom icon assigned`,
|
|
176
|
+
currentValue: 'No icon',
|
|
177
|
+
expectedValue: 'Custom icon (SVG web resource)',
|
|
178
|
+
action: `Assign a Fluent UI icon using the update-entity-icon tool. Example: update-entity-icon with entityLogicalName="${entityLogicalName}" and an appropriate icon file.`,
|
|
179
|
+
recommendation: 'Custom icons improve entity recognition in Model-Driven Apps and enhance user experience. Use Fluent UI System Icons for consistency with Microsoft design language.',
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
// RULE 1: Publisher Prefix Check
|
|
185
|
+
if (rules.includes('prefix')) {
|
|
186
|
+
for (const attr of filteredAttributes) {
|
|
187
|
+
const logicalName = attr.LogicalName;
|
|
188
|
+
if (!logicalName.startsWith(publisherPrefix)) {
|
|
189
|
+
violations.push({
|
|
190
|
+
attributeLogicalName: logicalName,
|
|
191
|
+
attributeType: attr.AttributeTypeName?.Value ||
|
|
192
|
+
attr.AttributeType,
|
|
193
|
+
createdOn: attr.CreatedOn,
|
|
194
|
+
rule: 'Publisher Prefix',
|
|
195
|
+
severity: 'MUST',
|
|
196
|
+
message: `Column "${logicalName}" does not have required prefix "${publisherPrefix}"`,
|
|
197
|
+
currentValue: logicalName,
|
|
198
|
+
expectedValue: `${publisherPrefix}${logicalName}`,
|
|
199
|
+
action: `Rename column to add "${publisherPrefix}" prefix`,
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
// RULE 2: Schema Name Lowercase Check
|
|
205
|
+
if (rules.includes('lowercase')) {
|
|
206
|
+
for (const attr of filteredAttributes) {
|
|
207
|
+
const logicalName = attr.LogicalName;
|
|
208
|
+
if (logicalName !== logicalName.toLowerCase()) {
|
|
209
|
+
violations.push({
|
|
210
|
+
attributeLogicalName: logicalName,
|
|
211
|
+
attributeType: attr.AttributeTypeName?.Value ||
|
|
212
|
+
attr.AttributeType,
|
|
213
|
+
createdOn: attr.CreatedOn,
|
|
214
|
+
rule: 'Schema Name Lowercase',
|
|
215
|
+
severity: 'MUST',
|
|
216
|
+
message: `Column "${logicalName}" contains uppercase letters`,
|
|
217
|
+
currentValue: logicalName,
|
|
218
|
+
expectedValue: logicalName.toLowerCase(),
|
|
219
|
+
action: `Rename column to use all lowercase: ${logicalName.toLowerCase()}`,
|
|
220
|
+
});
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
// RULE 3: Lookup Naming Convention
|
|
225
|
+
if (rules.includes('lookup')) {
|
|
226
|
+
for (const attr of filteredAttributes) {
|
|
227
|
+
const logicalName = attr.LogicalName;
|
|
228
|
+
const attributeType = attr.AttributeType;
|
|
229
|
+
const attributeTypeName = attr.AttributeTypeName
|
|
230
|
+
?.Value;
|
|
231
|
+
// Check if it's a Lookup type
|
|
232
|
+
const isLookup = attributeType === 'Lookup' || attributeTypeName === 'LookupType';
|
|
233
|
+
if (isLookup && !logicalName.endsWith('id')) {
|
|
234
|
+
violations.push({
|
|
235
|
+
attributeLogicalName: logicalName,
|
|
236
|
+
attributeType: 'Lookup',
|
|
237
|
+
createdOn: attr.CreatedOn,
|
|
238
|
+
rule: 'Lookup Naming Convention',
|
|
239
|
+
severity: 'MUST',
|
|
240
|
+
message: `Lookup column "${logicalName}" does not end with "id"`,
|
|
241
|
+
currentValue: logicalName,
|
|
242
|
+
expectedValue: `${logicalName}id`,
|
|
243
|
+
action: `Rename column to add "id" suffix: ${logicalName}id`,
|
|
244
|
+
});
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
// RULE 4: Option Set Scope Check
|
|
249
|
+
if (rules.includes('optionset')) {
|
|
250
|
+
for (const attr of filteredAttributes) {
|
|
251
|
+
const logicalName = attr.LogicalName;
|
|
252
|
+
const attributeType = attr.AttributeType;
|
|
253
|
+
const attributeTypeName = attr.AttributeTypeName
|
|
254
|
+
?.Value;
|
|
255
|
+
// Check if it's a Picklist type
|
|
256
|
+
const isPicklist = attributeType === 'Picklist' || attributeTypeName === 'PicklistType';
|
|
257
|
+
if (isPicklist) {
|
|
258
|
+
try {
|
|
259
|
+
// Need to get full attribute details to check OptionSet.IsGlobal
|
|
260
|
+
const attrDetails = await this.client.makeRequest(`api/data/v9.2/EntityDefinitions(LogicalName='${entityLogicalName}')/Attributes(LogicalName='${logicalName}')?$select=LogicalName&$expand=OptionSet($select=IsGlobal)`);
|
|
261
|
+
const optionSet = attrDetails.OptionSet;
|
|
262
|
+
if (optionSet && !optionSet.IsGlobal) {
|
|
263
|
+
violations.push({
|
|
264
|
+
attributeLogicalName: logicalName,
|
|
265
|
+
attributeType: 'Picklist',
|
|
266
|
+
createdOn: attr.CreatedOn,
|
|
267
|
+
rule: 'Option Set Scope',
|
|
268
|
+
severity: 'MUST',
|
|
269
|
+
message: `Option set "${logicalName}" is local, must be global`,
|
|
270
|
+
currentValue: 'Local Option Set',
|
|
271
|
+
expectedValue: 'Global Option Set',
|
|
272
|
+
action: 'Convert to global option set for reusability',
|
|
273
|
+
recommendation: 'Use global option sets to enable reuse across entities and reduce maintenance',
|
|
274
|
+
});
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
catch {
|
|
278
|
+
// Skip if we can't get option set details
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
// RULE 5: Required Column Existence
|
|
284
|
+
if (rules.includes('required-column')) {
|
|
285
|
+
// Skip for RefData tables
|
|
286
|
+
if (!entityLogicalName.startsWith(`${publisherPrefix}ref_`)) {
|
|
287
|
+
// Replace {prefix} placeholder in each required column name
|
|
288
|
+
const resolvedColumns = requiredColumns.map((col) => col.replace('{prefix}', publisherPrefix));
|
|
289
|
+
// Check each required column
|
|
290
|
+
for (const requiredColumn of resolvedColumns) {
|
|
291
|
+
const hasColumn = allAttributes.some((attr) => attr.LogicalName === requiredColumn);
|
|
292
|
+
if (!hasColumn) {
|
|
293
|
+
// Extract display name from schema name (remove prefix, capitalize words)
|
|
294
|
+
const displayName = requiredColumn
|
|
295
|
+
.replace(publisherPrefix, '')
|
|
296
|
+
.split('_')
|
|
297
|
+
.map((word) => word.charAt(0).toUpperCase() + word.slice(1))
|
|
298
|
+
.join(' ');
|
|
299
|
+
violations.push({
|
|
300
|
+
attributeLogicalName: undefined, // Entity-level violation
|
|
301
|
+
rule: 'Required Column Existence',
|
|
302
|
+
severity: 'MUST',
|
|
303
|
+
message: `Entity "${entityLogicalName}" is missing required column "${requiredColumn}"`,
|
|
304
|
+
currentValue: 'Missing',
|
|
305
|
+
expectedValue: `Column "${requiredColumn}" must exist`,
|
|
306
|
+
action: `Create column with Display Name "${displayName}", Schema Name "${requiredColumn}", Type: Text (4000 chars), Description: "This field tracks ${displayName.toLowerCase()} information."`,
|
|
307
|
+
});
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
return violations;
|
|
313
|
+
}
|
|
314
|
+
/**
|
|
315
|
+
* Build violations summary with complete lists of affected entities and columns grouped by rule
|
|
316
|
+
*/
|
|
317
|
+
buildViolationsSummary(entities) {
|
|
318
|
+
// Group violations by rule
|
|
319
|
+
const grouped = new Map();
|
|
320
|
+
for (const entity of entities) {
|
|
321
|
+
for (const violation of entity.violations) {
|
|
322
|
+
if (!grouped.has(violation.rule)) {
|
|
323
|
+
grouped.set(violation.rule, []);
|
|
324
|
+
}
|
|
325
|
+
grouped.get(violation.rule).push({
|
|
326
|
+
...violation,
|
|
327
|
+
entityLogicalName: entity.logicalName,
|
|
328
|
+
});
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
// Build summary for each rule
|
|
332
|
+
const summary = [];
|
|
333
|
+
for (const [rule, items] of grouped.entries()) {
|
|
334
|
+
if (items.length === 0)
|
|
335
|
+
continue;
|
|
336
|
+
// Separate entity-level violations (no attributeLogicalName) from column-level
|
|
337
|
+
const entityLevelViolations = items.filter((v) => !v.attributeLogicalName);
|
|
338
|
+
const columnLevelViolations = items.filter((v) => v.attributeLogicalName);
|
|
339
|
+
// Get unique affected entities
|
|
340
|
+
const affectedEntities = [
|
|
341
|
+
...new Set(entityLevelViolations.map((v) => v.entityLogicalName)),
|
|
342
|
+
];
|
|
343
|
+
// Get unique affected columns (entity.column format)
|
|
344
|
+
const affectedColumns = [
|
|
345
|
+
...new Set(columnLevelViolations.map((v) => `${v.entityLogicalName}.${v.attributeLogicalName}`)),
|
|
346
|
+
];
|
|
347
|
+
// Get severity, action, and recommendation from first violation
|
|
348
|
+
const firstViolation = items[0];
|
|
349
|
+
summary.push({
|
|
350
|
+
rule,
|
|
351
|
+
severity: firstViolation.severity,
|
|
352
|
+
totalCount: items.length,
|
|
353
|
+
affectedEntities,
|
|
354
|
+
affectedColumns,
|
|
355
|
+
action: firstViolation.action,
|
|
356
|
+
recommendation: firstViolation.recommendation,
|
|
357
|
+
});
|
|
358
|
+
}
|
|
359
|
+
// Sort by severity (MUST first) then by count (descending)
|
|
360
|
+
summary.sort((a, b) => {
|
|
361
|
+
if (a.severity !== b.severity) {
|
|
362
|
+
return a.severity === 'MUST' ? -1 : 1;
|
|
363
|
+
}
|
|
364
|
+
return b.totalCount - a.totalCount;
|
|
365
|
+
});
|
|
366
|
+
return summary;
|
|
367
|
+
}
|
|
368
|
+
/**
|
|
369
|
+
* Validate schema name against PowerPlatform naming rules
|
|
370
|
+
*/
|
|
371
|
+
validateSchemaName(schemaName, prefix) {
|
|
372
|
+
const errors = [];
|
|
373
|
+
// Check if starts with prefix
|
|
374
|
+
if (!schemaName.startsWith(prefix)) {
|
|
375
|
+
errors.push(`Schema name must start with prefix '${prefix}'`);
|
|
376
|
+
}
|
|
377
|
+
// Check for invalid characters
|
|
378
|
+
if (!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(schemaName)) {
|
|
379
|
+
errors.push('Schema name must start with a letter or underscore and contain only letters, numbers, and underscores');
|
|
380
|
+
}
|
|
381
|
+
// Check length (max 64 characters for most components)
|
|
382
|
+
if (schemaName.length > 64) {
|
|
383
|
+
errors.push('Schema name must be 64 characters or less');
|
|
384
|
+
}
|
|
385
|
+
return {
|
|
386
|
+
valid: errors.length === 0,
|
|
387
|
+
errors,
|
|
388
|
+
};
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
//# sourceMappingURL=ValidationService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ValidationService.js","sourceRoot":"","sources":["../../src/services/ValidationService.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ViewService
|
|
3
|
+
*
|
|
4
|
+
* Service for view (saved query) customization operations.
|
|
5
|
+
* Note: This service should only be used by powerplatform-customization package.
|
|
6
|
+
*/
|
|
7
|
+
import type { PowerPlatformClient } from '../client/PowerPlatformClient.js';
|
|
8
|
+
export declare class ViewService {
|
|
9
|
+
private client;
|
|
10
|
+
constructor(client: PowerPlatformClient);
|
|
11
|
+
/**
|
|
12
|
+
* Create a view (savedquery)
|
|
13
|
+
*/
|
|
14
|
+
createView(view: Record<string, unknown>, solutionUniqueName?: string): Promise<unknown>;
|
|
15
|
+
/**
|
|
16
|
+
* Update a view
|
|
17
|
+
*/
|
|
18
|
+
updateView(viewId: string, updates: Record<string, unknown>, solutionUniqueName?: string): Promise<void>;
|
|
19
|
+
/**
|
|
20
|
+
* Delete a view
|
|
21
|
+
*/
|
|
22
|
+
deleteView(viewId: string): Promise<void>;
|
|
23
|
+
/**
|
|
24
|
+
* Get views for an entity
|
|
25
|
+
*/
|
|
26
|
+
getViews(entityLogicalName: string): Promise<unknown>;
|
|
27
|
+
/**
|
|
28
|
+
* Set a view as the default view for its entity
|
|
29
|
+
*/
|
|
30
|
+
setDefaultView(viewId: string): Promise<void>;
|
|
31
|
+
/**
|
|
32
|
+
* Get the FetchXML from a view
|
|
33
|
+
*/
|
|
34
|
+
getViewFetchXml(viewId: string): Promise<unknown>;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=ViewService.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ViewService.d.ts","sourceRoot":"","sources":["../../src/services/ViewService.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AAE5E,qBAAa,WAAW;IACV,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,mBAAmB;IAE/C;;OAEG;IACG,UAAU,CACd,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,kBAAkB,CAAC,EAAE,MAAM,GAC1B,OAAO,CAAC,OAAO,CAAC;IAanB;;OAEG;IACG,UAAU,CACd,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,kBAAkB,CAAC,EAAE,MAAM,GAC1B,OAAO,CAAC,IAAI,CAAC;IAahB;;OAEG;IACG,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAO/C;;OAEG;IACG,QAAQ,CAAC,iBAAiB,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAM3D;;OAEG;IACG,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQnD;;OAEG;IACG,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAKxD"}
|