Dynamics AX Blog - Beiträge vom August 2011
Datensatzvorlagen ermitteln
12.08.2011Microsoft Dynamics AX (Axapta)
Wer einmal in die Verlegenheit kommt, ermitteln zu müssen ob für eine bestimmte Tabelle Datensatzvorlagen vorhanden sind, für den kann folgendes Code-Beispiel hilfreich sein. Im Beispiel wird ermittelt, wieviele Benutzer- bzw. Unternehmensvorlagen es für die Tabelle InventTable gibt und ob der aktuelle Benutzer sich den Vorlagendialog anzeigen lässt, wenn er/sie einen neuen Artikel anlegt. static void SysRecordTemplatesActive(Args _args) { tableId tableId = tableNum(inventTable); common common = new sysdictTable(tableId).makeRecord(); SysRecordTemplateStorageUser storageUser = SysRecordTemplateStorage::newCommon(common, SysRecordTemplateType::User); SysRecordTemplateStorageCompany storageCompany = SysRecordTemplateStorage::newCommon(common, SysRecordTemplateType::Company); sysRecordTemplateSelect sysRecordTemplateSelect; container userTemplates; container companyTemplates; ; // Liste der Vorlagen userTemplates = storageUser.get(); info(strFmt("Anzahl Benutzervorlagen für Tabelle %1: %2", new sysdictTable(tableId).label(), conLen(userTemplates))); companyTemplates = storageCompany.get(); info(strFmt("Anzahl Unternehmensvorlagen für Tabelle %1: %2", new sysdictTable(tableId).label(), conLen(companyTemplates))); // Soll der aktive Benutzer nach Vorlagen gefragt werden? sysRecordTemplateSelect = SysRecordTemplateSelect::newTableId(tableId); sysRecordTemplateSelect.load(); info(strFmt("Datensatzvorlagen für die Tabelle %1 in Verwendung: %2", new sysdictTable(tableId).label(), enum2str(sysRecordTemplateSelect.parmPrompt()))); } |
|
|
|
|
|
|
Sollen in einem Formular nur bestimmte Felder zur Bearbeitung freigegeben sein, kann man die Eigenschaft allowEdit sämtlicher Felder der DataSource der Tabelle entsprechend umsetzen.
Einfacher geht’s mit folgendem Codebeispiel, welches in der init-Methode der DataSource eingebunden wurde und - im konkreten Fall in der Tabelle SalesLine - nur bei einem einzigen Feld die Bearbeitung erlaubt.
Im Gegensatz zu einem früher veröffentlichten Beitrag mit dem gleichen Thema werden bei diesem Codebeispiel auch Array-Felder korrekt berücksichtigt.
{
FormDataObject fdo;
int f;
SysDictTable sysDictTable;
MapEnumerator fdoMapEnumerator;
;
sysDictTable = new SysDictTable(tablenum(SalesLine));
for(f=1;f<=sysDictTable.fieldCnt();f++)
{
fdoMapEnumerator = new MapEnumerator(formDataSourceArrayFieldExtObjects(salesLine_ds, sysDictTable.fieldCnt2Id(f)));
while (fdoMapEnumerator.moveNext())
{
fdo = fdoMapEnumerator.currentValue();
if(fdo)
{
fdo.allowEdit(false);
}
}
}
fdo = salesLine_ds.object(fieldnum(SalesLine, QtyOrdered));
fdo.allowEdit(true);
}
Getestet in Dynamics AX 2009