将usrfield添加到POLink网格POLine3 PXProjection

时间:2016-12-14 00:44:23

标签: acumatica

我正在尝试将POOrderExt中的usrfield添加到SOOrderEntry-> POLink上的网格中。我尝试通过自定义程序添加一个新字段(它试图在数据类中创建字段:SO.POLine3)。

[PXDBDate(BqlField = typeof(POOrderExt.usrFactDate))]
[PXUIField(DisplayName = "Factory Confirmed", Enabled = false)]

error message from customizer

它失败了,我发现由于PXProjection,这在技术上等同于SQL视图,所以它没有专用的DAC。有没有办法可以将POLine3实现附加到我的扩展类中,或者我是否必须创建一个全新的可序列化并更改网格Datamember?

编辑:我已实施Dac扩展

namespace PX.Objects.SO{
public class POLine3Ext: PXCacheExtension<PX.Objects.SO.POLine3>{



        #region UsrCustomField


        [PXString][PXUIField(DisplayName="Custom Field")]
        public virtual string UsrCustomField{get;set;}
        public abstract class usrCustomField : IBqlField{}

    #endregion

   #region UsrFactoryConfirmedDate
    [PXDBDate]
    [PXUIField(DisplayName = "FactoryConfirmedDate")]

    public virtual DateTime? UsrFactoryConfirmedDate { get; set; }
    public abstract class usrFactoryConfirmedDate : IBqlField { }
   #endregion



}}

这是我的用户字段的字段默认事件

    protected virtual void POLine3_UsrFactoryConfirmedDate_FieldDefaulting(PXCache sender, PXFieldDefaultingEventArgs e)
    {
        POLine3 row = (POLine3)e.Row;
        if (row == null) return;
        POLine3Ext rowE = PXCache<POLine3>.GetExtension<POLine3Ext>(row);

        POOrder pRow = PXSelect<POOrder, Where<POOrder.orderNbr, Equal<Required<POLine3.orderNbr>>>>
                            .Select(Base, row.OrderNbr);
        POOrderExt pRowExt = PXCache<POOrder>.GetExtension<POOrderExt>(pRow);

        if (pRow == null) return;
        e.NewValue = pRowExt.UsrFactoryConfirmedDate;
        e.Cancel = true;
    }

正如我在下面的Hybriddzz帖子中的评论中提到的,当我创建PXDBDate字段时, 操作数数据类型null对于max operator 无效。它不会让我打开POLink动作来查看网格。

1 个答案:

答案 0 :(得分:1)

您可以自己为DAC POLine3编写扩展名。

参考帮助&gt;定制&gt; Func Customization的例子&gt;添加数据字段&gt;从代码中添加数据字段

从代码添加数据字段

如果使用MS Visual Studio中的自定义代码,则可以在DAC扩展代码中定义新数据字段,然后在表单上创建控件。