@@ -72,7 +72,7 @@ public DataverseService(
7272 this . solutionComponentService = solutionComponentService ;
7373 }
7474
75- public async Task < ( IEnumerable < Record > , IEnumerable < SolutionWarning > , IEnumerable < SolutionComponentCollection > ) > GetFilteredMetadata ( )
75+ public async Task < ( IEnumerable < Record > , IEnumerable < SolutionWarning > , IEnumerable < SolutionComponentCollection > , Dictionary < string , GlobalOptionSetUsage > ) > GetFilteredMetadata ( )
7676 {
7777 // used to collect warnings for the insights dashboard
7878 var warnings = new List < SolutionWarning > ( ) ;
@@ -249,6 +249,46 @@ public DataverseService(
249249 workflowDependencies = new Dictionary < Guid , List < WorkflowInfo > > ( ) ;
250250 }
251251
252+ /// BUILD GLOBAL OPTION SET USAGE MAP
253+ var globalOptionSetUsages = new Dictionary < string , GlobalOptionSetUsage > ( ) ;
254+ foreach ( var entMeta in entitiesInSolutionMetadata )
255+ {
256+ var relevantAttributes = entMeta . Attributes . Where ( attr => attributesInSolution . Contains ( attr . MetadataId ! . Value ) ) ;
257+ foreach ( var attr in relevantAttributes )
258+ {
259+ string ? globalOptionSetName = null ;
260+ string ? globalOptionSetDisplayName = null ;
261+
262+ if ( attr is PicklistAttributeMetadata picklist && picklist . OptionSet ? . IsGlobal == true )
263+ {
264+ globalOptionSetName = picklist . OptionSet . Name ;
265+ globalOptionSetDisplayName = picklist . OptionSet . DisplayName . ToLabelString ( ) ;
266+ }
267+ else if ( attr is MultiSelectPicklistAttributeMetadata multiSelect && multiSelect . OptionSet ? . IsGlobal == true )
268+ {
269+ globalOptionSetName = multiSelect . OptionSet . Name ;
270+ globalOptionSetDisplayName = multiSelect . OptionSet . DisplayName . ToLabelString ( ) ;
271+ }
272+
273+ if ( globalOptionSetName != null )
274+ {
275+ if ( ! globalOptionSetUsages . ContainsKey ( globalOptionSetName ) )
276+ {
277+ globalOptionSetUsages [ globalOptionSetName ] = new GlobalOptionSetUsage (
278+ globalOptionSetName ,
279+ globalOptionSetDisplayName ?? globalOptionSetName ,
280+ new List < GlobalOptionSetUsageReference > ( ) ) ;
281+ }
282+
283+ globalOptionSetUsages [ globalOptionSetName ] . Usages . Add ( new GlobalOptionSetUsageReference (
284+ entMeta . SchemaName ,
285+ entMeta . DisplayName . ToLabelString ( ) ,
286+ attr . SchemaName ,
287+ attr . DisplayName . ToLabelString ( ) ) ) ;
288+ }
289+ }
290+ }
291+
252292 var records =
253293 entitiesInSolutionMetadata
254294 . Select ( entMeta =>
@@ -350,7 +390,7 @@ public DataverseService(
350390 }
351391
352392 logger . LogInformation ( $ "[{ DateTime . Now : yyyy-MM-dd HH:mm:ss.fff} ] GetFilteredMetadata completed") ;
353- return ( records , warnings , solutionComponentCollections ) ;
393+ return ( records , warnings , solutionComponentCollections , globalOptionSetUsages ) ;
354394 }
355395 }
356396
0 commit comments