Im folgenden Szenario sollen an ein SysOperation-Konstrukt alle Datensätze einer temporären Tabelle übergeben werden.
Dafür brauchen wir:
Im DataContract eine Zugriffsmethode (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.
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;
MultiSelectionHelper multiselectionHelper;
controller = new TutorialSysOperationController();
controller.parmArgs(_args);
controller.parmExecutionMode(SysOperationExecutionMode::Synchronous);
// Get marked records from calling form
if (_args && _args.caller() is FormRun)
{
recordSet = new Set(Types::Record);
multiselectionHelper = MultiSelectionHelper::createFromCaller(_args.caller());
tmpInventTable = multiselectionHelper.getFirst();
while (tmpInventTable)
{
recordSet.add(tmpInventTable);
tmpInventTable = multiselectionHelper.getNext();
}
}
// 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;
}
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
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
Im folgenden Szenario sollen an ein SysOperation-Konstrukt alle Datensätze einer temporären Tabelle übergeben werden.
Dafür brauchen wir:
Controller
In der new() verknüpfen wir den Controller mit der Service-Klasse.
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.
DataContract
Service
Die Methode runService() ist die eigentliche Service-Methode. Über das Attribute SysEntryPointAttribute steuern wir hier, daß keine weiteren Berechtigungsprüfungen notwendig sind.