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
Post a Comment