Is there a way to print a Part Image on a SSRS Report

Is there a way to print a part Image on an SSRS Report.

Would like to show pictures of parts on quotes and sales orders.

I would guess that I could keep duplicates of the part pictures on the SSRS server and have the server reference the part images. However, that means keeping the Epicor DB and the SSRS Website in Sync.

Has anyone looked at this before? It seems like it would be a common request.

Thanks,
DaveO

1 Like

This is supported if the image is stored in epicor images

1 Like

Mr. Jose: So if i create a BAQ for the purpose of a BAQReport what field should i include that SSRS can read as an Image?

You can read the image table and use the ImageSysRowID to then join to Ice.FileStore, in your SSRS query, to pull back the content field to an image control

1 Like

Thank you Dan - FileStore is the piece i was missing.

I don’t know how you found/knew that - but thank you.

DaveO

2 Likes

Mr. Dan: I am trying to write a BAQ for a BAQReport to show pictures of parts.

In the BAQ Designer - I am unable to add the ice.FileStore table. Is there a trick or security secret i can use to make that table visible.

I understand i could reference the table outside of Epicor - however, if i could keep it all in Epicor then I would not have to worry about referencing the pictures in the Live DB if i am running in Pilot.

With a BAQ Report you cannot pull in Ice.FileStore, so the only option is to go directly to the data from SSRS. Now this can be made easier to handle for pilot or live by how you get this data (placement of a view) but any way you do this they each have maintenance requirements. I typically will put a view in the Report database and then join to that. So Pilot would have a view named Image that pulls from Pilot DB and Live has a view named Image and that pulls from Live DB. The SQL query always pulls the same named view and it handles the different databases. Like I said - many ways to make this easier but all require proper maintenance.

1 Like

Mr. Dan: Thanks for the suggestion. I was able to test the report going direct to the DB and it works.

Unfortunately, this application is for a Multi-Tennant customer - so DB direct is not an option.

However, I see that I can add the FileStore table to an RDD - so if I make this report a “Style” I think I can make it work.

Thanks again for the suggestion - FileStore was the “secret tip”.

DaveO

Let me know if you have success bringing in the Content field through the RDD. Last I heard this did not work.

1 Like

Mr. Dan: You are correct - I was NOT able to get the image to print using the RDD.

I created a support ticket with Epicor to ask for help.

DaveO

Hello Dave, have you received a reply concerning pulling the FileStore.Content with the RDD? We’re looking to avoid direct db connections as well, for maintainability issues.

Thanks,
Simon

Mr. Simon: I have been told by support the we can access the FileStore table now in 10.2.400.0.

I have not tested this yet.

DaveO

1 Like

Thank you Dave, we’ll keep this in mind when working with the next release.

I just finished testing and I can confirm that the part images DOES work in 10.2.400.1 MultiTennant.

The tables are:
Part --> Image --> FileStore

Join:
Image.Company --> FileStore.Company AND Image.ImageSysRowID --> FileStore.SysRowID.

The Jpeg (or MIME Type) is in a field called FileStore.Content.

Set you image to draw from database and pick you FileStore.Content field and then set the MIME Type (Mine was JPEG).

Hope this helps - what a frustrating two MONTHS it took to get an answer finally.

DaveO

11 Likes

Update - we still cannot add the FileStore table to a BAQ.

So we will NOT be able to create a BAQ report that shows part images.

I created a new ticket for this issue - judging from my last response we can expect a response in a couple of months (maybe).

DaveO

You can use an UBAQ Post Processing on GetList like this and you’ll get the image in your Calculated_Field then you can use that in SSRS to render the image.

Func ByteToString = (bytes) =>
{
    return Convert.ToBase64String(bytes);    
};
foreach(var y in ttResults)
{
    var arr= (from x in Db.FileStore where x.FileName == y.Part_ImageID select x.Content).FirstOrDefault();
    if(arr!=null)
        y.Calculated_ImageStore = ByteToString(arr); 
}
5 Likes

Mr. Gomez: Thank you for the suggestion and the code.

I may have to “resort” to that.

Thanks again,
DaveO

Got a response from Epicor - SaaS customers do not have a “non code” solution to this issue.

Looks like our options are: The Gomez Updatable BAQ solution, have some custom code written, or use a network share to point to individual MIME Type files and only store the image path.

DaveO

Just to be clear: Multi-Tenant users cannot use code solutions, Public Cloud (aka Dedicated Tenant) or Single Tenant can use the code solution. MT users are SaaS customers but not all all SaaS Customers are MT.

MT cannot die fast enough. It’s not even on the Epicor Price list.

1 Like

Missing a “not” in there?