SysOperation-Framework: Datensätze einer temporären Tabelle übergeben

Im folgenden Szenario sollen an ein SysOperation-Konstrukt alle Datensätze einer temporären Tabelle übergeben werden.

Dafür brauchen wir:

  • Im DataContract eine parm-Methode, die einen Container aufnimmt
  • Im Controller eine Logik, welche die Datensätze einer aufrufenden Datenquelle iteriert und in einen Container packt, und diesen über die obige Methode an das Service übergibt
  • In der Service-Klasse Logik, welche den übergebenen Container auspackt und verarbeitet

 

Controller

class 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.  Hier übergeben wird die aufrufende Datenquelle über den DataContract an die Service-Klasse.

public static void main(Args _args)
{
    TutorialSysOperationController controller;
    SysOperationStartResult sysOperationStartResult;
    TutorialSysOperationDataContract dataContract;
    Set recordSet;
    TmpInventTable tmpInventTable;

    controller = new TutorialSysOperationController();
    controller.parmArgs(_args);

    controller.parmExecutionMode(SysOperationExecutionMode::Synchronous);

    // Get calling datasource
    if(_args.record() && _args.dataset() == tableNum(TmpInventTable))
    {
        tmpInventTable = _args.record();

        recordSet = new Set(Types::Record);
        while select tmpInventTable
        {
            recordSet.add(tmpInventTable);
        }
    }

    // Put records from calling datasource into dataContract
    dataContract = controller.getDataContractObject();
    if(dataContract is TutorialSysOperationDataContract)
    {
        dataContract.parmRecordCon(recordSet.pack());
    }

    sysOperationStartResult =
    controller.startOperation();

}

 

DataContract

[DataContractAttribute]
public class TutorialSysOperationDataContract
{
    container recordCon;
}

 

[DataMemberAttribute, SysOperationControlVisibilityAttribute(false)]
public container parmRecordCon(container _recordCon = recordCon)
{
    recordCon = _recordCon;

    return recordCon;
}

Service

class 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)
{    
    Set recordSet;
    SetEnumerator se;
    Common record;
    TmpInventTable tmpInventTable;

    // Process records
    if(conLen(_dataContract.parmRecordCon()) > 0)
    {
        recordSet = Set::create(_dataContract.parmRecordCon());
        se = recordSet.getEnumerator();
        while(se.moveNext())
        {
            record = se.current();

            switch(record.TableId)
            {
                case tableNum(TmpInventTable):    
                    tmpInventTable = record;
                    info(strFmt("%1 %2", tmpInventTable.ItemId, tmpInventTable.ItemName));
                    break;
                default:                    
                    info(strFmt("%1", record.RecId));
            }
        }
    }
}
Dieser Beitrag bezieht sich auf die Version:
Dynamics AX 2012

Dinesh Mann 01.10.2020 14:20 | #1


 
 

 

 
 
 
Beiträge des aktuellen Monats
Dezember 2024
MoDiMiDoFrSaSo
 1
2345678
9101112131415
16171819202122
23242526272829
3031 
 
© 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