The trouble is you think you have time. Your success depends on how you utilize your time.

Sample Contract Class With Validation FromDate ToDate Prameters of report X++ Finance and Operations

Sample Contract Class With Validation FromDate ToDate Prameters of report X++ Finance and Operations Dynamics AX

//Code published by bc_nav_expert

public class MZNUKCentralPoolReportContract
{
    TransDate FromDate, ToDate;
    ProjId project;
    Purpose purpose;
    Integer franchises;
  
    [DataMemberAttribute("FromDate"),
    sysoperationlabelAttribute(literalstr("From Date"))]
    public TransDate parmFromDate( TransDate _FromDate = FromDate)
    {
        FromDate = _FromDate;
        return FromDate;
    }
    [DataMemberAttribute("ToDate"),
    sysoperationlabelAttribute(literalstr("ToDate"))]
    public ToDate parmToDate( ToDate _ToDate = ToDate)
    {
        ToDate = _ToDate;
        return ToDate;
    }
    [DataMemberAttribute("Project"),
    sysoperationlabelAttribute(literalstr("Project"))]
    public ProjId parmProject( ProjId _project = project)
    {
        project = _project;
        return project;
    }
    [DataMemberAttribute("Purpose"),
    sysoperationlabelAttribute(literalstr("Purpose"))]
    public Purpose parmPurpose( Purpose _Purpose = Purpose)
    {
        Purpose = _Purpose;
        return Purpose;
    }
    [DataMemberAttribute("Franchises"),
    sysoperationlabelAttribute(literalstr("Franchises"))]
    public Integer parmfranchises( Integer _franchises = franchises)
    {
        franchises = _franchises;
        return franchises;
    }
    public boolean validate()
    {
        boolean isValid = true;
        if (!FromDate)
        {
            isValid = checkFailed(strFmt("@SYS84753", "@SYS180311"));
        }
        if (!ToDate)
        {
            isValid = checkFailed(strFmt("@SYS84753", "@SYS180217"));
        }
        if (FromDate > ToDate)
        {
            isValid = checkFailed(strFmt("@SYS300457", date2StrUsr(FromDate, DateFlags::FormatAll), date2StrUsr(ToDate, DateFlags::FormatAll)));
        }
        return isValid;
    }
}

Read how to make UIBuilder Class Click Here

Get Values of fields of Record from Form using FormDataSource EventHandler

How to create a form data source event handler and get the data of fields and also hide some fields.

First go to the form, here is how go to application explorer then type the name of the form then by open designer of that form using right click then go to the data source and find the event where you want to hide your fields.

www.Moznum.com   [FormDataSourceEventHandler(formDataSourceStr(InventJournalMovement, InventJournalTable), FormDataSourceEventType::Activated)]

I am using Activated event handler, for that just create a simple class and copy the event handler and paste it to the class.

Moznum.com OnActivated(FormDataSource sender, FormDataSourceEventArgs e)

then using following code you can get the record,  and hide the field using visible property.

    [FormDataSourceEventHandler(formDataSourceStr(InventJournalMovement, InventJournalTable), FormDataSourceEventType::Activated)]
    public static void InventJournalTable_OnActivated(FormDataSource sender, FormDataSourceEventArgs e)
    {
        InventJournalTable inventJournalTable  = sender.cursor();
        InventJournalName InventJournalName ;
        select * from InventJournalName where InventJournalName.JournalNameId == inventJournalTable.JournalNameId;

        FormStringControl room = sender.formRun().design(0).controlName("InventJournalTrans_MZNUKRoom");
        FormStringControl building = sender.formRun().design(0).controlName("InventJournalTrans_MZNUKBuilding");
        FormStringControl Phase = sender.formRun().design(0).controlName("InventJournalTrans_MZNUKPhase");
        if (InventJournalName.MZNUKAllowExtraFields)
        {
            room.visible(true);
            building.visible(true);
            Phase.visible(true);
        }
        else 
        {
            room.visible(false);
            building.visible(false);
            Phase.visible(false);
        }
    }



Read how to make UIBuilder Class Click Here

Read how to make DP class for Contact Click Here

DP Class for UI Builder ListEnumerator d365 x++ Finance and Operations 

FormControl MultiSelect Lookup x++ Finance and operations

 FormControl MultiSelect Lookup x++ Finance and operations

First make the following class, just copy and past it:

class MoznumSysLookupMultiSelectGrid extends SysLookupMultiSelectGrid
{
    #Characters
    public void setSelected()
    {
        dictfield dictField;
        Common currentDSRecord;
        FormDataSource formdatasource;
        callingControlId.text(SysOperationHelper::convertMultiSelectedValueString(selectedId));
        formdatasource = callingControlId.dataSourceObject();
        if(formdatasource && callingControlStr.dataField())
        {
            dictfield = new dictfield(formdatasource.table(),callingControlStr.dataField());
            currentDSRecord = formdatasource.cursor();
            currentDSRecord.(dictfield.id()) = currentDSRecord.(dictfield.id()) + SysOperationHelper::convertMultiSelectedValueString(selectedStr);
            callingControlStr.update();
        }
        else
        {
            callingControlStr.text(SysOperationHelper::convertMultiSelectedValueString(selectedStr));
        }
    }
    public static MoznumSysLookupMultiSelectGrid construct(FormControl _ctrlId,
    FormControl _ctrlStr)
    {
        MoznumSysLookupMultiSelectGrid lookupMS;
        lookupMS = new MoznumSysLookupMultiSelectGrid();
        lookupMS.parmCallingControlId(_ctrlId);
        lookupMS.parmCallingControlStr(_ctrlStr);
        return lookupMS;
    }
}

then go to the control of your form, then click on method and by clicking right click override onlookup. then paste the following code in the lookup.

 [Control("String")]
    class MZNUKCustomerGradeEntitlement_Entitlement
    {
        /// <summary>
        ///
        /// </summary>
        public void lookup()
        {
         //   super();
            MoznumSysLookupMultiSelectGrid multiSelectGrid = MoznumSysLookupMultiSelectGrid::construct(this,this);       
            container inventLocationContainer ;
            QueryBuildDataSource qbds;
            Query query;
      
            query = new query();
            qbds = query.addDataSource(tableNum(MZNTRGradeEntitlementTable));
            query.dataSourceTable(tableNum(MZNTRGradeEntitlementTable)).addSelectionField(fieldNum(MZNTRGradeEntitlementTable, Entitlement));
            query.dataSourceTable(tableNum(MZNTRGradeEntitlementTable)).addSelectionField(fieldNum(MZNTRGradeEntitlementTable, Grade));
            qbds.addRange(fieldNum(MZNTRGradeEntitlementTable, grade)).value(queryValue( MZNTRCustomerGradeEntitlement.grade));
            multiSelectGrid.parmQuery(query);
            multiSelectGrid.parmCallingControl(this);
            multiSelectGrid.run();      
        }
    }

Simple Lookup X++ Finance & Operation Dynamics AX

 Simple Lookup X++ Finance & Operation Dynamics AX

Query query = new Query();
QueryBuildDataSource queryBuildDataSource;
QueryBuildRange queryBuildRange;
SysTableLookup sysTableLookup = SysTableLookup::newParameters(tableNum(MZNUKGradeEntitlementTable), _formControl);
sysTableLookup.addLookupField(fieldNum(MZNUKGradeEntitlementTable, Entitlement));
sysTableLookup.addLookupField(fieldNum(MZNUKGradeEntitlementTable, Grade));
queryBuildDataSource = query.addDataSource(tableNum(MZNUKGradeEntitlementTable));
queryBuildRange = queryBuildDataSource.addRange(fieldNum(MZNUKGradeEntitlementTable,grade));
queryBuildRange.value(SysQuery::value(MZNUKCustomerGradeEntitlementLines.Grade));
queryBuildRange.status(RangeStatus::Locked);
sysTableLookup.parmQuery(query);
sysTableLookup.performFormLookup();

MuliSelect Lookup X++ Finance and Operations

 MuliSelect Lookup X++ Finance and Operations


container inventLocationContainer ;
QueryBuildDataSource qbds;      
Query query;
query = new query();
qbds = query.addDataSource(tableNum(MZNUKCATEGORYTABLE));       
query.dataSourceTable(tableNum(MZNUKCATEGORYTABLE)).addSelectionField(fieldNum(MZNUKCATEGORYTABLE, CategoryName));
query.dataSourceTable(tableNum(MZNUKCATEGORYTABLE)).addSelectionField(fieldNum(MZNUKCATEGORYTABLE, Description));
qbds.addRange(fieldNum(MZNUKCATEGORYTABLE, CategoryName)).value(queryValue('QA NEW ENAMEL HALL'));
qbds.addRange(fieldNum(MZNUKCATEGORYTABLE, CategoryName)).value(queryValue('QA PREMINUM HALL'));
qbds.addRange(fieldNum(MZNUKCATEGORYTABLE, CategoryName)).value(queryValue('QA NC HALL'));
qbds.addRange(fieldNum(MZNUKCATEGORYTABLE, CategoryName)).value(queryValue('QA ENAMEL HALL'));
QueryRun queryRun = new QueryRun(query);
SysLookupMultiSelectGrid::lookup(query,_control, _control, _control, inventLocationContainer, queryRun);

DP Class for UI Builder ListEnumerator d365 x++ Finance and Operations

 DP Class for UI Builder ListEnumerator d365 x++ Finance and Operations


[SRSReportQueryAttribute(querystr(_YourQuery)),
SRSReportParameterAttribute(classStr(YourContract))]
class _YourQueryInquiryDP extends SRSReportDataProviderBase
{
  _YourQueryTmp tempTable;
  ListEnumerator custlistiterator;
  [SRSReportDataSetAttribute(tableStr(_YourQueryTmp))]
  public _YourQueryTmp get_YourQueryTmp()
  {
    select * from tempTable;
    return tempTable;
  }
  private Query buildQuery( Query _query, List Categorylist, FromDate _fromDate,ToDate _toDate)
  {
    _query.dataSourceTable(tableNum(CaseDetailBase)).addRange(fieldNum(CaseDetailBase, ClosedDateTime)).value(queryRange(_fromDate, _toDate));
    custlistiterator = CategoryList.getEnumerator();
    while(custlistiterator.moveNext())
    {
      currentrec = custlistiterator.current();
      _query.dataSourceTable(tableNum(CaseDetailBase)).addRange(fieldNum(CaseDetailBase, YourField)).value(currentrec);
    }
    return _query;
  }
  private void insert()
  {
    FromDate       fromDate;
    ToDate         toDate;
    QueryRun       queryRun;
    List           CategoryList;
    
    YourContract contract = this.parmDataContract();
    if(contract)
    {
      fromDate = contract.parmFromDate();
      toDate   = contract.parmToDate();
      CategoryList = contract.parmCategoryName();
    }    
    queryRun = new QueryRun(this.buildQuery(this.parmQuery(),CategoryList, fromDate, toDate));
    while (queryRun.next())
    {
      caseDetailBase = queryRun.get(tableNum(CaseDetailBase));      
      tempTable.clear();
      tempTable.CompanyLogo = FormLetter::companyLogo();
      tempTable.Column1 = 'www.Moznum.com';
      tempTable.Column2 = 'www.Moznum.Blogspot.com';
      tempTable.insert();  
    }
  }
  [SysEntryPointAttribute(false)]
  public void processReport()
  {
    delete_from tempTable;
    this.insert();
  }
}

Simple UIBuilder Class x++ D365 Finance and Operations

 Simple UIBuilder Class x++ D365 Finance and Operations


class MZNUKUIBuilder extends SysOperationAutomaticUIBuilder

{

  DialogField                               custId, fromdate, toDate;

  MZNUK_Contract                            contract;

   

  // Code from Moznum.blogspot.com

  // Hire ERP consultants from Moznum.com


  public void build()

  {

    contract                = this.dataContractObject();

    custId                  = this.addDialogField(methodStr(MZNUK_Contract, parmCategoryName),contract);

    fromdate                = this.addDialogField(methodStr(MZNUK_Contract, parmFromDate),contract);

    todate                  = this.addDialogField(methodStr(MZNUK_Contract, parmToDate),contract);

  }


  public void getFromDialog()

  {

    contract               = this.dataContractObject();

    super();

  }


  public void initializeFields()

  {

    contract              = this.dataContractObject();

  }


  // Code from Moznum.blogspot.com

  // Hire ERP consultant from Moznum.com


  public void lookup(FormStringControl _control)

  {

    Query query            = new Query();

    QueryBuildDataSource   queryBuildDataSource;

    SysTableLookup         sysTableLookup;

    sysTableLookup         = SysTableLookup::newParameters(tableNum(CustTable), _control);

    queryBuildDataSource   = query.addDataSource(tableNum(CustTable));


    sysTableLookup.addLookupField(fieldNum(CustTable, AccountNum));

    sysTableLookup.addLookupField(fieldNum(CustTable, Party));

    sysTableLookup.addLookupMethod(tableMethodStr(CustTable, name));


    sysTableLookup.parmQuery(query);

    sysTableLookup.performFormLookup();

  }


  public void  postBuild()

  {

    super();

    contract               = this.dataContractObject();

    custId                 = this.bindInfo().getDialogField(contract, methodStr(MZNUK_Contract ,parmCategoryName));

    custId.registerOverrideMethod(methodStr(FormStringControl, lookup), methodStr(MZNUKUIBuilder, lookup ),this);

    if(custId)    

      custId.lookupButton(2);

    

  }


  public void postRun()

  {

   

  }

}