I am working on a tool for our sales people that automatically creates a sales approval drawing, calculates operation times, prices, etc. Its too complicated to be a configurator and besides its a web app so that people can use it in the field and not consume a licence. I need to be able to push/pull configurator information from the web app to Epicor. Eventually I would like to turn this into something that a customer could use to instantly get a quote.
It is my understanding that this is not possible currently for SaaS users. What are my options here? Is there some kind of workaround I can use or do I just have to hope that they add features soon?
I have been working on this since December last year and its getting to the point were the project really should be done soon, but I can’t seem to figure out how to get around this road block, especially since spending money isn’t an option.
To make this possible you would have to somehow create an app that would populate the Sql Table called PCInputValues, which is a very special table with all the contents embedded in XML. Even the regular BAQ program does not allow you to access this. You have to use an External BAQ to get to the data.
IF you could figure out how to write to this data in a SAAS environment, you would then also need a configurator with Method rules created, and that configurator would have to have the same “Revision” (Internal Configurator revision that is hidden) as the data you wrote to PCInputValues… if the revision doesn’t match, then the configurator has to be re-validated. Also… each Sales Order/Line item gets its own “GroupSeq” value, which must match to the PCInputValues. (examine OrderDtl.GroupSeq field which points to the correct PCInputValues Record).
I think that what you are trying to take on is very difficult, if not “Impossible” (I rarely use that word in Computers) ESPECIALLY if you are hindered by the limitations imposed in a SaaS environment.
below is a screenshot of a “Simple” External BAQ to extract FOUR of the values from the configurator:
I have to agree with @timshuwy on this one, but with one caveat - I think it could be done using Service Connect (which is really just the BO’s you could use in your App), and in turn, possibly even REST if the stuff that you need is exposed.
We have some complicated configurator rules and ended up writing a lot of code into the configurator to get it all done. (We don’t have a need for webapp like you do) The sequence of events is complicated to get all the data in the right place and sequenced/linked up correctly. but we thought it possible to do with Service Connect and some custom code to build the XML string (that goes into the PCInputValues Table) before it gets to Service Connect. The trick is getting the XML formed up so you can create the rows in the table - and it has to be formed so that the GetDetails process can read it and know what it is (Need that Method on the Part like Tim mentioned). I think getting the GroupSeq # in all the right places might be the easy part
We have never tried it though… we may when we have nothing else to do - unless Epicor makes it possible to use Visual Studio to design configurators before we get to it. Wouldn’t that be sweet…
Yeah, I know its going to be nearly impossible but I want to make sure I have explored every possibility before giving up. I don’t think there is any way for me to get at the PCInputValues, I put in a ticket and they have made it into a feature request but it hasen’t even been approved yet.
Does the actual configurator use SQL directly or does it use some other BO’s? Is this something I could figure out by doing a trace?
Since it seems nearly impossible to do it through the configurator tables given my restrictions, would it be easier to directly edit the BOM for each qoute/sales order/job and store my own “configurations” in a UD table (or outside Epicor by some other means)?
I’ve been looking through the REST docs carefully and as far as I can tell it only exposes the design aspects of the configuators, not the individual configurations. We don’t have service connect so I can’t investigate that.
I wish I could use Visual Studio for configurator development as well.
if you can access the BOMs & Boos directly in the QuoteMtl and QuoteOper tables, that may be easier than interfacing with the configurator logic. since you are already handling all the Q&A and know the answers, this might be easier (depending on the complexity of the product).
It’s been a while so forgive me for the lack of details, but here is the basic outline of our plan we came up with a few years ago…
If you watch what happens (and do a trace), the configurator runs by simply downloading the relevant table data (PCxxx tables) and ‘builds’ a runtime C# file local on your PC(you can find this in User\AppData I think) then launches it inside your client. I am NOT exactly sure how this works and the mechanics escape me, but all the configurator is doing (really) is building the PCInputValues XML strings based on all the fields/variables you have in your configurator. When the configurator is done, those values are the main things that are written to the database. I am sure there are a few flags and such set on the quotedtl/orderdtl lines such as lastconfigdate, configured, modifieddate, etc. After that, doing the GetDetails function simply applies the PcInputValues field values to the rules found in the Part’s Method. All the Document Rules and Method Rules are applied and it builds the QuoteOpr and QuoteMtl table rows which is what the Job uses when it’s created.
I know I’ve missed a few things…
From this, we formulated a way to create the XML strings and associated fields to ‘inject’ into PCInputValues - and the data needed to update quotedtl, figure out the groupseq value, and set the dates, etc.
Updating QuoteDtl is easy enough, but the catch is writing the PCInputVlaue table rows. It’s a ‘bad thing’ to write directly, but you could stage them inside a UD table which Epicor says is OK to write to externally. Then attach a BPM to that UD table to ‘move’ your values in PCInputValue.
The manual step would be to open the quote/order and run GetDetails. We’ve had a lot of trouble trying to trigger GetDetails properly via a BPM. Or, you could really just create the job and GetDetails from there - pretty sure that works just as well. And most of that could be automated as well. I think REST could work for most of this…
Again - the outline is spotty since it’s been a few years and I am providing it only to see if it triggers something you could use.
I can’t even move from a UD table to PCInputValue as a SaaS user - I can only use the pre-built BPM blocks, no custom code.
Sorry Evan, I forgot you mentioned that you are SaaS. All that explanation is for naught I suspect. At least until Epicor gives you a few more functions to work.
Although, Fill Table by Query and Update Table by Query are BPM blocks for me (Non Saas) - are those not available to you?