# Where are configuration values / smart strings stored?

**URL:** <https://www.epiusers.help/t/where-are-configuration-values-smart-strings-stored/44786>\
**Category:** Epicor ERP 10\
**Created:** [May 22, 2018, 8:03pm UTC](https://www.epiusers.help/t/where-are-configuration-values-smart-strings-stored/44786 "2018-05-22T20:03:51Z")\
**Posts on this page:** 20\
**Page:** 2

<div class="post-metadata">

**Author:** ![danbedwards](https://www.epiusers.help/letter_avatar_proxy/v4/letter/d/9f8e36/32.png) [@danbedwards](https://www.epiusers.help/u/danbedwards)\
**Post date:** [May 31, 2018, 7:13pm UTC](https://www.epiusers.help/t/where-are-configuration-values-smart-strings-stored/44786/21 "2018-05-31T19:13:46Z")

</div>

Have you considered writing these values into an extended OrderDtl table or a UD table from a doc rule in the configurator?

---

<div class="post-metadata">

**Author:** ![timshuwy](https://www.epiusers.help/user_avatar/www.epiusers.help/timshuwy/32/90122_2.png) [@timshuwy](https://www.epiusers.help/u/timshuwy)\
**Post date:** [May 31, 2018, 7:14pm UTC](https://www.epiusers.help/t/where-are-configuration-values-smart-strings-stored/44786/22 "2018-05-31T19:14:41Z")

</div>

well… an idea to continue with… create a PIVOT BAQ… in the pivot, put all the INPUTS that you want to see. These will become your columns. You will get one row per configurator session.

---

<div class="post-metadata">

**Author:** ![timshuwy](https://www.epiusers.help/user_avatar/www.epiusers.help/timshuwy/32/90122_2.png) [@timshuwy](https://www.epiusers.help/u/timshuwy)\
**Post date:** [May 31, 2018, 7:17pm UTC](https://www.epiusers.help/t/where-are-configuration-values-smart-strings-stored/44786/23 "2018-05-31T19:17:37Z")

</div>

@danbedwards - your approach with the OrderDtl table, and/or the UDTable is a secondary approach that is used. I just created one where we create a “SmartID” (sort of a smart part number) that is an assembly of all the answers. We store this SmartID in a UD table, along with the part number that we assigned. This way, if someone answers the questions the same exact way, we can find the part number used last time, reducing the number of part numbers generated. We are not using a smart part number, because to get all the options in, the part number needs to be over 400 chars long (ahhhhhh).

---

<div class="post-metadata">

**Author:** ![MikeGross](https://www.epiusers.help/user_avatar/www.epiusers.help/mikegross/32/14500_2.png) [@MikeGross](https://www.epiusers.help/u/MikeGross)\
**Post date:** [June 3, 2018, 11:53am UTC](https://www.epiusers.help/t/where-are-configuration-values-smart-strings-stored/44786/24 "2018-06-03T11:53:52Z")

</div>

@timshuwy & @danbedwards - appreciate the feedback.  
Dan - we actually put a few values right on the orderdtl line via the rules so we have some quick answers but it’s not enough for real BI analysis. We also thought about doing that UD Field with the mega-string Tim mentions - would work for lookups but not BI analysis. The only way to get the BI-useable data is to break it all out into columns and we didn’t want to add all of those to the orderdtl table. Hence the brute-force SQL query to build the UD Table.

Tim - PIVOT BAQ - right! Being an (essentially) one-man show that is teaching a couple of folks how to do a lot of this so I don’t have to be a one-man show - I get my blinders on too tight once in a while and forgot about the new stuff in 10 that 9 didn’t have - I spent a long time in 9 and working around query issues with SQL. Thanks for the reminder - I’ll take a look this week.

---

<div class="post-metadata">

**Author:** ![Evan\_Purdy](https://www.epiusers.help/user_avatar/www.epiusers.help/evan_purdy/32/69101_2.png) [@Evan\_Purdy](https://www.epiusers.help/u/Evan_Purdy)\
**Post date:** [June 5, 2018, 5:53pm UTC](https://www.epiusers.help/t/where-are-configuration-values-smart-strings-stored/44786/25 "2018-06-05T17:53:22Z")

</div>

How did you manage to push in PcValueSet data?

---

<div class="post-metadata">

**Author:** ![Evan\_Purdy](https://www.epiusers.help/user_avatar/www.epiusers.help/evan_purdy/32/69101_2.png) [@Evan\_Purdy](https://www.epiusers.help/u/Evan_Purdy)\
**Post date:** [June 5, 2018, 6:02pm UTC](https://www.epiusers.help/t/where-are-configuration-values-smart-strings-stored/44786/26 "2018-06-05T18:02:52Z")

</div>

By extended OrderDtl you mean the OrderDtl.Number01, etc fields? Even if there are enough fields available, how would I get all the existing configurations into that table?

Also seems a bit silly to duplicate the data, but if I can’t find any other way I will give this a try.

---

<div class="post-metadata">

**Author:** ![danbedwards](https://www.epiusers.help/letter_avatar_proxy/v4/letter/d/9f8e36/32.png) [@danbedwards](https://www.epiusers.help/u/danbedwards)\
**Post date:** [June 5, 2018, 6:06pm UTC](https://www.epiusers.help/t/where-are-configuration-values-smart-strings-stored/44786/27 "2018-06-05T18:06:25Z")

</div>

Yes, extending OrderDtl and adding custom fields to populate – another option is a separate UD table that is extended. Duplication has good reason here and it allows for users to have easy access to the configuration data throughout the toolset and into products like EDD and EDA.I use document rules to do this.

---

<div class="post-metadata">

**Author:** ![Evan\_Purdy](https://www.epiusers.help/user_avatar/www.epiusers.help/evan_purdy/32/69101_2.png) [@Evan\_Purdy](https://www.epiusers.help/u/Evan_Purdy)\
**Post date:** [July 18, 2018, 11:26am UTC](https://www.epiusers.help/t/where-are-configuration-values-smart-strings-stored/44786/28 "2018-07-18T11:26:48Z")

</div>

> [@danbedwards](#):
>
> 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.

I was revisiting this thread and noticed you said you can push in PcValueSet data from REST. Does that mean you can create configure a product from REST? That is also something I want to do…

---

<div class="post-metadata">

**Author:** ![Carol\_Di](https://www.epiusers.help/user_avatar/www.epiusers.help/carol_di/32/44991_2.png) [@Carol\_Di](https://www.epiusers.help/u/Carol_Di)\
**Post date:** [March 12, 2020, 12:14pm UTC](https://www.epiusers.help/t/where-are-configuration-values-smart-strings-stored/44786/29 "2020-03-12T12:14:50Z")

</div>

Hi Tim,  
Can an external BAQ work for the PcValueSet table? I believe it is stored in XML format, so maybe that is why it isn’t working for me?

---

<div class="post-metadata">

**Author:** ![Mark\_Wonsil](https://www.epiusers.help/user_avatar/www.epiusers.help/mark_wonsil/32/51594_2.png) [@Mark\_Wonsil](https://www.epiusers.help/u/Mark_Wonsil)\
**Post date:** [March 12, 2020, 12:34pm UTC](https://www.epiusers.help/t/where-are-configuration-values-smart-strings-stored/44786/30 "2020-03-12T12:34:37Z")

</div>

> [@Carol\_Di](#):
>
> Can an external BAQ work for the PcValueSet table?

People have create views to access this table through External BAQs. Or they do what @danbedwards did and duplicate the data in a UD table.

This solution won’t work for SaaS users as they cannot use External BAQs (or set up Views). I spoke to @Rich at last year’s Insights and they were working on a way to access this data from within the standard tool-set, including EDD and EDA. In the last year, I’ve spoken to three prospective companies who are looking at Epicor SaaS and they expressed concerns at not being able to get to this data. I know they’re working on it but not sure where it is in the backlog.

---

<div class="post-metadata">

**Author:** ![Evan\_Purdy](https://www.epiusers.help/user_avatar/www.epiusers.help/evan_purdy/32/69101_2.png) [@Evan\_Purdy](https://www.epiusers.help/u/Evan_Purdy)\
**Post date:** [March 12, 2020, 12:41pm UTC](https://www.epiusers.help/t/where-are-configuration-values-smart-strings-stored/44786/31 "2020-03-12T12:41:27Z")

</div>

> [@Mark\_Wonsil](#):
>
> I know they’re working on it but not sure where it is in the backlog.

They are waiting for me to get frustrated and re-write all our configurators outside of the system so we can access the data. Just after that they will release an update that solves the major problems with configurators

---

<div class="post-metadata">

**Author:** ![MikeGross](https://www.epiusers.help/user_avatar/www.epiusers.help/mikegross/32/14500_2.png) [@MikeGross](https://www.epiusers.help/u/MikeGross)\
**Post date:** [March 12, 2020, 12:41pm UTC](https://www.epiusers.help/t/where-are-configuration-values-smart-strings-stored/44786/32 "2020-03-12T12:41:45Z")

</div>

> [@Carol\_Di](#):
>
> Can an external BAQ work

Carol - there is an internal ‘view’ called erp.PcInputValue that works for finding a configurator value set and returning a ‘table’ of values where each value is a row. Something like

```auto
select * from erp.pcinputvalue where groupseq=38952

```

Or, you can use it like this, where I have a stored procedure using this view to set up a temp table and then use that temp table to get all of the values I want from the configurator value set.

```auto
		SELECT PcValueHead.Company,
			   qh.quotenum,
			   qd.quoteline,
			   qd.partnum,
			   PcValueHead.GroupSeq,
			   PcValueGrp.RelatedToTableName,
			   PcValueGrp.RelatedToSysRowID,              
			   PcValueHead.ConfigID, 
			   PcValueHead.ConfigType,
			   PcValueHead.ConfigVersion, 
              FldValues.value('local-name(.)', 'nvarchar(50)') AS InputName,
			  FldValues.value('.', 'nvarchar(50)') AS InputValue, 
		      FldValues.value('(@Type)[1]', 'nvarchar(50)') AS DataType
        INTO #ASH_E10QUOTE_CONFIG_DATA_TEMP
		FROM Ashworth.Erp.PcValueSet Cross apply FieldValues.nodes('/*/*/*') as FieldValues(FldValues)
                 INNER JOIN Ashworth.Erp.PcValueHead    
                 ON PcValueSet.Company = PcValueHead.Company 
                    AND PcValueSet.GroupSeq = PcValueHead.GroupSeq
                    AND PcValueSet.HeadNum = PcValueHead.HeadNum
				 INNER JOIN Ashworth.Erp.PcValueGrp
                 ON PcValueSet.Company = PcValueGrp.Company 
                    AND PcValueSet.GroupSeq = PcValueGrp.GroupSeq	
				JOIN Ashworth.erp.quotedtl qd on qd.SysRowID=PcValueGrp.RelatedToSysRowID
				Join Ashworth.erp.quotehed qh on qh.company=qd.company and qh.quotenum=qd.quotenum
		where --OPTIONAL -> qh.quotenum = 44038--44336 and
			RelatedToTableName = 'QuoteDtl'
			and FldValues.value('local-name(.)', 'nvarchar(50)') not in ('GroupSeq','HeadNum','PageSeq','ValueSetSeq','InputName')
			and FldValues.value('local-name(.)', 'nvarchar(50)') in 
					('DECWIDTH','DECWIDTHM','DECTURNRADIUS','DECNUMBERLOOPS','DECSTDLOOPCT','CMBAPPLICATION'
					,'CHRMESH','CHRMESHID','CMBEXPEDITE','CMBEDGETREAT','CMBBARLINKMAT','CMBRODLINKMAT','CHRMESHMAT','CMBMESHMAT2','CMBSTRIPMATERIAL'
					,'CMBRODLINKMAT','CMBRODMAT','decmaterialcost','declaborcost','decburden','dectotalcost','RADSPFEATYN','RADFLATTENED'
					,'CHKFATIQUE','DEVIATION','CHKREVERSEPICKET','ChkLaneDivider','chkLDIVDetach','chkLDIVnonDetach','ChkGuardEdge','ChkGeEdge'
					,'ChkBore','ChkSqrBore','DecBoreSize','CmbDiameter','DecDiameter','CmbDrive','ChkKeyWay','CmbMaterial','chrmaterial','ChkSetScrew'
					,'RadUnilBal','DecCageDia','chkhanger','DecTurnRatio','chklifts','DecCageDia','chkmonoplaner','ChrBelt','decsuramt','dectaramt'
					,'CHKCOSTSHEET','DecSetScrew','CmbTeeth','CHKSQRBORE')
			and Qd.company in ('yourcompany')

```

Followed by a series of update/selects to build a table where all my config values are parsed out.

```auto
		--GET THE WIDTHS FOR BOTH IMPERICAL AND METRIC
			UPDATE T SET T.WIDTH_I = P.INPUTVALUE  
			--SELECT distinct P.INPUTVALUE  
				FROM ASHWORTHUTILITY.DBO.ASH_E10QUOTE_CONFIG_MEASURES AS T INNER JOIN #ASH_E10QUOTE_CONFIG_DATA_TEMP AS P ON 
					T.COMPANY = P.COMPANY AND	T.QUOTENUM = P.QUOTENUM AND	T.QUOTELINE = P.QUOTELINE
					AND	T.PARTNUM = P.PARTNUM AND P.INPUTNAME IN ('DECWIDTH')

			UPDATE T SET T.WIDTH_M = P.INPUTVALUE  
			--SELECT distinct P.INPUTVALUE
				FROM ASHWORTHUTILITY.DBO.ASH_E10QUOTE_CONFIG_MEASURES AS T INNER JOIN #ASH_E10QUOTE_CONFIG_DATA_TEMP AS P ON 
					T.COMPANY = P.COMPANY AND	T.QUOTENUM = P.QUOTENUM AND	T.QUOTELINE = P.QUOTELINE
					AND	T.PARTNUM = P.PARTNUM AND P.INPUTNAME IN ('DECWIDTHM')

```

Hope that gets you started with your query.  
Mike

---

<div class="post-metadata">

**Author:** ![Carol\_Di](https://www.epiusers.help/user_avatar/www.epiusers.help/carol_di/32/44991_2.png) [@Carol\_Di](https://www.epiusers.help/u/Carol_Di)\
**Post date:** [March 12, 2020, 2:23pm UTC](https://www.epiusers.help/t/where-are-configuration-values-smart-strings-stored/44786/33 "2020-03-12T14:23:32Z")

</div>

Thanks @Mark_Wonsil  
Duplicating the data into a UD table from a configurator doc rule or UDmethod would be great.

Right now I have a UDmethod that creates a string from all the configurator input values and a doc rule that pushes the string to QuoteDtl.QuoteComment. This works for displaying the configurator data on a report, but I would really like to store the data in a table for future reference.

I’m not familiar with UD tables in E10. Is this the correct method to use?:

1. use UD column maintenance to add columns to a table (eg. QuoteHed)
2. regenerate the data model
3. use a configurator doc rule (or UDmethod?) to push the values (eg. QuoteHed.TireSize\_c = Inputs.TireSize.Value; )

---

<div class="post-metadata">

**Author:** ![danbedwards](https://www.epiusers.help/letter_avatar_proxy/v4/letter/d/9f8e36/32.png) [@danbedwards](https://www.epiusers.help/u/danbedwards)\
**Post date:** [March 12, 2020, 2:52pm UTC](https://www.epiusers.help/t/where-are-configuration-values-smart-strings-stored/44786/34 "2020-03-12T14:52:42Z")

</div>

If you are on 10.2.500 you can hit this data with a standard BAQ or any other method. No external view or anything special. Example code below if you wanted to get it from a server side method.

```cs
foreach (var PCValueSetRecord in (from row in Db.PcValueSet where row.GroupSeq == GroupSeq
select row))
{
  string XMLValue = PCValueSetRecord.FieldValues;
  XmlReader xr = XmlReader.Create(new StringReader(XMLValue));
  var xMembers = from members in XElement.Load(xr).Elements() select members;
  var children = xMembers.Elements();
  var AllElements = children.Where(e => e.Value != string.Empty).Select(e => new 
  {
    Name = e.Name.ToString(), // Control Name
    Value = e.Value.ToString(), // Input Value
    Type = (string)e.Attribute("Type") // Type (i.e. System.Int32)
  }).ToList();
```

---

<div class="post-metadata">

**Author:** ![Mark\_Wonsil](https://www.epiusers.help/user_avatar/www.epiusers.help/mark_wonsil/32/51594_2.png) [@Mark\_Wonsil](https://www.epiusers.help/u/Mark_Wonsil)\
**Post date:** [March 12, 2020, 4:32pm UTC](https://www.epiusers.help/t/where-are-configuration-values-smart-strings-stored/44786/35 "2020-03-12T16:32:01Z")

</div>

> [@danbedwards](#):
>
> If you are on 10.2.500 you can hit this data with a standard BAQ

Just upgraded to 10.2.500 a few weeks ago and I didn’t get the memo! Thanks @Rich!!! And thank you @danbedwards for setting me straight!

Mark W.

---

<div class="post-metadata">

**Author:** ![MikeGross](https://www.epiusers.help/user_avatar/www.epiusers.help/mikegross/32/14500_2.png) [@MikeGross](https://www.epiusers.help/u/MikeGross)\
**Post date:** [March 12, 2020, 5:33pm UTC](https://www.epiusers.help/t/where-are-configuration-values-smart-strings-stored/44786/36 "2020-03-12T17:33:34Z")

</div>

> [@Carol\_Di](#):
>
> Is this the correct method to use?

Your process is correct - BUT I would extend the QuoteDtl table instead, so that the values line up with the line item in case there is more than one configured item on the quote.

---

<div class="post-metadata">

**Author:** ![Carol\_Di](https://www.epiusers.help/user_avatar/www.epiusers.help/carol_di/32/44991_2.png) [@Carol\_Di](https://www.epiusers.help/u/Carol_Di)\
**Post date:** [March 13, 2020, 5:56pm UTC](https://www.epiusers.help/t/where-are-configuration-values-smart-strings-stored/44786/37 "2020-03-13T17:56:12Z")

</div>

@danbedwards We have recently upgraded to 10.2.500. I created a BAQ using PcValueSet linked to QuoteDtl and it displays the configurator values in PcValueSet\_FieldValues as an xml string. Is there any way to convert that string into columns of separate configurator input values?

---

<div class="post-metadata">

**Author:** ![danbedwards](https://www.epiusers.help/letter_avatar_proxy/v4/letter/d/9f8e36/32.png) [@danbedwards](https://www.epiusers.help/u/danbedwards)\
**Post date:** [March 13, 2020, 6:04pm UTC](https://www.epiusers.help/t/where-are-configuration-values-smart-strings-stored/44786/38 "2020-03-13T18:04:10Z")

</div>

Yes there is. I can post an example later today - if someone doesn’t beat me to it 🙂

---

<div class="post-metadata">

**Author:** ![Mark\_Wonsil](https://www.epiusers.help/user_avatar/www.epiusers.help/mark_wonsil/32/51594_2.png) [@Mark\_Wonsil](https://www.epiusers.help/u/Mark_Wonsil)\
**Post date:** [March 13, 2020, 6:11pm UTC](https://www.epiusers.help/t/where-are-configuration-values-smart-strings-stored/44786/39 "2020-03-13T18:11:29Z")

</div>

> [@danbedwards](#):
>
> if someone doesn’t beat me to it

Won’t be me. I just learned this was possible! 🤣

---

<div class="post-metadata">

**Author:** ![HLalumiere](https://www.epiusers.help/letter_avatar_proxy/v4/letter/h/bc8723/32.png) [@HLalumiere](https://www.epiusers.help/u/HLalumiere)\
**Post date:** [March 13, 2020, 8:22pm UTC](https://www.epiusers.help/t/where-are-configuration-values-smart-strings-stored/44786/40 "2020-03-13T20:22:16Z")

</div>

Very interested in this as well… Only way I was able to achieve it is through a direct SQL query using OUTER APPLY and SQL Server’s XML facilities, one field at a time, something like this:

> SELECT …, QtyVal.val.value(‘.’, ‘decimal(22,8)’) as ‘QtyBtes’  
> FROM QuoteDtl qd  
> LEFT JOIN Erp.PcValueSet vs ON vs.Company = qd.Company  
> AND vs.GroupSeq = qd.GroupSeq  
> AND vs.ConfigID = ‘CFG-BTE’  
> OUTER APPLY vs.FieldValues.nodes(‘\*/\*/VARNUMBTEQTE’) AS QtyVal(val)

[Previous page](https://www.epiusers.help/t/where-are-configuration-values-smart-strings-stored/44786.md?page=1)

[Next page](https://www.epiusers.help/t/where-are-configuration-values-smart-strings-stored/44786.md?page=3)
