Show only month and year in lookup in ssrs report in d365 fo x++

 // Contract class 

[DataContractAttribute,  SysOperationContractProcessingAttribute(classStr(OrderStatusUi))]

class OrderStatusContract

{

    int     ORD_YEAR,ORD_MONTH;

    [DataMemberAttribute('ORD_YEAR'),SysOperationLabelAttribute("ORD_YEAR")]

    public int ParmORD_YEAR(int _ORD_YEAR = ORD_YEAR)

    {

        ORD_YEAR  =  _ORD_YEAR;

        return ORD_YEAR;

    }

    [DataMemberAttribute('ORD_MONTH'),SysOperationLabelAttribute("ORD_MONTH")]

    public int ParmorderMonth(int _ORD_MONTH = ORD_MONTH)

    {

        ORD_MONTH  =  _ORD_MONTH;

        return ORD_MONTH;

    }

}

//Create a temp table and add two fields month and year

and two methods for month and year

1. PopulateOrderYear()

2. PopulateOrderMonth()

public class OrderStatusYearMonthTmp extends common

{

    /// <summary>

    ///

    /// </summary>

    public static OrderStatusYearMonthTmp PopulateOrderYear()

    {

        OrderStatusYearMonthTmp    tempTable;

        SalesTable                      salestable;

        Set                             set;

        set    =       new Set(Types::Integer);

        while select CreatedDateTime 

            from salestable

            order by CreatedDateTime

            group by CreatedDateTime

        {

            if(!set.in(Year(DateTimeUtil::date(salestable.CreatedDateTime))))

            {

                tempTable.clear();

                tempTable.initValue();

                tempTable.OrderStatusYear =  Year(DateTimeUtil::date(salestable.CreatedDateTime));

                set.add(tempTable.OrderStatusYear);

                tempTable.insert();

            }

        }

        return tempTable;

    }

    public static OrderStatusYearMonthTmp PopulateOrderMonth()

    {

       OrderStatusYearMonthTmp    tempTable;

        SalesTable                      salestable;

        Set                             set;

        set     =       new Set(Types::Integer);

        while select CreatedDateTime 

            from salestable

            order by CreatedDateTime

            group by CreatedDateTime

        {

            if(!set.in(DateTimeUtil::month(salestable.CreatedDateTime)))

            {

                tempTable.clear();

                tempTable.initValue();

            tempTable.OrderMonth =  DateTimeUtil::month(salestable.CreatedDateTime);

                set.add(tempTable.OrderMonth);

                tempTable.insert();

            }

        }

        return tempTable;

    }

}

//UI builder class

class OrderStatusUi extends SrsReportDataContractUIBuilder

{

    OrderStatusContract     contract;

    DialogField                 ORD_YEAR;

    DialogField                 ORD_MONTH;

    public void build()

    {

        contract                =   this.dataContractObject();

        ORD_YEAR                =   this.addDialogField(methodStr(OrderStatusContract, ParmORD_YEAR), contract);

        ORD_MONTH               =   this.addDialogField(methodStr(OrderStatusContract, ParmorderMonth), contract);

    }

//Lookup method for Year only 

        public void lookupOrderYear(FormIntControl _control)

        {

            SysTableLookup    lookup;

            QueryBuildDataSource qbds;

            Query q = new Query();

            qbds = q.addDataSource(tableNum(OrderStatusYearMonthTmp));

        qbds.addSortField(fieldNum(OrderStatusYearMonthTmp, OrderStatusYear), SortOrder::Ascending);

            lookup = SysTableLookup::newParameters(tableNum(OrderStatusYearMonthTmp),

              _control,

              true);

        lookup.addLookupField(fieldnum(OrderStatusYearMonthTmp, OrderStatusYear), true);

            lookup.parmQuery(q);

        lookup.parmTmpBuffer(OrderStatusYearMonthTmp::PopulateOrderYear());

            lookup.performFormLookup();

        }

// Method for motnh only

    public void lookupORD_Month(FormIntControl _control)

    {

        SysTableLookup    lookup;

        QueryBuildDataSource qbds;

        Query q = new Query();

        qbds = q.addDataSource(tableNum(OrderStatusYearMonthTmp));

        qbds.addSortField(fieldNum(OrderStatusYearMonthTmp, OrderMonth), SortOrder::Ascending);

        lookup = SysTableLookup::newParameters(tableNum(OrderStatusYearMonthTmp),

              _control,

              true);

        lookup.addLookupField(fieldnum(OrderStatusYearMonthTmp, OrderMonth), true);

        lookup.parmQuery(q);

        lookup.parmTmpBuffer(OrderStatusYearMonthTmp::PopulateOrderMonth());

        lookup.performFormLookup();

    }

    public void postBuild()

    {

        super();

        ORD_YEAR                =   this.bindInfo().getDialogField(contract,methodStr(OrderStatusContract, ParmORD_YEAR )); 

        ORD_YEAR.registerOverrideMethod(methodStr(FormStringControl, lookup), methodStr(OrderStatusUi, lookupOrderYear), this);

        ORD_MONTH               =   this.bindInfo().getDialogField(contract,methodStr(OrderStatusContract, ParmorderMonth));

        ORD_MONTH.registerOverrideMethod(methodStr(FormStringControl, lookup), methodStr(OrderStatusUi, lookupORD_Month), this);

    }

}

Comments

Popular posts from this blog

Get Current Worker data in d365 fo x++

Table Level Event Handler in d365 fo x++