Aufruf des SysOperation-Frameworks per Code

Wenn man eine Funktion die über das SysOperation-Framework abgebildet ist per Code aufrufen möchte, kann der folgende Job zeigen, wie man das machen kann.

static void runSysOperationThroughCode(Args _args)
{
    TutorialSysOperationServiceController controller;
    TutorialSysOperationDataContract dataContract;
    SysOperationStartResult sysOperationStartResult;
    
    controller = TutorialSysOperationServiceController::newFromArgs(new Args()); 

    dataContract = controller.getDataContractObject('_dataContract'); 

    controller.parmExecutionMode(SysOperationExecutionMode::Synchronous); 

    dataContract.parmFilenameSave(@"c:\temp\myFile.txt");
    dataContract.parmCustAccount('US-006');
       
    sysOperationStartResult =
    controller.startOperation();
}

Bei obigem Beispiel werden die Nutzungsdaten verwendet und die Einstellungen ausgelesen und danach auch geschrieben. D.h. wenn der gleiche Benutzer die Funktion "normal" über ein MenuItem aufruft, werden die oben eingetragenen Parameter des DataContracts verwendet.

Vermeiden lässt sich dies nur indem man dem Controller mitteilt, daß es die Nutzungsdaten nicht verwenden soll:

static void runSysOperationThroughCode(Args _args)
{
    TutorialSysOperationServiceController controller;
    TutorialSysOperationDataContract dataContract;
    SysOperationStartResult sysOperationStartResult;
    
    controller = TutorialSysOperationServiceController::newFromArgs(new Args());
    // Don't use SysLastValue (so no values will be retrieved and no one will be stored)
    controller.parmLoadFromSysLastValue(false); 

    dataContract = controller.getDataContractObject('_dataContract');
    dataContract.parmCustAccount('US-006'); 

    controller.parmExecutionMode(SysOperationExecutionMode::Synchronous);

    dataContract.parmFilenameSave(@"c:\temp\myFile.txt");
        
    sysOperationStartResult =
    controller.startOperation();
}

Möchte man bei einem solchen Aufruf verhindern, daß der Dialog aufgerufen wird, so kann man dies auch steuern. Allerdings ist es nun wichitg, explizit keine Nutzungsdaten zu verwenden, weil sonst der nächste Aufruf über den Client/über ein MenuItem auch ohne Dialog und mit den hier festgelegten Parametern starten würde!

static void runSysOperationThroughCodeWithoutDialog(Args _args)
{
    TutorialSysOperationServiceController controller;
    TutorialSysOperationDataContract dataContract;
    SysOperationStartResult sysOperationStartResult;
    
    controller = TutorialSysOperationServiceController::newFromArgs(new Args());
    // Don't use SysLastValue (so no values will be retrieved and no one will be stored)
    controller.parmLoadFromSysLastValue(false);

    dataContract = controller.getDataContractObject('_dataContract');
    
    controller.parmExecutionMode(SysOperationExecutionMode::Synchronous); 

    dataContract.parmFilenameSave(@"c:\temp\myFile.txt");
        
    // Don't show dialog here
    controller.parmShowDialog(false);
    
    sysOperationStartResult =
    controller.startOperation();
}
Dieser Beitrag bezieht sich auf die Version:
Dynamics AX 2012

Kommentar hinzufügen
 
 

 

 
 
 
Beiträge des aktuellen Monats
April 2024
MoDiMiDoFrSaSo
1234567
891011121314
15161718192021
22232425262728
2930 
 
© 2006-2024 Heinz Schweda | Impressum | Kontakt | English version | Mobile Version
Diese Webseite verwendet Cookies, um Benutzern einen besseren Service anzubieten. Wenn Sie weiterhin auf der Seite bleiben, stimmen Sie der Verwendung von Cookies zu.  Mehr dazu