martedì 23 dicembre 2025

D365FFO - Stampare le informazioni sugli indici delle tabelle

Con questo job è possibile recuperare le informazioni sugli indici e sulla tabelle a cui appartengono.

Questo link è stato molto utile:

https://gist.github.com/mazzy-ax/4d4d06ec2fddd885b67527623467aee8

 internal final class LIL_getIndexInfo  
 {  
   public static void main(Args _args)  
   {  
     str60                        packageName,tableName;  
     CLRObject                      packages, models,tables;  
     CLRObject                      packagesEnumerator, modelsEnumerator,tablesEnumerator;  
     str60                        moduleVersion;  
     DictTable                      dictTable;  
     DictIndex                      dictIndex;      
     int                         i;  
     FieldId                       fieldId;  
     TableId                       tableId;  
     DictField                      dictField;  
     boolean                       isUnique;  
     str                         packageDir;  
     Microsoft.Dynamics.AX.Metadata.MetaModel.ModelInfo modelInfo;  
   
     // Recupera i package  
     packages = Microsoft.Dynamics.Ax.Xpp.MetadataSupport::GetInstalledModuleNames();  
     packagesEnumerator = packages.GetEnumerator();  
       
     // Recupera la directory dei package  
     var environment = Microsoft.Dynamics.ApplicationPlatform.Environment.EnvironmentFactory::GetApplicationEnvironment();  
     packageDir = environment.get_Aos().get_PackageDirectory();  
   
     // Configurazione provider metadati  
     var runtimeProviderConfiguration = New Microsoft.Dynamics.AX.Metadata.Storage.Runtime.RuntimeProviderConfiguration(packageDir);  
     var metadataProviderFactory = New Microsoft.Dynamics.AX.Metadata.Storage.MetadataProviderFactory();  
     Microsoft.Dynamics.AX.Metadata.Providers.IMetadataProvider provider = metadataProviderFactory.CreateRuntimeProvider(runtimeProviderConfiguration);  
     ;  
   
     //loop packages  
     while (packagesEnumerator.moveNext())  
     {  
       packageName = packagesEnumerator.get_Current();  
       models = Microsoft.Dynamics.Ax.Xpp.MetadataSupport::GetModelsInModuleSortedByDisplayName(packageName);  
       modelsEnumerator = models.GetEnumerator();  
         
       //loop models in the package  
       while(modelsEnumerator.MoveNext())  
       {  
         modelInfo = modelsEnumerator.get_Current();  
   
         tables = provider.Tables.ListObjectsForModel(modelInfo.Name);  
         tablesEnumerator = tables.GetEnumerator();  
   
         while(tablesEnumerator.moveNext())  
         {  
           tableName = tablesEnumerator.get_Current();  
   
           if(tableName)  
           {  
             dictTable = new DictTable(tableName2Id(tableName));  
   
             if(dictTable)  
             {  
               for (i = 1; i <= dictTable.indexCnt(); i++)  
               {  
                 dictIndex = new DictIndex(dictTable.id(), dictTable.indexCnt2Id(i));  
   
                 isUnique = !dictIndex.allowDuplicates();  
                   
                 //print table and index info  
                 info(strFmt("Table = %1 | Indice: %2 | Model = %3 | Package = %4 | Modules = %5 | Unique: %6",  
                 tableName,  
                 dictIndex.name(),  
                 modelInfo.Name,  
                 packageName,  
                 dictTable.modules(),  
                 isUnique ? "Yes" : "No"  
                 ));  
               }  
             }  
           }  
         }  
       }  
     }  
   }  
   
 }  

Nessun commento:

Posta un commento