AX2012是自帶生成QR二維碼的類,能夠很方便的用在SSRS報表中,下面演示如何在RDP的報表中使用二維碼,首先從定義臨時表開始:express
字段URL是要用於二維碼的字符串,QrCode是container類型,保存最終生成的二維碼圖形二進制數據。ide
DP類:ui
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:url
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,最後插入到臨時表中。spa
建立SSRS報表,使用這個RDP做爲dataset,圖片在precision design或者auto desgin上均可以使用,好比下面的auto design:.net
設置圖片的source爲Database,相應的MIME Type,expression則是dataset的二維碼數據字段。code
最後的預覽效果:orm
拿出你的手機掃掃看吧。blog