【发布时间】:2021-08-11 21:50:06
【问题描述】:
我在SOOrderDiscountDetail 表和ARInvoiceDiscountDetail 表上添加了自定义字段。当我从销售订单屏幕创建发票时,我希望我的自定义字段中的值 SOORderDiscountDetailExt 到 ARInvoiceDiscountDetailExt。我目前已经覆盖了SOInvoiceEntry Graph 的InvoiceOrder 方法。这是我尝试过的代码。问题是当我以调试模式运行时,数据被携带,但实际屏幕上没有携带。我错过了什么吗?
我的 DAC 扩展程序
公共类 SOOrderDiscountDetailExt : PXCacheExtension
#region UsrEXTDiscount
[PXDBString]
[PXUIField(DisplayName="EXTDiscount")]
public virtual string UsrEXTDiscount { get; set; }
public abstract class usrEXTDiscount : PX.Data.BQL.BqlString.Field<usrEXTDiscount> { }
#endregion
}
公共类 SOOrderDiscountDetailExt : PXCacheExtension
#region UsrEXTDiscount
[PXDBString]
[PXUIField(DisplayName="EXTDiscount")]
public virtual string UsrEXTDiscount { get; set; }
public abstract class usrEXTDiscount : PX.Data.BQL.BqlString.Field<usrEXTDiscount> { }
#endregion
}
这是我的图形扩展
公共类 SOInvoiceEntry_Extension : PXGraphExtension {
public delegate void InvoiceOrderDelegate(DateTime invoiceDate, PXResult<SOOrderShipment, SOOrder, CurrencyInfo, SOAddress, SOContact> order, PXResultset<SOShipLine, SOLine> details, Customer customer, InvoiceList list, PXQuickProcess.ActionFlow quickProcessFlow, bool groupByDefaultOperation);
[PXOverride]
public void InvoiceOrder(DateTime invoiceDate, PXResult<SOOrderShipment, SOOrder, CurrencyInfo, SOAddress, SOContact> order, PXResultset<SOShipLine, SOLine> details, Customer customer, InvoiceList list, PXQuickProcess.ActionFlow quickProcessFlow, bool groupByDefaultOperation,InvoiceOrderDelegate basemethod)
{
basemethod?.Invoke(invoiceDate, order, details, customer, list, quickProcessFlow, groupByDefaultOperation);
PXCache cache = Base.Caches[typeof(SOLine)];
PXSelectBase<SOLine>transactions=new PXSelect<SOLine, Where<SOLine.orderType, Equal<Current<SOOrder.orderType>>, And<SOLine.orderNbr, Equal<Current<SOOrder.orderNbr>>>>>(Base);
PXSelectBase<SOOrderDiscountDetail> discountdetail = new PXSelect<SOOrderDiscountDetail,Where<SOOrderDiscountDetail.orderType, Equal<Current<SOOrder.orderType>>,And<SOOrderDiscountDetail.orderNbr, Equal<Current<SOOrder.orderNbr>>>>>(Base);
TwoWayLookup<SOOrderDiscountDetail, SOLine> discountCodesWithApplicableSOLines = DiscountEngineProvider.GetEngineFor<SOLine, SOOrderDiscountDetail>().GetListOfLinksBetweenDiscountsAndDocumentLines(cache, transactions, discountdetail);
TwoWayLookup<ARInvoiceDiscountDetail, ARTran> discountCodesWithApplicableARLines = new TwoWayLookup<ARInvoiceDiscountDetail, ARTran>(leftComparer: new ARInvoiceDiscountDetail.ARInvoiceDiscountDetailComparer());
ARInvoiceDiscountDetail arinvoice = new ARInvoiceDiscountDetail();
foreach (SOOrderDiscountDetail docGroupDisc in discountCodesWithApplicableSOLines.LeftValues)
{
ARInvoice newdoc =new ARInvoice();
ARInvoiceDiscountDetail dd = new ARInvoiceDiscountDetail();
SOOrderDiscountDetailExt sodiscountdetailExt = docGroupDisc.GetExtension<SOOrderDiscountDetailExt>();
ARInvoiceDiscountDetailExt ardiscountdetailExt = PXCache<ARInvoiceDiscountDetail>.GetExtension<ARInvoiceDiscountDetailExt>(dd);
PXCache<ARInvoiceDiscountDetail>.GetExtension<ARInvoiceDiscountDetailExt>(dd).UsrEXTDiscount = docGroupDisc.GetExtension<SOOrderDiscountDetailExt>().UsrEXTDiscount;
Base.Caches[typeof(ARInvoiceDiscountDetail)].SetValueExt<ARInvoiceDiscountDetailExt.usrEXTDiscount>(ardiscountdetailExt, sodiscountdetailExt.UsrEXTDiscount);
Base.Caches[typeof(ARInvoiceDiscountDetail)].Update(ardiscountdetailExt);
}
【问题讨论】: