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
Mai 2024
MoDiMiDoFrSaSo
 12345
6789101112
13141516171819
20212223242526
2728293031 
 
© 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