我正在尝试更新ARTran的TranDesc字段,在发票和备忘录页面中覆盖ARTran的代码片段。这是完整的代码:
[PXOverride]
public virtual IEnumerable transactions()
{
foreach (PXResult<ARTran, SOLine> tran in PXSelectJoin<ARTran, LeftJoin<SOLine,
On<SOLine.orderType, Equal<ARTran.sOOrderType>,
And<SOLine.orderNbr, Equal<ARTran.sOOrderNbr>,
And<SOLine.lineNbr, Equal<ARTran.sOOrderLineNbr>>>>>,
Where<ARTran.tranType, Equal<Current<ARInvoice.docType>>,
And<ARTran.refNbr, Equal<Current<ARInvoice.refNbr>>>>,
OrderBy<Asc<ARTran.tranType, Asc<ARTran.refNbr, Asc<ARTran.lineNbr>>>>>.Select(Base))
{
if (((ARTran)tran).LineType != SOLineType.Discount)
{
if (((ARTran)tran).TranDesc.Split(':').Length > 1)
{
using (PXTransactionScope ts = new PXTransactionScope())
{
string[] desc = ((ARTran)tran).TranDesc.Split(':');
((ARTran)tran).TranDesc = desc[1];
Base.Transactions.Cache.IsDirty = true;
Base.Transactions.Update((ARTran)tran);
Base.Actions.PressSave();
Base.Persist();
ts.Complete();
}
}
yield return tran;
}
}
}
这显示了在':'之前切片文本后的TranDesc,但我也想将此更改保留到数据库中。但是代码并没有将数据保存在数据库中。
谢谢。
答案 0 :(得分:1)
我会尝试以下代码,而不是尝试将PXResult对象转换为正确的格式。
ARTRan artran = tran.GetItem<ARTran>();
artran.TranDesc = desc[1];
Base.Transactions.Update((ARTran)tran);
}
//outside the for loop
Base.Actions.PressSave();
另外,我会尝试删除PXTransactionScope