在代码

时间:2018-03-06 22:39:51

标签: acumatica

我正在寻找一种解决方案,为我在自定义表格中创建的数据库行添加注释。我从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;
  }

1 个答案:

答案 0 :(得分:2)

要设置记录的注释,请使用SetNote()的{​​{1}}静态函数

PXNoteAttribute

如果不存在,则调用PXNoteAttribute.SetNote(Base.Item.Cache, Base.Item.Current, "Hello, World!"); 也会处理添加注释记录,因此您无需在问题中设置注释值之前致电SetNote

P.S。还有一个GetNoteID函数,可以让您检索笔记的当前值:

GetNote