我正在寻找一种解决方案,为我在自定义表格中创建的数据库行添加注释。我从Ruslan找到了下面的解决方案来访问noteid,但我不明白如何使用它来为行添加注释。我有所有代码来创建行,我只需要属性或函数调用来实际将注释的文本附加到行。
=============================================== ===================
要在保存新父记录时自动创建Note记录,当父记录插入缓存时,应该调用静态PXNoteAttribute.GetNoteID(PXCache缓存,对象数据)方法。
例如,要在保存新的Stock Item时自动创建Note记录,您应该订阅InventoryItem DAC的RowInserted处理程序并调用PXNoteAttribute.GetNoteID(...):
public class InventoryItemMaintExt : PXGraphExtension<InventoryItemMaint>
{
public void InventoryItem_RowInserted(PXCache sender, PXRowInsertedEventArgs e)
{
var noteCache = Base.Caches[typeof(Note)];
var oldDirty = noteCache.IsDirty;
PXNoteAttribute.GetNoteID<InventoryItem.noteID>(sender, e.Row);
noteCache.IsDirty = oldDirty;
}
}
上面的代码片段可以合并到几乎所有自定义BLC中,只需一些简单的更改即可将InventoryItem替换为自定义DAC。
实施加布里埃尔的建议后:
我似乎没有在数据库中得到任何记录。代码编译并运行正常,但据我所知,注释不会生成。注释ID在我的表中设置,但注释表中没有数据。请查看我的代码,让我知道需要更改的内容。另外,如何将注释列放入网格中,或者在正确完成后自动变为可用?
数据库字段定义:
[NoteID] [uniqueidentifier] NULL
DAC字段:
#region NoteID
public abstract class noteID : PX.Data.IBqlField
{
}
protected Guid? _NoteID;
[PXNote()]
public virtual Guid? NoteID
{
get
{
return this._NoteID;
}
set
{
this._NoteID = value;
}
}
#endregion
创建记录的代码:
private static bool acumaticaException(Exception e, EDImportExceptionMaint excpMaint, LingoRet850 res850)
{
excpMaint.Clear();
var except = new EDImportExcept();
except.ExceptReason = "U";
except.Active = true;
<...field assignments...>
except.OrderNbr = "";
PXNoteAttribute.SetNote(excpMaint.Exception.Cache, excpMaint.Exception.Current,
((PX.Data.PXOuterException)e).InnerMessages[0] + "-" + e.Message);
excpMaint.Exception.Insert(except);
excpMaint.Actions.PressSave();
return true;
}
答案 0 :(得分:2)
要设置记录的注释,请使用SetNote()
的{{1}}静态函数
PXNoteAttribute
如果不存在,则调用PXNoteAttribute.SetNote(Base.Item.Cache, Base.Item.Current, "Hello, World!");
也会处理添加注释记录,因此您无需在问题中设置注释值之前致电SetNote
。
P.S。还有一个GetNoteID
函数,可以让您检索笔记的当前值:
GetNote