[AX2012 R3]在SSRS報表中使用QR二維碼


AX2012是自帶生成QR二維碼的類,可以很方便的用在SSRS報表中,下面演示如何在RDP的報表中使用二維碼,首先從定義臨時表開始:

字段URL是要用於二維碼的字符串,QrCode是container類型,保存最終生成的二維碼圖形二進制數據。

DP類:

class TestQrCodeDp extends SRSReportDataProviderBase
{
    TestQrCodeTmp   qrCodeTmp;
}
[
    SRSReportDataSetAttribute(tableStr(TestQrCodeTmp))
]
public TestQrCodeTmp getQrCodeTmp()
{
    select qrCodeTmp;
    return qrCodeTmp;
}
public void processReport()
{
    container       imageContainer;
    str             url='http://www.cnblogs.com/duanshuiliu/';
    EFDocQRCode_BR  qrCode = new EFDocQRCode_BR();

    imageContainer = qrCode.generateQRCode(url);


    qrCodeTmp.clear();
    qrCodeTmp.URL=url;
    qrCodeTmp.QrCode=imageContainer;
    qrcodeTmp.insert();
}

這里使用類EFDocQRCode_BR來生成二維碼圖片並保存在container中,從后綴名看應該是巴西地區的feature,圖片默認為bmp格式。這個類是對.net的Microsoft.Dynamics.QRCode.Encoder類的封裝,AOT的C#工程QrCode包含了完整的代碼。

EFDocQRCode_BR內部調用的是Microsoft.Dynamics.QRCode.Encoder.GetTempFile(),它將二維碼圖片保存在臨時文件后,在AX中使用BinData讀取臨時文件內容到container,如果你不想使用這種臨時文件的方法,希望在內存中直接實現,可以如下直接使用.net的Encoder:

public void processReport()
{
    Microsoft.Dynamics.QRCode.Encoder   qrCode=new Microsoft.Dynamics.QRCode.Encoder();
    System.Drawing.Bitmap bitmap;
    container       imageContainer;
    str             url='http://www.cnblogs.com/duanshuiliu/';
    System.IO.MemoryStream memoryStream = new System.IO.MemoryStream();

    bitmap=qrCode.Encode(url);
    bitmap.Save(memoryStream, System.Drawing.Imaging.ImageFormat::get_Png());
    imageContainer=Binary::constructFromMemoryStream(memoryStream).getContainer();

    qrCodeTmp.clear();
    qrCodeTmp.URL=url;
    qrCodeTmp.QrCode=imageContainer;
    qrcodeTmp.insert();
}

生成的二維碼圖片被編碼為Png格式保存在container,最后插入到臨時表中。

創建SSRS報表,使用這個RDP作為dataset,圖片在precision design或者auto desgin上都可以使用,比如下面的auto design:

設置圖片的source為Database,相應的MIME Type,expression則是dataset的二維碼數據字段。

最后的預覽效果:

拿出你的手機掃掃看吧。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM