Where are configuration values / smart strings stored?

I see in this thread it is stated they are in the “PcValueSet” table, but I can’t seem to find that table in the BAQ designer. What am I missing?

This table is not accessible using the BAQ designer and this was done for a reason since this table stores the values as XML in the database. Depending on your environment (Saas vs, On-prem) you can access a SQL view, either direct or using External BAQ, that will do all the heavy lifting for viewing these tables. The view is Erp.PcInputValue.

We are SaaS users. I was looking for this information to get an idea of the following two things would be possible for me:

  • Create configurations from an external application I am developing
  • Make reports on configurations such as x many configurations had values between y and z and also met C criteria. I could probably still do this if there is some way to dump the xml and get it into Excel or something.

You can definitely get to the data. We do it via Service Connect as well as inside the configurator itself. We pull the data via service connect to create our parts from the configurations. And then inside the configurator, I give the users the option to copy existing configurations and I also have one that totals several configurations into a new configuration. I have code samples if you need it.

Brenda J. Mohr

Humtown Products

We don’t have Service Connect. I would like to see some code examples, if you have time. I have a bad feeling they use server side c# code though, which as Multi tenant cloud users is restricted to the point you can’t use it at all…

Basically, we are working on a little web app for sales & some customers to enter information on the screen they want, then we have code that generates a CAD drawing for them to approve. I want to generate the Epicor side as well, so we don’t have to manually re-enter all the information into the configuration. I know there are probably Epicor modules that would make this easier, but if there is any way to do it without spending money that is the way I will most likely have to take…

We also manually go through part descriptions to get metrics on things, so I would like to be able to query configurations for that purpose as well, as I mentioned in my other post.

The data IS available using and EXTERNAL BAQ which can be put into regular Epicor dashboards. In the query you can filter down to see all the inputs and the answers. You can also link back to the original document (sales detail, quote detail, etc) using a customer common column named “GroupID” that links the data in the quote/order to the data in the PC input table.
There IS a small SQL script fix that needs to be run if you are on an “older” version of e10 (not sure if/when it is fixed). Without the fix, you cannot see individual values in th query. Contact tech support to ask for the sql fix for accessing the data.

1 Like

Are you saying to make an external BAQ that accesses the database directly? I haven’t made an external BAQ so I don’t quite follow. I also don’t appear to have access to the external BAQ menus, but I have asked for access and should have it soon.

Also keep in mind I am a multi-tenant SaaS user, it tends to cripple you from doing anything cool.

I am not sure they will allow you to hit the Epicor database as a MT user using an external BAQ. Will be interesting to see if you get the access

Yes, it is C# code, Let me know if you still want to see it.

Brenda J. Mohr

Humtown Products

Phone: 330-482-5555

And if they don’t, is there any other way (via REST maybe…?)

I can handle c# code just fine, but if it has to run on the server and not the client I am out of luck. If you have client side c# that can access the configuration information, please share it with me! :slightly_smiling_face:

Thanks,

I have been able to push in PcValueSet data but have not found a way to get the PcValueSet data using REST. I have not spent a ton of time looking but planned to do this today.

string sConnEpicor = “Data Source=HUMSQL;Initial Catalog=EpiDox; User Id=xx;Password=yourpassword; Trusted_Connection=false;”;

string sXML = “”; string sLine = “”; string sPage = “”; int myPage = 0; int myLine = 0;

using (System.Data.SqlClient.SqlConnection MyCon = new System.Data.SqlClient.SqlConnection(sConnEpicor))

{

MyCon.Open();

System.Data.SqlClient.SqlCommand oCmd = new System.Data.SqlClient.SqlCommand();

oCmd.Connection = MyCon;

oCmd.CommandText = “select pvs.PageSeq,qd.QuoteNum,qd.QuoteLine,pvs.FieldValues from Epicor10.erp.QuoteDtl qd left join Epicor10.erp.PcValueSet pvs on pvs.GroupSeq = qd.GroupSeq where quotenum = @QuoteNum and qd.PartNum = ‘Quotable Part’ order by qd.QuoteLine, pvs.PageSeq”;

oCmd.Parameters.AddWithValue("@QuoteNum", Inputs.thisQuoteNum.Value);

System.Data.SqlClient.SqlDataReader oReader = oCmd.ExecuteReader();

if (oReader.HasRows)

{

while (oReader.Read())

{

sXML = oReader[“FieldValues”].ToString();

if (sXML != “”)

{

sLine = oReader[“QuoteLine”].ToString(); myLine = Convert.ToInt32(sLine);

sPage = oReader[“PageSeq”].ToString();

System.Xml.XmlDocument xmlDoc = new System.Xml.XmlDocument(); // Create an XML document object

if (sXML != null) {xmlDoc.LoadXml(sXML);} // Load the XML document from the specified string

if (sPage == “1”)

{

if (sLine == “1”)

{

System.Xml.XmlNodeList CSetDesc = xmlDoc.GetElementsByTagName(“CSetDesc”);

System.Xml.XmlNodeList HSetDesc = xmlDoc.GetElementsByTagName(“HSetDesc”);

System.Xml.XmlNodeList TotBoxes = xmlDoc.GetElementsByTagName(“TotBoxes”);

System.Xml.XmlNodeList reQuote = xmlDoc.GetElementsByTagName(“reQuote”);

System.Xml.XmlNodeList PartNum = xmlDoc.GetElementsByTagName(“Part2ReQuote”);

if (!string.IsNullOrEmpty(PartNum[0].InnerText)) {Inputs.rqPartNum.Value = PartNum[0].InnerText.Substring(0,7) + “.00.000”;}

Inputs.setCDesc.Value = CSetDesc[0].InnerText;

Inputs.setHDesc.Value = HSetDesc[0].InnerText;

Inputs.reQuote.Value = (reQuote[0].InnerText == “REQUOTE”) ? (“YES”) : (“NO”);

Inputs.TotBoxes.Value = System.Convert.ToDecimal(TotBoxes[0].InnerText);

}

}

… close everything off – I have 8 pages of inputs I don’t want to make this huge. You need the page of the configurator and the line on the quote in this case.

Brenda J. Mohr

Humtown Products

Phone: 330-482-5555

SaaS cloud restrictions strike again… :sob::sob:

Not allowed to use SQL classes, even if I can somehow get access to the SQL server. Thank you so much for trying to help though.

Brenda Mohr would like to recall the message, “[Epicor Help Forum] [E10] Where are configuration values / smart strings stored?”.

the user: sa and password: hum… will be different for each environment.

Brenda you might need to consider not sharing that information as the sa users is one of the more powerful accounts in the database.

Not sure if multi-tenant can create External BAQs… but just in case… (And for those that CAN write them)… Yes, it is possible to write an external BAQ that directly extracts data from the PCInputValue table… you can then further summarize this and only extract the needed “InputValue” that you want to see. the link back to the Order Detail or Quote Detail or Job Header is always the GroupSeq column. Below are some screenshots.
image

1 Like

Yeah, that’s what happens when doing 8352 things at once. I realized just a little to late.

Brenda J. Mohr

Oh, I assumed those were just placeholder values.

I deleted my image, you can edit your post to remove the info as well. Though if you are really worried about it you should probably just change the password.

@timshuwy - That is a superb query idea - thank you for that nugget. Whipped it up and will use it well.

As for getting them into columns however is a different matter altogether. If you’re like us, we’ve got many configurators that share similar value/type pairs, but also have dissimilar ones.

We want to be able to filter our dashboards, reports and BI tools using these values so the only thing we could come up with is a brute-force SQL query that runs every day to move these values in mass to columns in a UD table so we can join to Quote/Order/Job/Invoice records. And we’re not taking ALL the Inputs, just a select 40 or so…

Love to compare notes with someone who has figured this out as well :slight_smile:
Mike