Friends,
Today let us learn how to quickly display barcode(s) in SSRS report, AX 2012.
I will be using report data provider as a data source type. First , let us create a query by name SR_InventItemBarCode and drag and drop InventItemBarCode table as data source. Set the dynamic property on fields to “Yes”
Create a new DP class and methods as shown below:
[
SRSReportQueryAttribute(queryStr(SR_InventItemBarCode))
]
class SR_InventItemBarCodeDP extends SRSReportDataProviderBase
{
SR_TmpInventItemBarCode sr_TmpInventItemBarCode;
BarcodeSetupId barcodeSetupId;
BarcodeSetup barcodeSetup;
Barcode barcode;
FontName barcodeFontName;
FontSize barcodeFontSize;
}
/// <summary>
/// Initializes barcode elements.
/// </summary>
protected void initializeBarcode()
{
barcodeSetupId = InventParameters::find().BarcodeSetupIdPick;
barcodeSetup = BarcodeSetup::find(barcodeSetupId);
barcode = barcodeSetup.barcode();
if(barcodeSetup.BarcodeType != BarcodeType::NoBarcode)
{
barcodeFontName = barcodeSetup.FontName;
barcodeFontSize = barcodeSetup.FontSize;
}
else
{
barcodeFontName = ”;
barcodeFontSize = 0;
}
}
/// <summary>
/// Validate and format barcode value before it can be displayed
/// </summary>
/// <param name="_barcodeValue">String which should be encoded to a barcode format</param>
/// <returns>Encoded barcode string</returns>
public BarCodeString encodeBarcode(Str _barcodeValue)
{
if (barcodeSetup.validateBarcode(_barcodeValue))
{
barcode.string(true, _barcodeValue);
barcode.encode();
}
else
{
throw(error(strfmt("@SYS41409", barcode.barcodeType(), _barcodeValue)));
}
return barcode.barcodeStr();
}
/// <summary>
/// Processes the report business logic.
/// </summary>
[
SysEntryPointAttribute(false)
]
public void processReport()
{
QueryRun queryRun = new QueryRun(this.parmQuery());
InventItemBarCode inventItemBarCode;
this.initializeBarcode();
while (queryRun.next())
{
inventItemBarCode = queryRun.get(tableNum(InventItemBarCode));
this.insertIntoTmp(inventItemBarCode);
}
}
protected void insertIntoTmp(InventItemBarcode _inventItemBarCode)
{
// encode barcodes
sr_TmpInventItemBarCode.ItemId = _inventItemBarCode.itemId;
sr_TmpInventItemBarCode.BarCodeString = this.encodeBarcode(_inventItemBarCode.itemBarCode);
//sr_TmpInventItemBarCode.BarCodeString = this.encodeBarcode("packing12345"); // you can use any value as barcode string
sr_TmpInventItemBarCode.insert();
}
/// <summary>
/// Fetches data from SR_TmpInventItemBarCode Table.
/// </summary>
/// <returns>
/// SR_TmpInventItemBarCode Data for the report.
/// </returns>
[SRSReportDataSetAttribute(tableStr(SR_TmpInventItemBarCode))]
public SR_TmpInventItemBarCode getTmpInventItemBarCode()
{
select sr_TmpInventItemBarCode;
return sr_TmpInventItemBarCode;
}
Now lets open visual studio 2010 and create a new report as shown below: [I hope you all know by now how to create a report from Visual studio, If not please follow my earlier posts]
In the below screen, I have added new report and a dataset, set the data source type as Report data provider and in the query I have picked the data provider class “SR_InventItemBarCodeDP”
Once you select the DP class in the query and fields from the temporary Table “SR_TmpInventItemBarCode” you should find the fields in the Dataset Node as shown below.
Now drag and drop the dataset on to Designs node. it will create a auto design as show below.
Now , let us set some styles and layout templates on the Design and the data Region as shown below
Right click on the AutoDesign1, select properties and set the Layout template as “ReportLayoutStyleTemplate”
Right click on the DataSet1Table, select properties and set the Style template as “TableStyleTemplate”
Now , we will set up some properties on the data field “BarCodeString” to look like Barcode. Right click on the BarcodeString field >> properties >>
Select Style >> click on the ellipses button as shown below
This will open Cell Style editor and select BC C128 Wide and Size as 20 pt as show below. [Chose based on your requirement]
For more information on the type of barcodes, please visit http://en.wikipedia.org/wiki/Barcode#Types_of_barcodes
Right click on the AutoDesign1 and chose preview: Below is the Barcode rendered on to the report.
Happy Dax6ng,
May 24, 2012 at 8:06 pm
Hi,
tahnk you for this example.
But, does it not fail a ProcessReport method? I did everything as written, but my report is empty. I think something is missing like a processReport method. And where are called methods ‘encodeBarcode’ and ‘initializeBarcode’?
Thank you very much,
Chris
May 24, 2012 at 8:28 pm
Copy paste issue. ProcessRequest now is in the blog. Please refer the latest.
Thank you!
May 24, 2012 at 8:31 pm
InitalizrBarCode is called in processrequest
and encodebarcode is called in isnertintotmp method
thanks
sreenath
May 25, 2012 at 12:24 am
Thank you very much sreenath!!!
June 6, 2012 at 10:26 am
why we are writing in dp class.why not other class.
June 6, 2012 at 4:19 pm
Hari,
All examples which I am posting focus on DP classes as its a new concept in AX 2012 and will help readers to understand whats new.
Thank you!
Sreenath
August 9, 2013 at 1:43 pm
Hi Sreenath Reddy,
I’m newbie AX. I am researching SSRS report in AX 2012.
Please explain for me about:
SR_TmpInventItemBarCode sr_TmpInventItemBarCode;
This is customized table or system table, please detail explain.
Thanks,
Shinji
August 14, 2013 at 12:06 am
Its customized table which I have created.
September 10, 2013 at 5:41 pm
Hi Sreenath,
I made some barcode for sticker for post boxes example. On screen looks perfect but when I sent to printer some lines missing. I tried used special printer for sticker(label) but same result. In old ax it works perfectly, I cannot find solution
Thanks
Martin