将报告导出到Pdf AX 2012 CU10

时间:2016-11-21 06:15:59

标签: axapta dynamics-ax-2012 x++

我需要修改采购订单表格,以便用户可以选择并将PO保存为目标文件夹中的PDF

![Purchase Order Form 我创建了一个新的Button,因此在用户选择数据并单击该按钮后,系统会创建一个PDF文件并将其保存到目标文件夹。

这是我的代码

public static void main(Args _args)
{
PurchTable                      purchTable,purchTable2, row;

PurchPurchaseOrderController    purchPurchaseOrderController  ;
PurchPurchaseOrderContract      purchPurchaseOrderContract;
SrsReportRunImpl                srsReportRun;
VendPurchOrderJour              vendPurchOrderJour;
FormDataSource                  purchTable_ds;

str                             PDFName;
int                             tot = 0;

Args                            args ;
ReportName                      reportName = "PurchPurchaseOrder.ReportPRI";
;

   if(_args.record().TableId == tableNum(PurchTable))
{
    purchTable2 = _args.record();
    purchTable_ds = purchTable2.dataSource();     
}

if (purchTable_ds.anyMarked())
{
    row   = purchTable_ds.getFirst( 1, false );
    info("a1"); 
    while(row)
    {           
        tot++;

        info(row.PurchId);

        args = new Args();

        args.record(row);

        select firstFast purchTable where purchTable.RecId == row.RecId ;

        select firstFast vendPurchOrderJour where vendPurchOrderJour.PurchId == purchTable.PurchId  ;

        PDFName = strFmt("C:\\SharePDF\\%1.pdf",strReplace(purchTable.PurchId,'/','_'));

        purchPurchaseOrderController = new PurchPurchaseOrderController();
        purchPurchaseOrderController.parmReportName(ReportName);

        purchPurchaseOrderContract = purchPurchaseOrderController.parmReportContract().parmRdpContract();

        purchPurchaseOrderContract.parmRecordId(vendPurchOrderJour.RecId);

        purchPurchaseOrderController.parmArgs(args);

        srsReportRun = purchPurchaseOrderController.parmReportRun() as SrsReportRunImpl;

        purchPurchaseOrderController.parmReportRun(srsReportRun);

        purchPurchaseOrderController.parmReportContract().parmReportExecutionInfo(new SrsPrintMgmtExecutionInfo());

        purchPurchaseOrderController.parmReportContract().parmPrintSettings().printMediumType(SRSPrintMediumType::File);
        purchPurchaseOrderController.parmReportContract().parmPrintSettings().overwriteFile(true);
        purchPurchaseOrderController.parmReportContract().parmPrintSettings().fileFormat(SRSReportFileFormat::PDF);
        purchPurchaseOrderController.parmReportContract().parmPrintSettings().fileName(PDFName);

        purchPurchaseOrderController.runReport();


        row = purchTable_ds.getNext();
    }
}

info(strFmt("%1",tot));

}

此代码正在运行并将创建一个pdf文件,但仅适用于最后一个PO。

有任何建议如何解决这个问题?感谢

2 个答案:

答案 0 :(得分:0)

您的错误出现在此行row = purchTable_ds.getFirst( 1, false );,您需要MultiSelectionHelper课程。

尝试使用以下代码:

public static void main(Args _args)
{
    PurchTable                      purchTable,purchTable2, row;

    PurchPurchaseOrderController    purchPurchaseOrderController  ;
    PurchPurchaseOrderContract      purchPurchaseOrderContract;
    SrsReportRunImpl                srsReportRun;
    VendPurchOrderJour              vendPurchOrderJour;
    FormDataSource                  purchTable_ds;

    str                             PDFName;
    int                             tot = 0;

    Args                            args ;
    ReportName                      reportName = "PurchPurchaseOrder.ReportPRI";

    //New
    PurchTable           _PurchTable;
    MultiSelectionHelper _helper = MultiSelectionHelper::construct();
    //New end
    ;

    //New
    _helper.parmDatasource(purchTable_ds);
    _PurchTable = _helper.getFirst();

    while(_PurchTable.RecId != 0){
            Purchtable = _PurchTable;
    //New end              
            tot++;

            //info(row.PurchId);

            //args = new Args();

            //args.record(row);

            //select firstFast purchTable where purchTable.RecId == row.RecId ;

            select firstFast vendPurchOrderJour where vendPurchOrderJour.PurchId == purchTable.PurchId  ;

            PDFName = strFmt("C:\\SharePDF\\%1.pdf",strReplace(purchTable.PurchId,'/','_'));

            purchPurchaseOrderController = new PurchPurchaseOrderController();
            purchPurchaseOrderController.parmReportName(ReportName);

            purchPurchaseOrderContract = purchPurchaseOrderController.parmReportContract().parmRdpContract();

            purchPurchaseOrderContract.parmRecordId(vendPurchOrderJour.RecId);

            purchPurchaseOrderController.parmArgs(args);

            srsReportRun = purchPurchaseOrderController.parmReportRun() as SrsReportRunImpl;

            purchPurchaseOrderController.parmReportRun(srsReportRun);

            purchPurchaseOrderController.parmReportContract().parmReportExecutionInfo(new SrsPrintMgmtExecutionInfo());

            purchPurchaseOrderController.parmReportContract().parmPrintSettings().printMediumType(SRSPrintMediumType::File);
            purchPurchaseOrderController.parmReportContract().parmPrintSettings().overwriteFile(true);
            purchPurchaseOrderController.parmReportContract().parmPrintSettings().fileFormat(SRSReportFileFormat::PDF);
            purchPurchaseOrderController.parmReportContract().parmPrintSettings().fileName(PDFName);

            purchPurchaseOrderController.runReport();

            //New
            _PurchTable = _helper.getNext();
            //New end
        }


    info(strFmt("%1",tot));

}

答案 1 :(得分:0)

这已经解决了。谢谢大家。

这是我的完整代码

public static void main(Args _args)
{
PurchTable                      purchTable,purchTable2, row;
PurchPurchaseOrderContract      purchPurchaseOrderContract;

VendPurchOrderJour              vendPurchOrderJour;
FormDataSource                  purchTable_ds;
SRSPrintDestinationSettings     settings;
SrsReportRunController          controller ;

str                             folderPath;
dialog                          d;

DialogField                     dialogFilename;

str                             PDFName, FilePath;
int                             tot = 0;

Args                            args;
ReportName                      reportName = "PurchPurchaseOrder.ReportPRI";

PurchTable                      _PurchTable;
MultiSelectionHelper            _helper = MultiSelectionHelper::construct();
;


d = new dialog();
d.caption("select a folder");
dialogFilename = d.addField(extendedTypeStr(FilePath));//add a field where you select your file in a specific path
d.run();

if(d.closedOk())
{
    folderPath = dialogFileName.value();//return path file value

     if(folderPath == '')
    {
        folderPath = 'C:\\SharePdf';
    }


   if(_args.record().TableId == tableNum(PurchTable))
   {
        purchTable2 = _args.record();
        purchTable_ds = purchTable2.dataSource();
   }


if (purchTable_ds.anyMarked())
{
    row   = purchTable_ds.getFirst( 1, false );

    while(row)
    {
        tot++;

        args = new Args();

        select firstFast purchTable where purchTable.RecId == row.RecId ;

        select firstFast vendPurchOrderJour where vendPurchOrderJour.PurchId == purchTable.PurchId  ;

        PDFName = strFmt("%2\\%1.pdf",strReplace(purchTable.PurchId,'/','_'), folderPath);

       controller = new SrsReportRunController();
       purchPurchaseOrderContract = new PurchPurchaseOrderContract();

       controller.parmReportName(ReportName);
       controller.parmExecutionMode(SysOperationExecutionMode::Synchronous);
       controller.parmShowDialog(false);

       purchPurchaseOrderContract.parmRecordId(vendPurchOrderJour.RecId);

       args.record(row);

       controller.parmReportContract().parmRdpContract(purchPurchaseOrderContract);
       controller.parmArgs(args);

       settings = controller.parmReportContract().parmPrintSettings();
       settings.printMediumType(SRSPrintMediumType::File);
       settings.fileFormat(SRSReportFileFormat::PDF);
       settings.overwriteFile(true);
       settings.fileName(PDFName);

       controller.startOperation();

       row = purchTable_ds.getNext();
    }

}

info(strFmt("%1 Total",tot));

}

}