【问题标题】:Value of new customize field in Acumatica ERP doesn't save to databaseAcumatica ERP 中新自定义字段的值未保存到数据库
【发布时间】:2019-08-23 11:34:03
【问题描述】:

我已经在屏幕 FA303000(固定资产)中创建了新的附加自定义字段。 我使用以下代码创建了这个自定义字段:

DAC 扩展

using PX.Data;
using PX.Objects.CR;
using PX.Objects.CS;
using PX.Objects.EP;
using PX.Objects.FA;
using PX.Objects.GL;
using PX.Objects;
using System.Collections.Generic;
using System;

namespace SGLCustomizeProject
{
    public class FALocationHistoryExtension : PXCacheExtension<PX.Objects.FA.FALocationHistory>
    {
        #region UsrKodeArea
        [PXString]
        [PXUIField(DisplayName = "Kode Area")]
        [PXSelector(typeof(Search<KodeAreaMaster.roomCD, Where<KodeAreaMaster.status, Equal<statusActive>>>),
                typeof(KodeAreaMaster.roomCD), 
                typeof(KodeAreaMaster.roomDescription), 
                typeof(KodeAreaMaster.status))]
        public virtual string UsrKodeArea { get; set; }
        public abstract class usrKodeArea : IBqlField { }
        #endregion
    }
}

下面的截图是自定义后的布局。

第一个问题是事务保存后,新的自定义字段的值没有保存到数据库中。

第二个问题是如何根据当前屏幕中的另一个字段过滤选择器字段。例如,从这种情况下,我是否需要根据当前建筑物过滤 Kode 区域?

我已经设置了字段 UsrKodeArea 和 UsrDeskripsiArea 的属性,如下图所示:

【问题讨论】:

    标签: c# acumatica


    【解决方案1】:

    您的自定义字段正在使用 [PXString],请尝试更改为 [PXDBString] 以绑定到数据库。对于 Building 和 KodeArea 的相关下拉列表,CommitChanges=true 应该存在于 aspx 标记中的 BuildingID PXSelector 标记上,类似于:

     <px:PXSelector ID="edBuildingID" runat="server" DataField="BuildingID" CommitChanges="true" DisplayMode="Text" />
    

    确保您的 KodeArea 选择器具有 AutoRefresh=true,类似于此处对 Branch/Building 的回答 [假设这些是相关的下拉菜单]: Specified Cast is not Valid in new Master Screen of Acumatica ERP System

    重要的是,代码中的 KodeArea PXSelector 应该限制为 BuildingID 的 Current 选择,例如:

      [PXSelector(typeof(Search<KodeAreaMaster.roomCD, 
    Where<KodeAreaMaster.status, Equal<statusActive>, 
        And<KodeAreaMaster.buildingID, 
            Equal<Current<FALocationHistory.buildingID>>>>>),
                typeof(KodeAreaMaster.roomCD), 
                typeof(KodeAreaMaster.roomDescription), 
                typeof(KodeAreaMaster.status))]
    

    【讨论】:

    • 感谢您的回复,我已经尝试过您的建议,如果我必须先使用选定的 buildingID 保存当前的固定资产,它会起作用。然后我可以根据当前 BuildingID 选择 KodeArea。是否可以根据任何选定的 BuildingID 过滤 KodeArea 字段,而不仅仅是基于尚未保存的当前 BuildingID 事件?
    • 标记中的 KodeArea px:PXSelector 标签上是否存在 AutoRefresh=true? KodeArea 选项列表 (KodeAreaMaster.roomCD) 是否会随着所选 BuildingID 的更改而变化?选择新的 BuildingID 时,还要在代码中包含 FALocationHistory_BuildingID_FieldUpdated 事件处理程序以设置 KodeAreaMaster.roomCD = null 以防止 BuildingID/RoomCD 不匹配。事件处理程序可能需要方法签名中的委托来调用 AssetMaint 图中的任何底层事件。
    • 我已经为 KodeArea pxselector 字段设置了 AutoRefresh=true,请参阅上面我更新的问题。关于 FALocationHistory_BuildingID_FieldUpdated 事件处理程序,您能否显示代码示例?谢谢。
    • 事件看起来像: public virtual void FALocationHistory_BuildingID_FieldUpdated(PXCache cache, PXFieldUpdatedEventArgs e) { FALocationHistory row = (FALocationHistory)e.Row; if (row != null) { // 重置 row.usrRoomCD = null; } }
    • 随着事件,添加断点并调试以确保 BuildingID 确实在变化。如果仍然存在问题,请查看 AssetMaint 图形代码(App_Data >> Code Repository >> PX.Objects >> FA 文件夹)以了解可能影响行为的因素。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-14
    相关资源
    最近更新 更多