SSRS report creation in AX through RDP
1. Create Contract class
[DataContractAttribute,
SysOperationContractProcessingAttribute(classstr(DH_EmplSettlmentUIBuilder))]
//SysOperationDataContractProcessingMode::CreateUIBuilderForRootContractOnly)]
class DH_EmplSettlementContract implements SysOperationValidatable
{
HRMBranchCode branchCode;
HRMEmploymentContractCode contractCode;
HcmPersonnelNumberId emplId;
}
[DataMemberAttribute("HcmPersonnelNumberId"),
//SysOperationControlVisibilityAttribute(false)
]
public HcmPersonnelNumberId parmEmplId(HcmPersonnelNumberId _emplId = emplId)
{
emplId = _emplId;
return emplId;
}
public boolean validate()
{
boolean ret;
ret = true;
if (!branchCode)
{
error("@GIP4972");
ret = false;
}
if (!contractCode)
{
error("@GIP4973");
ret = false;
}
if (!emplId)
{
error("@GIP4974");
ret = false;
}
return ret;
}
2. Create RDP class to write the logic
[ SRSReportQueryAttribute(queryStr(DH_HcmWorker)),
SRSReportParameterAttribute(classstr(DH_EmplSettlementContract))
]
public class DH_EmplSettlementDP extends SRSReportDataProviderBase
{
DH_TmpDetail TmpDetail;
HcmWorker hcmworker;
HcmPersonIdentificationNumber hcmPersonIdentification;
}
[SRSReportDataSetAttribute(tablestr(DH_TmpDetail))]
public DH_TmpDetail gettmpDetails()
{
select TmpDetail;
return TmpDetail;
}
[SysEntryPointAttribute(false)]
public void processReport()
{
DH_EmplSettlementContract dataContract;
HcmPersonnelNumberId empId;
HRMBranchCode branchCode;
HRMEmploymentContractCode contractCode;
RecId company;
CompanyImage companyImage;
Common record;
QueryBuildDataSource queryBuildDataSource;
QueryBuildDataSource queryBuildDataSourceLocal;
QueryBuildRange queryBuildRange;
QueryRun queryRun;
Query query;
query = this.parmQuery();
queryRun = new QueryRun(query);
dataContract = this.parmDataContract() as DH_EmplSettlementContract;
empId = dataContract.parmEmplId();
branchCode = dataContract.parmBranchCode();
contractCode = dataContract.parmContractCode();
queryBuildDataSource = queryRun.query().dataSourceTable(tablenum(HcmWorker));
queryBuildDataSourceLocal = queryBuildDataSource.addDataSource(tableNum(DirPerson));
queryBuildDataSourceLocal.addLink(fieldNum(HcmWorker, Person), fieldNum(DirPerson, RecId));
queryBuildRange = queryBuildDataSource.addRange(fieldnum(HcmWorker, PersonnelNumber));
queryBuildRange.value(empId);
queryBuildRange = queryBuildDataSourceLocal.findRange((fieldnum(DirPerson, Name)));
company = CompanyInfo::current();
record = CompanyInfo::findRecId(company);
companyImage = CompanyImage::findByRecord(record);
TmpDetail.Image = companyImage.Image;
while (queryRun.next())
{
hcmworker = queryRun.get(tableNum(HcmWorker));
hcmPersonIdentification = queryRun.get(tableNum(HcmPersonIdentificationNumber));
if (hcmPersonIdentification.IdentificationNumber !="")
{
this.insertTmpDetails();
}
}
}
Public void insertTmpDetails()
{
//Logic to insert record in the temporary table
}
3. Controller class if additional logic is to be written for execution of the report (or opening report from form)
class DH_EmplSettlementController extends SrsReportRunController
{
}
protected void prePromptModifyContract()
{
DH_EmplSettlementContract contract;
HRMMonthlyAttendance hrmMonthlyAttendance;
hrmMonthlyAttendance = this.parmArgs().record();
contract = this.parmReportContract().parmRdpContract() as
DH_EmplSettlementContract;
contract.parmEmplId(hrmMonthlyAttendance.EmpCode);
super();
}
public static void main(Args _args)
{
DH_EmplSettlementController controller = new DH_EmplSettlementController();
controller.parmArgs(_args);
controller.parmReportName(ssrsReportStr(DH_EmplSettlement, Report));
controller.parmShowDialog(false);
controller.startOperation();
}
[DataContractAttribute,
SysOperationContractProcessingAttribute(classstr(DH_EmplSettlmentUIBuilder))]
//SysOperationDataContractProcessingMode::CreateUIBuilderForRootContractOnly)]
class DH_EmplSettlementContract implements SysOperationValidatable
{
HRMBranchCode branchCode;
HRMEmploymentContractCode contractCode;
HcmPersonnelNumberId emplId;
}
[DataMemberAttribute("HcmPersonnelNumberId"),
//SysOperationControlVisibilityAttribute(false)
]
public HcmPersonnelNumberId parmEmplId(HcmPersonnelNumberId _emplId = emplId)
{
emplId = _emplId;
return emplId;
}
public boolean validate()
{
boolean ret;
ret = true;
if (!branchCode)
{
error("@GIP4972");
ret = false;
}
if (!contractCode)
{
error("@GIP4973");
ret = false;
}
if (!emplId)
{
error("@GIP4974");
ret = false;
}
return ret;
}
2. Create RDP class to write the logic
[ SRSReportQueryAttribute(queryStr(DH_HcmWorker)),
SRSReportParameterAttribute(classstr(DH_EmplSettlementContract))
]
public class DH_EmplSettlementDP extends SRSReportDataProviderBase
{
DH_TmpDetail TmpDetail;
HcmWorker hcmworker;
HcmPersonIdentificationNumber hcmPersonIdentification;
}
[SRSReportDataSetAttribute(tablestr(DH_TmpDetail))]
public DH_TmpDetail gettmpDetails()
{
select TmpDetail;
return TmpDetail;
}
[SysEntryPointAttribute(false)]
public void processReport()
{
DH_EmplSettlementContract dataContract;
HcmPersonnelNumberId empId;
HRMBranchCode branchCode;
HRMEmploymentContractCode contractCode;
RecId company;
CompanyImage companyImage;
Common record;
QueryBuildDataSource queryBuildDataSource;
QueryBuildDataSource queryBuildDataSourceLocal;
QueryBuildRange queryBuildRange;
QueryRun queryRun;
Query query;
query = this.parmQuery();
queryRun = new QueryRun(query);
dataContract = this.parmDataContract() as DH_EmplSettlementContract;
empId = dataContract.parmEmplId();
branchCode = dataContract.parmBranchCode();
contractCode = dataContract.parmContractCode();
queryBuildDataSource = queryRun.query().dataSourceTable(tablenum(HcmWorker));
queryBuildDataSourceLocal = queryBuildDataSource.addDataSource(tableNum(DirPerson));
queryBuildDataSourceLocal.addLink(fieldNum(HcmWorker, Person), fieldNum(DirPerson, RecId));
queryBuildRange = queryBuildDataSource.addRange(fieldnum(HcmWorker, PersonnelNumber));
queryBuildRange.value(empId);
queryBuildRange = queryBuildDataSourceLocal.findRange((fieldnum(DirPerson, Name)));
company = CompanyInfo::current();
record = CompanyInfo::findRecId(company);
companyImage = CompanyImage::findByRecord(record);
TmpDetail.Image = companyImage.Image;
while (queryRun.next())
{
hcmworker = queryRun.get(tableNum(HcmWorker));
hcmPersonIdentification = queryRun.get(tableNum(HcmPersonIdentificationNumber));
if (hcmPersonIdentification.IdentificationNumber !="")
{
this.insertTmpDetails();
}
}
}
Public void insertTmpDetails()
{
//Logic to insert record in the temporary table
}
3. Controller class if additional logic is to be written for execution of the report (or opening report from form)
class DH_EmplSettlementController extends SrsReportRunController
{
}
protected void prePromptModifyContract()
{
DH_EmplSettlementContract contract;
HRMMonthlyAttendance hrmMonthlyAttendance;
hrmMonthlyAttendance = this.parmArgs().record();
contract = this.parmReportContract().parmRdpContract() as
DH_EmplSettlementContract;
contract.parmEmplId(hrmMonthlyAttendance.EmpCode);
super();
}
public static void main(Args _args)
{
DH_EmplSettlementController controller = new DH_EmplSettlementController();
controller.parmArgs(_args);
controller.parmReportName(ssrsReportStr(DH_EmplSettlement, Report));
controller.parmShowDialog(false);
controller.startOperation();
}
Comments
Post a Comment