假设我有一个自定义字段SOLineExt.UsrCustomField
,该字段允许通过 SO301000 访问的文本输入。如果要根据此SOLine从 PO505000 屏幕创建PO,我想在新POLine上自动创建注释,并将SOLineExt.UsrCustomField
的值作为NoteText插入,但仅当SOLineExt.UsrCustomField != null
。
自定义字段也可以作为POFixedDemandExt.UsrCustomField
访问(它在POCreate中填充了fixedDemand IEnumerable覆盖),因此我可以根据需要通过POOrderEntry中的FillPOLineFromDemand()
覆盖来提供它。>
1)我是否需要在FillPOLineFromDemand()
或POLine_RowInserted()
或其他地方创建新的笔记?
2)什么代码将创建注释并将UsrCustomField的值插入NoteText?我需要创建并填充Note DAC吗?
答案 0 :(得分:0)
您可以使用SetNote
类的PXNoteAttribute
静态方法来设置文本注释。
在FillPOLineFromDemand方法的上下文中的POLine对象上调用该方法时,存在一些意外的问题。大概是因为那时POLine对象没有在缓存中正确初始化。
您可以使用POLine_RowInserted,我测试了此解决方案:
public void POLine_RowInserted(PXCache sender, PXRowInsertedEventArgs e)
{
POLine row = e.Row as POLine;
POLinkSO.DAC.POLineExt rowExt = row != null ? row.GetExtension<POLinkSO.DAC.POLineExt>() : null;
if (rowExt != null)
{
SOLine line = PXSelectReadonly<SOLine,
Where<SOLine.orderNbr, Equal<Required<SOLine.orderNbr>>,
And<SOLine.orderType, Equal<Required<SOLine.orderType>>,
And<SOLine.lineNbr, Equal<Required<SOLine.lineNbr>>,
And<SOLineExt.usrCustomField, IsNotNull>>>>>.Select(Base,
rowExt.UsrPOLinkSOOrderNbr,
rowExt.UsrPOLinkSOOrderType,
rowExt.UsrPOLinkSOLineNbr);
SOLineExt lineExt = line != null ? line.GetExtension<SOLineExt>() : null;
if (lineExt != null)
{
PXNoteAttribute.SetNote(sender, row, lineExt.UsrCustomField);
}
}
}