Form Extensions in d365fo with examples

// Form Extension 

[ExtensionOf(formstr(PurchPrepayTable))]

final class BPPurchPrepayTableForm_Extension

{

    public void init()

    {

        FormRun fr = this ;

        boolean invoiceExists;

        boolean isFromContract;

        BPProjContractTable contractTable;

        if (fr.args().dataset() == tableNum(BPProjContractTable))

        {  }

 next init();


        if(isFromContract)

        {

            FormDataSource fds  = fr.dataSource();

       }

}


// Form datasource field extension

[ExtensionOf(formDataFieldStr(ProjWorkBreakdownStructureV2,PSAActivityEstimates, BPProcurementCategory))]

final class BPProjWorkBreakdownStrucktureFDSProcuField_Extension

{

  public Common resolveReference(FormReferenceControl _formReferenceControl)

    {


 FormDataObject formDataObject = any2Object(this) as FormDataObject;

        FormDataSource formDataSource = formDataObject.datasource();

        BudgetPlanLineActiveView  budgetPlanLineActiveView = formDataSource.cursor();

        FormRun fr = formDataSource.formRun();

        BudgetPlanActiveView activeView =  fr.parmActiveView();

        

        Common common = EcoResCategory::resolveCategoryHierarchyRole(

                    _formReferenceControl,

                    EcoResCategoryNamedHierarchyRole::Procurement);


        next resolveReference(  _formReferenceControl);


        return common;

    }

}

// Form Datasource Extension

[extensionof(formDataSourceStr(VendInvoiceJournal,VendInvoiceJour))]

final class BPVendInvoiceJournalFormDS_Extension

{

    public void init()

    {

        QueryBuildDataSource qbdsLink;

        BPInvoiceProposalTable proposalTable;

        next init();

        if (element.args().dataset() == tableNum(BPInvoiceProposalTable)) // Original document

        {

            // Only add a dynalink if the RecId is specified (It will not be when jumping from a report which only specifies the InvoiceId)

            if (element.args().record() && element.args().record().RecId)

            {

                proposalTable =  element.args().record();


                qbdsLink = this.query().dataSourceTable(tableNum(VendInvoiceJour));

                qbdsLink.addRange(fieldNum(VendInvoiceJour,BPInvoiceProposald)).value(SysQuery::value(proposalTable.BPInvoiceProposald));

            }

               

        

        }

    }


}


//Formdatasource(fds new) method access by using object(new custom method especially)



 Object fds = element.BudgetTransactionLine_Ds;

 if(formDataSourceHasMethod(element.BudgetTransactionLine_Ds, identifierStr("editAccountStructure")))
 {

     fds.editAccountStructure(true,lineLoc,DimensionHierarchy::find(dimHierarchy).Name);
 }


Form datasource field lookup


[ExtensionOf(formstr(CustTable))]

public final class CustTableForm_EDF_Extension

{

    public void init()

    {

        next init();


        CustTable_ds.object(fieldNum(CustTable, SIG_ReportFormatNum)).registerOverrideMethod(methodStr(FormDataObject, lookup), formMethodStr(CustTable, sigReportFormatNumCustomLookup));


        CustTable_ds.object(fieldNum(CustTable, SIGReportFixationFormatNum)).registerOverrideMethod(methodStr(FormDataObject, lookup), formMethodStr(CustTable, sigReportFixationFormatNumCustomLookup));


    }


 public void sigReportFixationFormatNumCustomLookup(FormControl _formControl, str _filterStr)

    {

        SysTableLookup        sysTableLookup = SysTableLookup::newParameters(tablenum(SIGContractFixationReportFormat),_formControl,true);

        Query                 query;

        QueryBuildDataSource  queryBuildDataSource;


        sysTableLookup.addLookupfield(fieldnum(SIGContractFixationReportFormat,ReportFormatNum),true);

        sysTableLookup.addLookupfield(fieldnum(SIGContractFixationReportFormat,ReportFormat));

        sysTableLookup.addLookupfield(fieldnum(SIGContractFixationReportFormat,ContractType));

        sysTableLookup.addLookupfield(fieldnum(SIGContractFixationReportFormat,IsInternational));

        sysTableLookup.addLookupfield(fieldnum(SIGContractFixationReportFormat,LegalEntity));


        query                 = new Query();

        queryBuildDataSource  = query.addDataSource(tablenum(SIGContractFixationReportFormat));


        queryBuildDataSource.addRange(fieldnum(SIGContractFixationReportFormat,ContractType)).value(strFmt("%1", EDF_ContractType::Sales));

        sysTableLookup.parmQuery(query);

        sysTableLookup.parmUseLookupValue(true);


        sysTableLookup.performFormLookup();

    }

}






Comments

Popular posts from this blog

Ledger dimensions and financial Dimensions X++

Logistics address, postal address, address phone fax contact information

Consume odata/web api d365fo and parsing json content