【问题标题】:Add note to custom data record in code在代码中为自定义数据记录添加注释
【发布时间】:2018-03-11 12:15:42
【问题描述】:

我正在寻找一种解决方案,以向我在自定义表中创建的数据库行添加注释。我从 Ruslan 找到了以下用于访问 noteid 的解决方案,但我不明白如何使用它来向行添加注释。我有创建行的所有代码,我只需要属性或函数调用来实际将注释文本附加到行。

================================================ ====================

要在保存新父记录时自动创建笔记记录,应在父记录插入缓存时调用静态 PXNoteAttribute.GetNoteID(PXCache cache, object data) 方法。

例如,要在保存新的 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;
    }
}

上面的代码 sn-p 可以合并到几乎任何自定义 BLC 中,只需进行几个简单的更改即可将 InventoryItem 替换为自定义 DAC。


实施Gabriel的建议后:

我似乎没有在数据库中得到任何注释。代码编译并运行良好,但据我所知没有生成注释。 note id 是在我的表中设置的,但是 note 表中没有出现数据。请查看我的代码,让我知道需要更改的内容。另外,如何将注释列放入网格中,还是在正确完成后自动变为可用?

数据库字段定义:

[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;
  }

【问题讨论】:

  • 我相信这只是生成 noteid 记录 - 如果您要查找的不是注释文本?
  • 是的,我正在寻找代码来建立笔记记录/文本和任何其他属性,以便在我的屏幕的网格上显示笔记并使其能够在弹出窗口中显示通过点击它。只是猜测,但是我需要使用上面的代码来生成笔记记录然后更新它吗?我以为会有特定的功能或属性来设置文本。
  • 问题是你设置了 Note before 实际上将except 记录插入到缓存中。插入它,然后设置注释,它就可以工作了。我还怀疑如果您只是将excpMaint.Exception.Current 替换为except,它会起作用,但仍然认为最好先插入记录(在您执行PressSave() 之前它不会命中数据库)
  • 谢谢博科普!!完全有道理,但只是您可能会错过的那些小概念之一。只是一个简单的问题。最好在 PressSave 之前还是之后设置注释?
  • 另外,我在图表中使用动态 DAC 来显示处理网格中多个表的数据。我是否必须从自定义表中获取注释,然后将其设置为动态 DAC 以便它显示?将便笺放入网格有什么特别之处吗?

标签: acumatica


【解决方案1】:

要设置记录的注释,请使用PXNoteAttributeSetNote()static 函数

PXNoteAttribute.SetNote(Base.Item.Cache, Base.Item.Current, "Hello, World!");

调用SetNote 还将负责添加不存在的注释记录,因此您不必在设置注释值之前调用GetNoteID

附:还有一个GetNote 函数可以让你检索笔记的当前值:

string note = PXNoteAttribute.GetNote(Base.Item.Cache, Base.Item.Current);

【讨论】:

  • 查看描述中添加的问题。注意仍然不起作用。
  • 请参见上面的 cmets。我可能把它们放在了错误的地方?显示备注栏时出现问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多