viernes, 20 de octubre de 2017

D365 - DEBUG IN D365FO



  • Start Visual Studio (Run as administrator).
  • From the toolbar: go to ‘Debug’/ ‘Attach to process...’




  • Mark ‘Show processes from all users’  In the ‘Attach to process’ screen, and then select
     ‘w3wp.exe’ process


D365 - EVENT HANDLER TABLE WITH ARGS


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
 class CustInvoiceJour_LedgerExtension_TableHandler
{
    
    [PostHandlerFor(tableStr(CustInvoiceJour), tableMethodStr(CustInvoiceJour, initFromCustInvoiceTable))]
    public static void CustInvoiceJour_Post_initFromCustInvoiceTable(XppPrePostArgs args)
    {
        CustInvoiceJour     custInvoiceJour     = args.getThis() as CustInvoiceJour;
        CustInvoiceTable    custInvoiceTable    = args.getArg('_custInvoiceTable') as CustInvoiceTable ;

        custInvoiceJour.Factoring = custInvoiceTable.Factoring;
    }

}

D365 - LOOKUP ON DIALOG

In the ‘DIALOG’ method, we include a new field of the desired type on which we will do the lookup and we override its lookup method as follows:


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
public Object dialog()
{
   DialogRunbase   dialog = super();

  
   dlgOperationalPoint = dialog.addFieldValue(extendedTypeStr(PhysicalOperationalPoint),operationalPoint);
   dlgOperationalPoint.registerOverrideMethod(methodStr(FormStringControl, lookup), methodStr(MyUIBuilderClass, OperationalPointLookup), this);
        
   return dialog;
}


In a new class or an existing class, we create a new method that references the Lookup and performs the necessary search:


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
 private void OperationalPointLookup(FormControl _formControl)
 {
        
    SysTableLookup sysTableLookup = SysTableLookup::newParameters(tableNum(table), _formControl);
       
    Query query = new Query();
    QueryBuildDataSource queryBuildDataSource = query.addDataSource(tableNum(table));


    queryBuildDataSource.addRange(fieldNum(table, fieldNum)).value(this.parmFieldValue());
    queryBuildDataSource.addRange(fieldNum(table, VendAccount)).value(this.parmVendAccount());

    queryBuildDataSource.addOrderByField(fieldNum(table, PhysicalOperationalPoint));

    queryBuildDataSource.orderMode(OrderMode::GroupBy);

    sysTableLookup.addLookupfield(fieldNum(table, PhysicalOperationalPoint));

    sysTableLookup.parmQuery(query);
    sysTableLookup.performFormLookup();
 }

miércoles, 18 de octubre de 2017

D365 -DATA EVENTHANDLER ON TABLE VALIDATIONS


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
class FactoringManagement_LedgerExtension_TableHander
{
    [DataEventHandler(tableStr(FactoringManagement), DataEventType::ValidatedField)]
    public static void FactoringManagement_onValidatedField(Common sender, DataEventArgs e)
    {
        ValidateFieldEventArgs   validateFieldEventArgs   = e as ValidateFieldEventArgs;
        FactoringManagement      factoringManagement      = sender as FactoringManagement;
 
        boolean result; 
       
        switch (validateFieldEventArgs.parmFieldId())
        {
            case fieldNum(FactoringManagement, PercentMax) :

                if (pwFactoringManagement.PercentMax > 100)
                {
                    result = validateFieldEventArgs.parmValidateResult();
                    result = checkFailed(strfmt("Factoring percentage cannot be greater than 100"));                    
                    validateFieldEventArgs.parmValidateResult(result);
                }
            
             break;
        }
       
    }

}

D365 -CHANGE CURRENCY


1
CurrencyExchangeHelper::curAmount2CurAmount(Amount, CompanyInfoHelper::standardCurrency(),  CurrencyCodeDestiny, SystemDateGet());