/// <summary> /// The <c>VKCustMarketingClearDataContract</c> contract for the job to clear customer marketing information. /// </summary> [DataContractAttribute] class VKCustMarketingClearDataContract { str encodedQuery; [DataMemberAttribute, AifQueryTypeAttribute('_encodedQuery', queryStr(VKCustMarketingQuery))] public str parmQuery(str _encodedQuery = encodedQuery) { encodedQuery = _encodedQuery; return encodedQuery; } }
[ DataContractAttribute, SysOperationContractProcessingAttribute(classStr(VKCustMarketingClearUIBuilder)) ]If validation is required, then the data contract should implement SysOperationValidatable
class VKCustMarketingClearDataContract implements SysOperationValidatable
/// <summary> /// Determines whether the parameters are valid. /// </summary> /// <returns> /// true when the parameters are valid; otherwise, false. /// </returns> public boolean validate() { boolean isValid = true; if (!dateFrom) { isValid = checkFailed(strFmt("@SYS84753", "@SYS180311")); } if (!dateTo) { isValid = checkFailed(strFmt("@SYS84753", "@SYS180217")); } if (dateFrom > dateTo) { isValid = checkFailed(strFmt("@SYS300457", date2StrUsr(dateFrom, DateFlags::FormatAll), date2StrUsr(dateTo, DateFlags::FormatAll))); } return isValid; }parm method attributes, you can review all of them starting from SysOperation*
SysOperationLabel("@VK:Labelid") SysOperationLabel(literalStr("Hardcoded label")) SysOperationHelpText("@VK:Labelid") SysOperationDisplayOrder('1') SysOperationControlVisibility(false)
/// <summary> /// The <c>VKCustMarketingClearController</c> controller for the job to clear customer marketing information. /// </summary> class VKCustMarketingClearController extends SysOperationServiceController { public ClassDescription caption() { ClassDescription ret; ret = "@VK:ClearUnregisteredEmailAddresses"; return ret; } public LabelType parmDialogCaption(LabelType _dialogCaption = "") { LabelType caption; caption = "@VK:ClearUnregisteredEmailAddresses"; return caption; } public static VKCustMarketingClearController construct() { return new VKCustMarketingClearController(); } public void getFromDialog() { //FormComboBoxControl mainAccountControl; //DialogForm theDialogForm; VKCustMarketingClearDataContract contract; //theDialogForm = this.dialog().dialogForm(); super(); //mainAccountControl = theDialogForm.runControl(#MainAccount); contract = this.getDataContractObject(classStr(VKCustMarketingClearDataContract)); if (contract) { // Set the values in data contract //contract.parmMainAccount(mainAccountControl.text()); } } public static void main(Args args) { VKCustMarketingClearController controller; identifierName className; identifierName methodName; SysOperationExecutionMode executionMode; [className, methodName, executionMode] = SysOperationServiceController::parseServiceInfo(args); controller = new VKCustMarketingClearController(className, methodName, executionMode); if (controller.prompt()) { controller.run(); } } }
/// <summary> /// The <c>VKCustMarketingClearService</c> the job to clear customer marketing information. /// </summary> class VKCustMarketingClearService { /// <summary> /// Clears unregistered customer email addresses /// </summary> /// <param name="_contract"> /// Job contract, contains query of records, which should be deleted /// </param> public void clearCustMarketing(VKCustMarketingClearDataContract _contract) { Query q = new Query(SysOperationHelper::base64Decode(_contract.parmQuery())); QueryRun qr= new QueryRun(q); VKCustMarketing custMarketing; int recordsDeleted; ttsbegin; while (qr.next()) { custMarketing = qr.get(tableNum(VKCustMarketing)); custMarketing.selectForUpdate(true); custMarketing.delete(); recordsDeleted++; } info(strfmt("@VK:NonRegCustRecordsDeleted", recordsDeleted)); ttscommit; } }
class VKCustMarketingClearUIBuilder extends SysOperationAutomaticUIBuilder { public void postBuild() { super(); DialogField dlgFieldInterfaceId; dlgFieldInterfaceId = this.bindInfo().getDialogField(this.dataContractObject(), methodStr(VKCustMarketingClearDataContract, parmInterfaceId)); // make field appear as mandatory dlgFieldInterfaceId.fieldControl().mandatory(true); // overwrite lookup method dlgFieldInterfaceId.registerOverrideMethod(methodStr(FormStringControl, lookup), methodStr(VKCustMarketingClearUIBuilder, interfaceIdLookup), this); DialogField dlgFieldRetentionDays; dlgFieldRetentionDays = this.bindInfo().getDialogField(this.dataContractObject(), methodStr(VKCustMarketingClearDataContract, parmRetentionDays)); dlgFieldRetentionDays.fieldControl().mandatory(true); } public void interfaceIdLookup(FormControl _formControl) { //VKInterfaceSetup::lookupInterfaceId(_formControl); // Better implement lookup as a table method and then re-use from all places Query query = new Query(); QueryBuildDataSource queryBuildDataSource = query.addDataSource(tableNum(VKInterfaceSetup)); SysTableLookup sysTableLookup = SysTableLookup::newParameters(tableNum(VKInterfaceSetup), _formControl); sysTableLookup.addLookupField(fieldNum(VKInterfaceSetup, InterfaceId), true); sysTableLookup.addLookupField(fieldNum(VKInterfaceSetup, InterfaceDescription)); sysTableLookup.addLookupField(fieldNum(VKInterfaceSetup, InterfaceDirection)); sysTableLookup.parmQuery(query); sysTableLookup.performFormLookup(); } }
DaxOnline.org is free platform that allows you to quickly store and reuse snippets, notes, articles related to Dynamics AX.
Authors are allowed to set their own AdSense units and "buy me a coffee" link.
Join us.