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 moduleName, tableName;
CLRObject moduleModels, sanModels, tables;
CLRObject modelEnumerator, sanEnumerator, tablesEnumerator;
str60 moduleVersion;
DictTable dictTable;
DictIndex dictIndex;
int i;
FieldId fieldId;
TableId tableId;
DictField dictField;
boolean isUnique;
Microsoft.Dynamics.AX.Metadata.MetaModel.ModelInfo modelInfo;
// Recupera i moduli installati
moduleModels = Microsoft.Dynamics.Ax.Xpp.MetadataSupport::GetInstalledModuleNames();
modelEnumerator = moduleModels.GetEnumerator();
// Recupera la directory dei package
str packageDir;
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 sui package
while (modelEnumerator.moveNext())
{
moduleName = modelEnumerator.get_Current();
sanModels = Microsoft.Dynamics.Ax.Xpp.MetadataSupport::GetModelsInModuleSortedByDisplayName(moduleName);
sanEnumerator = sanModels.GetEnumerator();
// Loop sui modelli nel package
while (sanEnumerator.MoveNext())
{
modelInfo = sanEnumerator.get_Current();
tables = provider.Tables.ListObjectsForModel(modelInfo.Name);
tablesEnumerator = tables.GetEnumerator();
// Loop sulle tabelle del modello
while (tablesEnumerator.moveNext())
{
tableName = tablesEnumerator.get_Current();
if (tableName)
{
tableId = tableName2Id(tableName);
dictTable = new DictTable(tableId);
if (dictTable)
{
// Loop sugli indici della tabella
for (i = 1; i <= dictTable.indexCnt(); i++)
{
dictIndex = new DictIndex(dictTable.id(), dictTable.indexCnt2Id(i));
isUnique = !dictIndex.allowDuplicates();
// Stampa informazioni
info(strFmt(
"Table = %1 | Indice: %2 | Model = %3 | Package = %4 | Modules = %5 | Unique: %6",
tableName,
dictIndex.name(),
modelInfo.Name,
moduleName,
dictTable.modules(),
isUnique ? "Yes" : "No"
));
}
}
}
}
}
}
}