Dynamics AX Blog - Beiträge von 2017 - Seite 2
SysOperation-Framework: Einfaches Klassenkonstrukt mit DataproviderDer nachstehende Code stellt ein einfaches Klassenkonstrukt für das SysOperation-Framework dar. Datacontract[DataContractAttribute] public class TutorialSysOperationDataContract { CustAccount custAccount; }
[DataMemberAttribute] public CustAccount parmCustAccount(CustAccount _custAccount = custAccount) { custAccount = _custAccount; return custAccount; }
Serviceclass TutorialSysOperationService extends SysOperationServiceBase { } Die Methode runService() ist die eigentliche Service-Methode. Über das Attribute SysEntryPointAttribute steuern wir hier, daß keine weiteren Berechtigungsprüfungen notwendig sind. [SysEntryPointAttribute(false)] public void runService(TutorialSysOperationDataContract _dataContract) { info("Done"); } |
SysOperation-Framework: Einfaches KlassenkonstruktDer nachstehende Code stellt ein ganz einfaches Klassenkonstrukt für das SysOperation-Framework dar. Ganz ohne Dataprovider und UIBuilder. Serviceclass TutorialSysOperationService extends SysOperationServiceBase { } Die Methode runService() ist die eigentliche Service-Methode. Über das Attribute SysEntryPointAttribute steuern wir hier, daß keine weiteren Berechtigungsprüfungen notwendig sind. [SysEntryPointAttribute(false)] public void runService() { info("Done"); }
Controllerclass TutorialSysOperationController extends SysOperationServiceController { } In der new() verknüpfen wir den Controller mit der Service-Klasse. void new() { super(); this.parmClassName(classStr(TutorialSysOperationService)); this.parmMethodName(methodStr(TutorialSysOperationService, runService)); } Die main() ist der klassische Einstiegspunkt, wenn der Controller über ein MenuItem aufgerufen wird. public static void main(Args _args) { TutorialSysOperationController controller; controller = new TutorialSysOperationController(); controller.parmArgs(_args); controller.parmExecutionMode(SysOperationExecutionMode::Synchronous); controller.startOperation(); } |
Shared Project per Code erstellen, Objekte hinzufügen und dabei Gruppen je Objekttyp erzeugenMit Hilfe des hier gezeigten Jobs kann man per Code ein Shared Project erstellen, Objekte hinzufügen und diese dabei in Gruppen je Objekttyp einordnen lassen. static void AddNodeToSharedProject(Args _args) { projectNode projectNode; TreeNode treeNode; ProjectName projectName = "MyProject"; #AOT #AOTExport void addTreeNodeToProjectNode(treeNode _treeNode) { TmpIdRef tmpIdRef; tmpIdRef.clear(); tmpIdRef.Name = SysTreeNode::getPath(_treeNode); tmpIdRef.Mode = SysTreeNode::path2ApplObjectType(tmpIdRef.Name); tmpIdRef.useMode = UtilFileType::Application; tmpIdRef.insert(); SysProjectFilterRunBase::addProjectNodes(tmpIdRef, projectNode); } projectNode = infolog.projectRootNode(); projectNode = projectNode.AOTfindChild(#expProjectShared); projectNode = projectNode.AOTfindChild(projectName); // Create shared project if neccessary if( !projectNode) { projectNode = SysTreeNode::createProject(projectName, ProjectSharedPrivate::ProjShared); } // Add objects (and create groups) treenode = TreeNode::findNode(#TablesPath+#AOTRootPath+tableid2name(tablenum(AccountingDistribution))); addTreeNodeToProjectNode(treenode); treenode = TreeNode::findNode(#TablesPath+#AOTRootPath+tableid2name(tablenum(VendGroup))); addTreeNodeToProjectNode(treenode); treenode = TreeNode::findNode(#ClassesPath+#AOTRootPath+classStr(PriceDisc)); addTreeNodeToProjectNode(treenode); } Auf die gleiche Art & Weise kann man natürlich auch ein Private Project erstellen, einfach die Vorkommnisse von Shared durch Private ersetzen. Das erstellte Projekt sieht wie folgt aus: |
|
|
|
|
|
|
Im folgenden Szenario sollen an ein SysOperation-Konstrukt alle Datensätze einer temporären Tabelle übergeben werden.
Dafür brauchen wir:
Controller