Ref
http://dynamicsaxaptablog.blogspot.ae/2016/03/event-handlers-and-prepost-methods-ax7.html
https://devserra.wordpress.com/tag/ax7/
https://stoneridgesoftware.com/event-handler-methods-in-ax7/
i.e.
Set Default Value in Custom Check box
In Table Datasource Events --> right click on Init Value--> Copy Post Event Handlers
Create new Class and below code
Table Method Event Handler
class test_PurchTableEventHanlders
{
/// <summary>
///
/// </summary>
/// <param name="args"></param>
[PostHandlerFor(tableStr(PurchTable), tableMethodStr(PurchTable, initValue))]
public static void PurchTable_Post_initValue(XppPrePostArgs args)
{
PurchTable purchTable = args.getThis() as PurchTable;
purchTable.test_PrintNote=NoYes::Yes;
}
}
Form Event Handler - CustTableFormEventHandler
class CustTableFormEventHandler
{
[FormDataSourceEventHandler(formDataSourceStr(CustTable, CustTable), FormDataSourceEventType::Activated)]
public static void CustTable_OnActivated(FormDataSource sender, FormDataSourceEventArgs e)
{
CustTable custTable = sender.cursor();
FormDataSource custTable_ds = sender.formRun().dataSource("CustTable");
FormRun element = sender.formRun();
FormControl myNewButton = element.design(0).controlName("MyNewButton");
myNewButton.enabled(false);
}
}
Table Events Event Handler
/// <summary>
///
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
[DataEventHandler(tableStr(CustInvoiceTrans), DataEventType::Inserted)]
public static void CustInvoiceTrans_onInserted(Common sender, DataEventArgs e)
{
ValidateEventArgs event = e as ValidateEventArgs;
CustInvoiceTrans custInvoiceTrans=sender as CustInvoiceTrans;
SalesTable salesTable=SalesTable::find(custInvoiceTrans.salesid);
if(salesTable.SalesStatus==SalesStatus::Invoiced )
{
//code
}
}
Table Method's Post Event Handler (Table - SalesTable, method - updateBackStatus)
/// <summary>
///
/// </summary>
/// <param name="args"></param>
[PostHandlerFor(tableStr(SalesTable), tableMethodStr(SalesTable, updateBackStatus))]
public static void SalesTable_Post_updateBackStatus(XppPrePostArgs args)
{
SalesTable salesTable=args.getThis();
SalesTable salesTable=SalesTable::find(custInvoiceTrans.salesid);
if(salesTable.SalesStatus==SalesStatus::Invoiced )
{
//code
}
}
Form Control Event Handlers
https://stoneridgesoftware.com/event-handler-methods-in-ax7/
// <summary>
///
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
[FormControlEventHandler(formControlStr(SalesEditLines, OK), FormControlEventType::Clicked)]
public static void OK_OnClicked(FormControl sender, FormControlEventArgs e)
{
FormCommandButtonControl callerButton = sender as FormCommandButtonControl; //Retrieves the button that we're reacting to
FormRun form = callerButton.formRun(); //Gets the running SalesEditLines form
//Get the salesId that was selected in the SalesEditLines form
FormDataSource salesParmTable_ds = form.dataSource(formDataSourceStr(SalesEditLines, SalesParmTable)) as FormDataSource;
SalesParmTable salesParmTable = salesParmTable_ds.cursor();
SalesTable salesTable=salesParmTable.salesTable();
if(salesTable.SalesStatus==SalesStatus::Invoiced)
{
//code
}
}
OnModified Event for String Control in Sales Table Form
/// <summary>
///
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
[FormControlEventHandler(formControlStr(SalesTable, Reason), FormControlEventType::Modified)]
public static void Reason_OnModified(FormControl sender, FormControlEventArgs e)
{
//Retrieves the string control that we're reacting to
FormStringControl str_Reason = sender as FormStringControl ;
FormRun form = strReason.formRun();
OR
//Retrieves the string control that we're reacting to
// FormControl Reason = element.design(0).controlName("Reason");
//Get the salesId that was selected in the SalesEditLines form
FormDataSource salesLine_ds = form.dataSource(formDataSourceStr(SalesTable, SalesLine)) as FormDataSource;
SalesLine salesline = salesLine_ds.cursor();
// do your logic
}
Form Events Event Handler
Form SalesEditLines --> Events -->OnClosing
/// <summary>
///
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
[FormEventHandler(formStr(SalesEditLines), FormEventType::Closing)]
public static void SalesEditLines_OnClosing(xFormRun sender, FormEventArgs e)
{
//Retrieves the button that we're reacting to
FormDataSource salesParmTable_ds= sender.dataSource("SalesParmTable"); //Gets the running SalesEditLines form
//Get the salesId that was selected in the SalesEditLines form
SalesParmTable salesParmTable = salesParmTable_ds.cursor();
SalesTable salesTable=salesParmTable.salesTable();
SalesId salesid=salesTable.SalesId;
if(salesTable.SalesStatus==SalesStatus::Invoiced )
{
//Any Code
}
}
Enable and Disable Form Control in Form Init Method in Form Extension Class based on Purch Parameters
[ExtensionOf(formStr(PurchTable))]
public final class S_PurchTableForm_Extension
{
/// <summary>
///
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
[FormEventHandler(formStr(PurchTable), FormEventType::Initialized)]
public static void PurchTable_OnInitialized(xFormRun sender, FormEventArgs e)
{
FormRun element = sender;
FormControl S_SubPriceFieldsGrid = element.design(0).controlName("S_SubPriceFieldsGrid");
S_SubPriceFieldsGrid.visible(PurchParameters::find().S_PriceFields); //
}
}
Enable ReceiptDateRequested and ShippingDateRequested based on Sales Origin Id in Sales Header
If Sales Origin ID is EDI Then disable above both fields
Sales Table Form --> Events --> OnActivated
////</summary>
////<param name="sender"></param>
////<param name="e"></param>
[FormDataSourceEventHandler(formDataSourceStr(SalesTable, SalesTable), FormDataSourceEventType::Activated)]
public static void SalesTable_OnActivated(FormDataSource sender, FormDataSourceEventArgs e)
{
boolean allowEdit = true;
SalesTable SalesTable = sender.cursor();
FormDataSource salesTable_ds = sender.formRun().dataSource("SalesTable");
FormRun element = sender.formRun();
FormControl ReceiptDateRequested = element.design(0).controlName("Delivery_ReceiptDateRequested");
FormControl ShippingDateRequested = element.design(0).controlName("Delivery_ShippingDateRequested");
FormControl SalesOriginId = element.design(0).controlName("Administration_SalesOriginId");
if (SalesTable.SalesOriginId == "EDI")
allowEdit = false;
ShippingDateRequested.enabled(allowEdit);
ReceiptDateRequested.enabled(allowEdit);
SalesOriginId.enabled(allowEdit);
}
Enable and Disable based on Sales Id Field value modifications.
Sales Table Form --> Data Sources --> Sales Table --> SalesOriginId --> Events --> OnModified
////<summary>
////</summary>
////<param name="sender"></param>
////<param name="e"></param>
[FormDataFieldEventHandler(formDataFieldStr(SalesTable, SalesTable, SalesOriginId), FormDataFieldEventType::Modified)]
public static void SalesOriginId_OnModified(FormDataObject sender, FormDataFieldEventArgs e)
{
boolean allowEdit = true;
FormDataSource salesTable_ds = sender.dataSource();
SalesOriginId salesOriginId = sender.getValue(0);
if (salesOriginId == "EDI")
allowEdit = false;
salesTable_ds.object(fieldNum(SalesTable, ReceiptDateRequested)).allowEdit(allowEdit);
salesTable_ds.object(fieldNum(SalesTable, ShippingDateRequested)).allowEdit(allowEdit);
sender.allowEdit(allowEdit);
}
Reference
Post Event handler for Table CustInvoiceTrans and its method InitFromSalesLine
/// <summary>
///
/// </summary>
/// <param name="args"></param>
[PostHandlerFor(tableStr(CustInvoiceTrans), tableMethodStr(CustInvoiceTrans, initFromSalesLine))]
public static void CustInvoiceTrans_Post_initFromSalesLine(XppPrePostArgs args)
{
CustInvoiceTrans custInvoiceTrans = args.getThis();
SalesLine salesLine = args.getArg('salesLine');
SalesParmLine _salesParmLine= args.getArg('_salesParmLine');
// Qty Calculation while creating Invoice
custInvoiceTrans.Custommethodcalculate( _salesParmLine.DeliverNow );
}
Getting Custom field value from Warehouse to PO Header when creating New PO.
POST Event Handler for PurchTable OnModifiedField Event.
////<summary>
////</summary>
////<param name="sender"></param>
////<param name="e"></param>
[DataEventHandler(tableStr(PurchTable), DataEventType::ModifiedField)]
public static void PurchTable_onModifiedField(Common sender, DataEventArgs e)
{
ModifyFieldEventArgs event = e as DataEventArgs;
PurchTable purchTable = sender as PurchTable;
FieldId fieldid = event.parmFieldId();
switch(fieldid)
{
case fieldNum(PurchTable, InventLocationId):
purchTable.aaId = InventLocation::find(purchTable.InventLocationId).aacId;
break;
}
}
Cost Price Validation while posting stock journals.
[PostHandlerFor(tableStr(InventJournalTrans), tableMethodStr(InventJournalTrans, checkAmount))]
public static void InventJournalTrans_Post_checkAmount(XppPrePostArgs args)
{
boolean ret = args.getReturnValue();
InventJournalTrans inventJournalTrans = args.getThis() as InventJournalTrans;
if (InventJournalName::find(inventJournalTrans.Qty > 0 && inventJournalTrans.CostPrice == 0)
{
ret = checkFailed(strFmt("Cost Price is 0 for Line %1",inventJournalTrans.LineNum));
}
args.setReturnValue(ret);
}
Form Sales Update Remain --> CloseOK Post Button
[PostHandlerFor(formStr(SalesUpdateRemain), formMethodStr(SalesUpdateRemain, closeOk))]
public static void SalesUpdateRemain_Post_closeOk(XppPrePostArgs args)
{
FormRun element = args.getThis();
FormRun callerForm = element.args().caller();
FormDataSource formDataSource = element.ObjectSet();
SalesLine salesLine;
FormRealControl remainInventPhysical = element.design(0).controlName("RemainInventPhysical");
if (callerForm && element.args().caller().name() == formStr(SalesTable))
{
salesLine = callerForm.dataSource(2).cursor() as SalesLine;
//do your logic
}
}
Add new value for custom field in sales line via Sales Order Lines Data Entity (Pre Insert Entity )
[PreHandlerFor(tableStr(SalesOrderLineEntity), tableMethodStr(SalesOrderLineEntity, insertEntityDataSource))]
public static void SalesOrderLineEntity_Pre_insertEntityDataSource(XppPrePostArgs args)
{
DataEntityDataSourceRuntimeContext dataSourceCtx=args.getArgNum(2);
switch (dataSourceCtx.name())
{
case dataEntityDataSourceStr(SalesOrderLineEntity, SalesLine):
SalesLine salesLine = dataSourceCtx.getBuffer();
salesLine.R_RefrigerationType = InventTable::find(salesLine.ItemId).R_RefrigerationType;
break;
}
}
Validate Field
[PostHandlerFor(tableStr(VendTable), tableMethodStr(VendTable, validateField))]
public static void VendTable_Post_validateField(XppPrePostArgs _args)
{
VendTable vendTable = _args.getThis();
boolean returnValue = _args.getReturnValue();
_args.setReturnValue(vendTable.S_validateField(_args.getArg('p1')) && returnValue);
}
/// <param name="_fieldId">
/// Field identifier
/// </param>
/// <returns>
/// True if field validation is ok otherwise false
/// </returns>
public boolean S_validateField(FieldId _fieldId)
{
switch(_fieldId)
{
case fieldNum(VendTable, S_IsM):
if (!this.S_IsManufacturer)
{
return this.S_validateFieldM();
}
break;
}
return true;
}
public static void SalesOrderLineEntity_Pre_insertEntityDataSource(XppPrePostArgs args)
{
DataEntityDataSourceRuntimeContext dataSourceCtx=args.getArgNum(2);
switch (dataSourceCtx.name())
{
case dataEntityDataSourceStr(SalesOrderLineEntity, SalesLine):
SalesLine salesLine = dataSourceCtx.getBuffer();
salesLine.R_RefrigerationType = InventTable::find(salesLine.ItemId).R_RefrigerationType;
break;
}
}
Validate Field
[PostHandlerFor(tableStr(VendTable), tableMethodStr(VendTable, validateField))]
public static void VendTable_Post_validateField(XppPrePostArgs _args)
{
VendTable vendTable = _args.getThis();
boolean returnValue = _args.getReturnValue();
_args.setReturnValue(vendTable.S_validateField(_args.getArg('p1')) && returnValue);
}
/// <param name="_fieldId">
/// Field identifier
/// </param>
/// <returns>
/// True if field validation is ok otherwise false
/// </returns>
public boolean S_validateField(FieldId _fieldId)
{
switch(_fieldId)
{
case fieldNum(VendTable, S_IsM):
if (!this.S_IsManufacturer)
{
return this.S_validateFieldM();
}
break;
}
return true;
}
// external item check
private boolean S_validateFieldM()
{
boolean ret = true;
S_VendExternalItem vendExternalItem;
CustVendExternalItem custVendExternalItem;
select firstOnly vendExternalItem
where vendExternalItem.VendAccount == this.AccountNum;
if (vendExternalItem)
{
select custVendExternalItem where custVendExternalItem.RecId == vendExternalItem.RefRecId;
ret = checkFailed(strFmt("test", vendExternalItem.VendAccount, custVendExternalItem.ItemId));
}
return ret;
}
Pre Event Handler
[PreHandlerFor(tableStr(PurchLineHistory), tableMethodStr(PurchLineHistory, update))]
public static void PurchLineHistory_Pre_update(XppPrePostArgs args)
{
PurchLine _purchline;
PurchLineHistory _purchLineHistory= args.getThis();
//select _purchline where _purchline.InventRefId ==_purchLineHistory.InventRefId
// && _purchline.ItemId ==_purchLineHistory.ItemId ;
//_purchline =PurchLine::findInventTransId(_purchLineHistory.InventRefId);
_purchline=PurchLine::find(_purchLineHistory.PurchId,_purchLineHistory.LineNumber );
_purchLineHistory.PriceDiscTableRefRecId =_purchline.PriceDiscTableRefRecId;
}
FormDataSourceEventHandler
/// <summary>
///
/// </summary>
/// <param name="sender"></param>
///// <param name="e"></param>
[FormDataSourceEventHandler(formDataSourceStr(EcoResProductDetailsExtended, BUSInventTable), FormDataSourceEventType::Creating)]
public static void BUSInventTable_OnCreating(FormDataSource sender, FormDataSourceEventArgs e)
{
FormRun element1 = sender.formRun();
element1.numberSeqFormHandler().formMethodDataSourceCreatePre();
}
/// <summary>
///
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
[FormDataSourceEventHandler(formDataSourceStr(EcoResProductDetailsExtended, BUSInventTable), FormDataSourceEventType::Created)]
public static void BUSInventTable_OnCreated(FormDataSource sender, FormDataSourceEventArgs e)
{
FormRun element1 = sender.formRun();
element1.numberSeqFormHandler().formMethodDataSourceCreate();
}
/// <summary>
///
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
[FormDataSourceEventHandler(formDataSourceStr(EcoResProductDetailsExtended, BUSInventTable), FormDataSourceEventType::Deleting)]
public static void BUSInventTable_OnDeleting(FormDataSource sender, FormDataSourceEventArgs e)
{
FormRun element1 = sender.formRun();
element1.numberSeqFormHandler().formMethodDataSourceDelete();
}
/// <summary>
///
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
[FormDataSourceEventHandler(formDataSourceStr(EcoResProductDetailsExtended, BUSInventTable), FormDataSourceEventType::Written)]
public static void BUSInventTable_OnWritten(FormDataSource sender, FormDataSourceEventArgs e)
{
FormRun element1 = sender.formRun();
element1.numberSeqFormHandler().formMethodDataSourceWrite();
}
/// <summary>
///
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
[FormDataSourceEventHandler(formDataSourceStr(EcoResProductDetailsExtended, BUSInventTable), FormDataSourceEventType::ValidatingWrite)]
public static void BUSInventTable_OnValidatingWrite(FormDataSource sender, FormDataSourceEventArgs e)
{
FormRun element1 = sender.formRun();
// element1.numberSeqFormHandler().formMethodDataSourceWrite();
boolean ret = true;
ret = element1.numberSeqFormHandler().formMethodDataSourceValidateWrite();
}
Your blog is very interesting.
ReplyDeleteMicrosoft Dynamics AX Online Training
ReplyDeleteNice Post...Thanks for sharing such valuable information I am also impressed by the creativity of the writer. This is excellent information. It is amazing and wonderful to visit your site . “ know the difference between pre-click and post click ”
ReplyDeleteThank you for sharing wonderful information with us to get some idea about it.
Microsoft Dynamics AX Training
MS Dynamics AX Training
MS Dynamics Training in Hyderabad
Microsoft Dynamics AX Technical Training
Microsoft Dynamics AX Technical Training in Hyderabad
MS Dynamics Technical Online Training
MS Dynamics AX Technical Training in Hyderabad
MS Dynamics AX Online Training
D365 AX Online Training
VpapaPra-zo Curtis Bethea https://wakelet.com/wake/4IX9DpsPPDvrOFzG0rtgU
ReplyDeletescisoggata
I go to your blog from time to time and guidance it to the all out of individuals who needed to feature on happening their perception coming about to ease. The approach to forming is faultless and notwithstanding the substance material is finish score. appreciation for that knowledge you give the perusers!! Nord VPN Cracked
ReplyDeleteKaspersky License Key likewise protect your programs from sticked substance by eliminate them enduringly. Kaspersky Total Security 2019 Key
ReplyDeleteFunny Cousin Quotes · Your cousin is the brother God knew your mother could not handle. · The craziness of your family is best understood by your cousins.. Frequently, Happy Cousins Day 2022
ReplyDeleteSite de loja virtual do MyShopify usando enganosamente layout da Magalu. Magazine Luiza - Loja Online · Reclamar dessa empresa. Rio de Janeiro - RJ.Myshopify.Com General Store
ReplyDelete