Hi everyone,
I am hoping someone can help me with an issue I am experiencing in Epicor Kinetic (SaaS/Cloud environment).
Background
We have two custom UD fields on our Quote lines — BasePart_c and Dimension_c — that were added as part of our system customization. These fields are stored directly on QuoteDtl and displayed on the form. We also have the same fields on OrderDtl for display on the Sales Order lines.
The values for these fields are selected by users from a dropdown that pulls from a UD04 lookup table, but once selected, the values are stored directly on QuoteDtl.
The Problem
When a Sales Order is created from a Quote using our Quote Order Wizard (a custom App Studio implementation), BasePart_c and Dimension_c are blank on the newly created Sales Order lines. We confirmed this by querying OrderDtl directly in a BAQ — the fields are empty after order creation.
We understand this is because Epicor’s native quote-to-order conversion only copies standard fields and has no awareness of custom UD fields.
What We Have Investigated
- The Quote Order Wizard is a locked App Studio customization — we cannot edit it directly
- There are no existing Method Directives on
Erp.QuoteOrderor anyCreateOrdermethod in our BPM list - The wizard calls Epicor’s standard REST endpoints (
Quote.CreateOrderFromQuoteandQuote.CreateOrderFromQuoteSaveOTS) behind the scenes - We found the following code that looks promising as a Post-Processing Method Directive on
Erp.BO.SalesOrder.Update:
c#
foreach (var od in ttOrderDtl.Where(x => x.RowMod == "A" && x.QuoteNum != 0))
{
var qd = Db.QuoteDtl.FirstOrDefault(x =>
x.Company == CompanyID &&
x.QuoteNum == od.QuoteNum &&
x.QuoteLine == od.QuoteLine);
if (qd != null)
{
Action<string> udCopy = col =>
{
if (col.EndsWith("_c"))
{
od[col] = qd[col];
}
};
qd.GetType()
.GetProperties()
.Select(s => s.Name)
.ToList()
.ForEach(udCopy);
}
}
My Questions
- Is a Post-Processing Method Directive on
Erp.BO.SalesOrder.Updatethe right approach for this, or is there a better method to hook into? - Is the code above correct and complete for this use case, or does it need any adjustments?
- Are there any known gotchas with copying UD fields this way in a SaaS/Cloud environment?
- Has anyone solved a similar issue and can share what worked for them?
Any guidance would be greatly appreciated. Thank you in advance!