Contract Class :
/// <summary>
/// Data Contract class for CustomerTransactions SSRS report
/// </summary>
/// <remarks>
/// This is the Data Contract class for the CustomerTransactions SSRS Report.
/// </remarks>
[
DataContractAttribute,
SysOperationContractProcessingAttribute(classStr(DIPL_CustTransUIBuilder))
]
public class DIPL_CustTransContract implements SysOperationValidatable
{
TransDate fromDate;
TransDate toDate;
List custAccount;
}
--------------------------------------------------------------------------------------------------------------------
/// <summary>
/// Gets or sets the value of the datacontract parameter CustAccount.
/// </summary>
/// <param name="_custAccount">
/// The new value of the datacontract parameter CustAccount.
/// </param>
/// <returns>
/// The current value of datacontract parameter CustAccount
/// </returns>
[
DataMemberAttribute('CustAccount'),
AifCollectionTypeAttribute('CustAccount', Types::String),
SysOperationLabelAttribute(literalStr("CustAccount")),
SysOperationDisplayOrderAttribute('3')
]
public List parmCustAccount(List _custAccount = custAccount)
{
custAccount = _custAccount;
return custAccount;
}
--------------------------------------------------------------------------------------------------------------------------
/// <summary>
/// Gets or sets the value of the datacontract parameter FromDate.
/// </summary>
/// <param name="_fromDate">
/// The new value of the datacontract parameter FromDate; optional.
/// </param>
/// <returns>
/// The current value of datacontract parameter FromDate
/// </returns>
[
DataMemberAttribute('FromDate'),
SysOperationLabelAttribute(literalstr("@SYS4083")),
SysOperationHelpTextAttribute(literalstr("FromDate")),
SysOperationGroupMemberAttribute('Date'),
SysOperationDisplayOrderAttribute('1')
]
public TransDate parmFromDate(TransDate _fromDate = fromDate)
{
fromDate = _fromDate;
return fromDate;
}
------------------------------------------------------------------------------------------------------------------------
/// <summary>
/// Gets or sets the value of the datacontract parameter ToDate.
/// </summary>
/// <param name="_toDate">
/// The new value of the datacontract parameter ToDate; optional.
/// </param>
/// <returns>
/// The current value of datacontract parameter ToDate
/// </returns>
[
DataMemberAttribute('ToDate'),
SysOperationLabelAttribute(literalstr("@SYS8828")),
SysOperationHelpTextAttribute(literalstr("ToDate")),
SysOperationGroupMemberAttribute('Date'),
SysOperationDisplayOrderAttribute('2')
]
public TransDate parmToDate(TransDate _toDate = toDate)
{
toDate = _toDate;
return toDate;
}
-------------------------------------------------------------------------------------------------------------------------
/// <summary>
/// Validates the SSRS report parameters.
/// </summary>
/// <returns>
/// true if successful; otherwise, false.
/// </returns>
public boolean validate()
{
boolean ret = true;
if (!fromDate)
{
fromDate = systemdateget();
}
if (!toDate)
{
toDate = systemdateget();
}
if (toDate < fromDate)
{
ret = checkFailed("@SYS16982");
}
return ret;
}
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
UI Builder : Using it for Multiselect lookup
class DIPL_CustTransUIBuilder extends SysOperationAutomaticUIBuilder
{
DIPL_CustTransContract contract;
DialogField dlgCustAccount;
DialogField dialogFromdate;
DialogField dialogTodate;
SysLookupMultiSelectGrid sysMultiGridCustAccount;
SysLookupMultiSelectCtrl sysMultiLookupCustAccount;
container custAccountCon;
}
--------------------------------------------------------------------------------------------------------------------------
public void build()
{
contract = this.dataContractObject() as DIPL_CustTransContract;
dialogFromdate = this.addDialogField(methodStr(DIPL_CustTransContract, parmFromDate), contract);
dialogTodate = this.addDialogField(methodStr(DIPL_CustTransContract, parmToDate), contract);
}
--------------------------------------------------------------------------------------------------------------------------
private void CustAccountLookup(FormStringControl custAccountLookup)
{
sysMultiGridCustAccount = SysLookupMultiSelectGrid::construct(custAccountLookup, custAccountLookup);
sysMultiGridCustAccount.parmQuery(this.CustAccountQuery());
sysMultiGridCustAccount.run();
sysMultiGridCustAccount.setSelected();
}
--------------------------------------------------------------------------------------------------------------------------
private Query CustAccountQuery()
{
Query query;
QueryBuildDataSource queryBuildDataSource;
query = new Query();
queryBuildDataSource = query.addDataSource(tableNum(CustTable));
query.dataSourceTable(tablenum(CustTable)).addDataSource(tableNum(DirPartyTable));
query.dataSourceTable(tablenum(DirPartyTable)).joinMode(JoinMode::InnerJoin);
query.dataSourceTable(tablenum(DirPartyTable)).relations(true);
query.dataSourceTable(tablenum(DirPartyTable)).addSelectionField(fieldNum(DirPartyTable, Name));
queryBuildDataSource.addSelectionField(fieldNum(CustTable,AccountNum));
return query;
}
-------------------------------------------------------------------------------------------------------------------------
public void getFromDialog()
{
super();
custAccountCon = sysMultiLookupCustAccount.getSelectedFieldValues();
if (custAccountCon)
{
contract.parmCustAccount(con2List(custAccountCon));
}
}
--------------------------------------------------------------------------------------------------------------------------
public void postBuild()
{
super();
contract = this.dataContractObject() as DIPL_CustTransContract;
}
--------------------------------------------------------------------------------------------------------------------------
public void postRun()
{
dialog.dialogForm().formRun().controlMethodOverload(false);
dlgCustAccount = this.addDialogField(methodStr(DIPL_CustTransContract, parmCustAccount), contract);
dlgCustAccount.lookupButton(3);
dlgCustAccount = this.bindInfo().getDialogField(contract,methodStr(DIPL_CustTransContract, parmCustAccount));
sysMultiLookupCustAccount = SysLookupMultiSelectCtrl::constructWithQuery(this.dialog().formRun(), dlgCustAccount.control(), this.CustAccountQuery());
}
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
DP:
/// <summary>
/// The <c>DIPL_CustTransDP</c> class is the Report Data Provider class for the <c>CustTransaction</c> SSRS
/// report.
/// </summary>
[
SRSReportParameterAttribute(classstr(DIPL_CustTransContract))
]
class DIPL_CustTransDP extends SRSReportDataProviderBase //SrsReportDataProviderPreProcess
{
DIPLCustTransTmp diplCustTransTmp;
CustTable custTable;
DirPartyTable dirPartyTable;
CustTrans custTrans;
ProjTable projTable;
ProjInvoiceJour projInvoiceJour;
TaxTrans taxTrans;
FromDate fromDate;
ToDate toDate;
DimensionAttributeLevelValueView dimensionAttributeLevelValueView;
DimensionAttributeValueSetItemView dimensionAttributeValueSetItemView;
DimensionAttribute dimensionAttribute;
LedgerJournalTrans ledgerJournalTrans;
#define.FromDate('FromDate')
#define.ToDate('ToDate')
}
--------------------------------------------------------------------------------------------------------------------------
/// <summary>
/// Fetches the data from <c>DIPLCustTransTmp</c> temporary table.
/// </summary>
/// <returns>
/// The data from the <c>DIPLCustTransTmp</c> temporary table.
/// </returns>
[
SRSReportDataSetAttribute('DIPLCustTransTmp')
]
public DIPLCustTransTmp getDIPLCustTransTmp()
{
select diplCustTransTmp;
return diplCustTransTmp;
}
--------------------------------------------------------------------------------------------------------------------------
public ExchRate getExchRateFind(CurrencyCode _currencyCode, TransDate _transDate)
{
ExchangeRateHelper exchangeRateHelper;
CurrencyExchangeRate exchangeRate1;
CurrencyExchangeRate exchangeRate;
;
exchangeRateHelper = ExchangeRateHelper::newExchangeDate(Ledger::current(), _currencyCode, _transDate);
exchangeRate1 = exchangeRateHelper.getExchangeRate1();
exchangeRate = exchangeRateHelper.displayStoredExchangeRate(exchangeRate1);
return exchangeRate;
}
--------------------------------------------------------------------------------------------------------------------------
/// <summary>
/// Inserts data into the temporary table.
/// </summary>
private void insertIntoTempTable()
{
diplCustTransTmp.TransactionDate = custTrans.TransDate;
diplCustTransTmp.InvoiceDate = projInvoiceJour.InvoiceDate;
diplCustTransTmp.CustomerName = custTable::find(custTrans.AccountNum).name();
diplCustTransTmp.ProjectName = ProjTable::find(dimensionAttributeValueSetItemView.DisplayValue).Name;
diplCustTransTmp.Invoice = custTrans.Invoice;
diplCustTransTmp.CurrencyCode = custTrans.CurrencyCode;
diplCustTransTmp.ExchangeRate = this.getExchRateFind(custTrans.CurrencyCode,custTrans.TransDate);
diplCustTransTmp.GrossAmount = taxTrans.SourceBaseAmountCur;
diplCustTransTmp.TaxAmount = taxTrans.SourceTaxAmountCur;
diplCustTransTmp.TaxCode = taxTrans.TaxCode;
diplCustTransTmp.AmountInCur = custTrans.AmountCur;
diplCustTransTmp.AmountInINR = CustTrans.AmountMST;
diplCustTransTmp.Description = ledgerJournalTrans.Text;
diplCustTransTmp.Voucher = CustTrans.Voucher;
diplCustTransTmp.TaxValue = taxTrans.TaxValue;
diplCustTransTmp.insert();
}
--------------------------------------------------------------------------------------------------------------------------
/// <summary>
/// Processes the report business logic.
/// </summary>
[AifDocumentCreateAttribute, SysEntryPointAttribute(true)]
public void processReport()
{
ListEnumerator custAccountListIterator;
CustAccount custAccount;
List parmCustAccount;
List list = new List(Types::String);
DIPL_CustTransContract contract = this.parmDataContract() as DIPL_CustTransContract;
fromDate = contract.parmFromDate();
toDate = contract.parmToDate();
parmCustAccount = contract.parmCustAccount();
if (parmCustAccount != null)
{
custAccountListIterator = parmCustAccount.getEnumerator();
while (custAccountListIterator.moveNext())
{
custAccount = custAccountListIterator.current();
while select custTrans
where custTrans.AccountNum == custAccount
&& custTrans.TransDate >= fromDate
&& custTrans.TransDate <= toDate
outer join projInvoiceJour
where ProjInvoiceJour.LedgerVoucher == CustTrans.Voucher
outer join taxTrans
where TaxTrans.Voucher == ProjInvoiceJour.LedgerVoucher
{
select firstOnly RecId,Name from dimensionAttribute
where DimensionAttribute.Name == "@SYS105167";
select DimensionAttributeValueSet,DisplayValue,DimensionAttribute from dimensionAttributeValueSetItemView
where dimensionAttributeValueSetItemView.DimensionAttributeValueSet == custTrans.DefaultDimension
&& dimensionAttributeValueSetItemView.DimensionAttribute == dimensionAttribute.RecId;
select firstOnly Text from ledgerJournalTrans
where ledgerJournalTrans.Voucher == custTrans.Voucher;
this.insertIntoTempTable();
}
}
}
}
https://daxingwitheshant.blogspot.com/2018/06/ssrs-reports-using-dp-contract-ui.html