@@ -69,7 +69,7 @@ public DataverseService(
6969 this . solutionComponentService = solutionComponentService ;
7070 }
7171
72- public async Task < ( IEnumerable < Record > , IEnumerable < SolutionWarning > ) > GetFilteredMetadata ( )
72+ public async Task < ( IEnumerable < Record > , IEnumerable < SolutionWarning > , Dictionary < string , GlobalOptionSetUsage > ) > GetFilteredMetadata ( )
7373 {
7474 // used to collect warnings for the insights dashboard
7575 var warnings = new List < SolutionWarning > ( ) ;
@@ -246,6 +246,46 @@ public DataverseService(
246246 workflowDependencies = new Dictionary < Guid , List < WorkflowInfo > > ( ) ;
247247 }
248248
249+ /// BUILD GLOBAL OPTION SET USAGE MAP
250+ var globalOptionSetUsages = new Dictionary < string , GlobalOptionSetUsage > ( ) ;
251+ foreach ( var entMeta in entitiesInSolutionMetadata )
252+ {
253+ var relevantAttributes = entMeta . Attributes . Where ( attr => attributesInSolution . Contains ( attr . MetadataId ! . Value ) ) ;
254+ foreach ( var attr in relevantAttributes )
255+ {
256+ string ? globalOptionSetName = null ;
257+ string ? globalOptionSetDisplayName = null ;
258+
259+ if ( attr is PicklistAttributeMetadata picklist && picklist . OptionSet ? . IsGlobal == true )
260+ {
261+ globalOptionSetName = picklist . OptionSet . Name ;
262+ globalOptionSetDisplayName = picklist . OptionSet . DisplayName . ToLabelString ( ) ;
263+ }
264+ else if ( attr is MultiSelectPicklistAttributeMetadata multiSelect && multiSelect . OptionSet ? . IsGlobal == true )
265+ {
266+ globalOptionSetName = multiSelect . OptionSet . Name ;
267+ globalOptionSetDisplayName = multiSelect . OptionSet . DisplayName . ToLabelString ( ) ;
268+ }
269+
270+ if ( globalOptionSetName != null )
271+ {
272+ if ( ! globalOptionSetUsages . ContainsKey ( globalOptionSetName ) )
273+ {
274+ globalOptionSetUsages [ globalOptionSetName ] = new GlobalOptionSetUsage (
275+ globalOptionSetName ,
276+ globalOptionSetDisplayName ?? globalOptionSetName ,
277+ new List < GlobalOptionSetUsageReference > ( ) ) ;
278+ }
279+
280+ globalOptionSetUsages [ globalOptionSetName ] . Usages . Add ( new GlobalOptionSetUsageReference (
281+ entMeta . SchemaName ,
282+ entMeta . DisplayName . ToLabelString ( ) ,
283+ attr . SchemaName ,
284+ attr . DisplayName . ToLabelString ( ) ) ) ;
285+ }
286+ }
287+ }
288+
249289 var records =
250290 entitiesInSolutionMetadata
251291 . Select ( entMeta =>
@@ -275,8 +315,8 @@ public DataverseService(
275315 } )
276316 . ToList ( ) ;
277317
278- logger . LogInformation ( $ "[{ DateTime . Now : yyyy-MM-dd HH:mm:ss.fff} ] GetFilteredMetadata completed - returning empty results ") ;
279- return ( records , warnings ) ;
318+ logger . LogInformation ( $ "[{ DateTime . Now : yyyy-MM-dd HH:mm:ss.fff} ] GetFilteredMetadata completed - returning { records . Count } records with { globalOptionSetUsages . Count } global option sets ") ;
319+ return ( records , warnings , globalOptionSetUsages ) ;
280320 }
281321 }
282322
0 commit comments