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();
}

Comments

Popular posts from this blog

On clicked event of form button in D365 X++

Finding unit price of item from trade agreement through code AX X++

Create Sales Line Through Code AX X++ D365 Finance & Operations