【问题标题】:Fill value of selector field into another field in Acumatica ERP System将选择器字段的值填充到 Acumatica ERP 系统中的另一个字段中
【发布时间】:2019-08-28 12:51:08
【问题描述】:

我已经为屏幕固定资产创建了新的自定义字段。以下代码是我的 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
        [PXDBString(50)]
        [PXUIField(DisplayName = "Kode Area")]
        [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.buildingID),
                typeof(KodeAreaMaster.status))]
        public virtual string UsrKodeArea { get; set; }
        public abstract class usrKodeArea : IBqlField { }
        #endregion

        #region UsrDeskripsiArea
        [PXDBString(75)]
        [PXUIField(DisplayName = "Deskripsi Area")]
        public virtual string UsrDeskripsiArea { get; set; }
        public abstract class usrDeskripsiArea : IBqlField { }
        #endregion
    }
}

我需要将所选值填充到当前屏幕的另一个附加字段中,请看以下截图:

我需要将选择器字段(弹出)中的 Deskripsi Area 值填充到 Deskripsi Area 字段中。

我已经尝试了以下代码:

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using PX.Common;
using PX.Data;
using PX.Objects.CS;
using PX.Objects.CR;
using PX.Objects.CM;
using PX.Objects.GL;
using PX.Objects.AP;
using PX.Objects.EP;
using PX.Objects.IN;
using PX.Objects.FA.Overrides.AssetProcess;
using PX.Objects;
using PX.Objects.FA;

namespace SGLCustomizeProject
{
    public class AssetMaint_Extension : PXGraphExtension<AssetMaint>
    {
        public virtual void _(Events.FieldUpdated<FALocationHistory, FALocationHistoryExtension.usrKodeArea> e)
        {
            var row = e.Row;
            var ext = row.GetExtension<FALocationHistoryExtension>();
            e.Cache.SetValue<FALocationHistoryExtension.usrDeskripsiArea>(row, ext.UsrKodeArea);
        }
    }
}

上面这段代码已经工作了,但结果是当我选择 Kode Area 字段时,它也填充到了 Deskripsi Area 字段。我的目标是用选择器字段中的相同字段(Deskripsi 区域)填充 Deskripsi 区域。

我尝试使用以下代码更改上面的代码:

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using PX.Common;
using PX.Data;
using PX.Objects.CS;
using PX.Objects.CR;
using PX.Objects.CM;
using PX.Objects.GL;
using PX.Objects.AP;
using PX.Objects.EP;
using PX.Objects.IN;
using PX.Objects.FA.Overrides.AssetProcess;
using PX.Objects;
using PX.Objects.FA;

namespace SGLCustomizeProject
{
    public class AssetMaint_Extension : PXGraphExtension<AssetMaint>
    {
        public virtual void _(Events.FieldUpdated<FALocationHistory, FALocationHistoryExtension.usrKodeArea> e)
        {
            var row = e.Row;
            var ext = row.GetExtension<FALocationHistoryExtension>();
            e.Cache.SetValue<FALocationHistoryExtension.usrDeskripsiArea>(row, ext.UsrDeskripsiArea);
        }
    }
}

但它不起作用。有什么我忘记的步骤吗?

【问题讨论】:

标签: c# acumatica


【解决方案1】:

ALocationHistoryExtension_UsrKodeArea_FieldUpdated 更改为ALocationHistory_UsrKodeArea_FieldUpdated

protected virtual void FALocationHistory_UsrKodeArea_FieldUpdated(PXCache sender, PXFieldUpdatedEventArgs e)
    {
        if (e.Row is FALocationHistory)
        {
            sender.SetDefaultExt<FALocationHistoryExtension.usrDeskripsiArea>(e.Row);
        }
    }   

To Override an Event Handler

【讨论】:

  • 感谢您的回答。我已经尝试了您的建议,错误消息消失了,但它不起作用。
  • 在您的 aspx 页面检查中,您已将 UsrKodeArea 字段的提交更改设置为 true
  • 我为 UsrKodeArea 字段设置了 CommitChanges=true。
【解决方案2】:
  1. 使用 xxx_fieldUpdated 事件
  2. 在您的 aspx 页面检查中,您已将 commitchanges 设置为 true
  3. [通常是可选的]有时需要设置 autorefresh = true

从 2017 R2 开始,您也可以使用这种方法:

    public virtual void _(Events.FieldUpdated<FALocationHistory, FALocationHistoryExtension.usrKodeArea> e)
    {
        var row = e.Row;
        var ext = row.GetExtension<FALocationHistoryExtension>();
        e.Cache.SetValue<FALocationHistoryExtension.usrDeskripsiArea>(row, ext.UsrKodeArea);
        var KodeAreaMaster =
            PXSelect<KodeAreaMaster, Where<KodeAreaMaster.roomCD, Equal<Required<KodeAreaMaster.roomCD>>>>
                .Select(Base, ext.UsrKodeArea).First().GetItem<KodeAreaMaster>();
        e.Cache.SetValueExt<FALocationHistoryExtension.usrDeskripsiArea>();

    }

【讨论】:

  • 我已经听从了你的建议,但还是有错误。请参阅我上面的更新代码。谢谢。
  • 试试这个方法
  • 我已经听从了你的建议,请查看我更新的问题。谢谢。
  • 哦,你说的是额外的任务。可以通过从数据库读取并通过 e.Cache.SetValueExt 分配值来实现附加分配
  • 我已经进行了一些更改,但为了进一步改进,请创建新问题
【解决方案3】:

我使用以下代码来提供我的目标。感谢大家的所有回应。 :)

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using PX.Common;
using PX.Data;
using PX.Objects.CS;
using PX.Objects.CR;
using PX.Objects.CM;
using PX.Objects.GL;
using PX.Objects.AP;
using PX.Objects.EP;
using PX.Objects.IN;
using PX.Objects.FA.Overrides.AssetProcess;
using PX.Objects;
using PX.Objects.FA;


namespace SGLCustomizeProject
{
    public class AssetMaint_Extension : PXGraphExtension<AssetMaint>
    {
        public virtual void _(Events.FieldUpdated<FALocationHistory, FALocationHistoryExtension.usrKodeArea> e)
        {
            var row = e.Row;
            var ext = row.GetExtension<FALocationHistoryExtension>();
            if (ext.UsrKodeArea != null)
            {
                e.Cache.SetValue<FALocationHistoryExtension.usrDeskripsiArea>(row, ext.UsrKodeArea);
                var kodeAreaMaster = PXSelect<KodeAreaMaster,
                                 Where<KodeAreaMaster.roomCD,
                                 Equal<Required<KodeAreaMaster.roomCD>>>>
                                 .Select(Base, ext.UsrKodeArea).First().GetItem<KodeAreaMaster>();
                e.Cache.SetValueExt<FALocationHistoryExtension.usrDeskripsiArea>(row, kodeAreaMaster.RoomDescription);
            }
        }

        public virtual void _(Events.FieldUpdated<FALocationHistory.buildingID> e)
        {
            var row = e.Row as FALocationHistory;
            var ext = row.GetExtension<FALocationHistoryExtension>();

            if (row.BuildingID != null)
            {
                if (ext.UsrKodeArea != null)
                {
                    var kodeAreaMaster = PXSelect<KodeAreaMaster,
                                 Where<KodeAreaMaster.roomCD,
                                 Equal<Required<KodeAreaMaster.roomCD>>>>
                                 .Select(Base, ext.UsrKodeArea).First().GetItem<KodeAreaMaster>();
                    if (row.BuildingID == kodeAreaMaster.BuildingID)
                    {
                        return;
                    }
                    else
                    {
                         e.Cache.SetValueExt<FALocationHistoryExtension.usrKodeArea>(row, null);
                        e.Cache.SetValueExt<FALocationHistoryExtension.usrDeskripsiArea>(row, null);
                    }
                }
            }
            else
            {
                e.Cache.SetValueExt<FALocationHistoryExtension.usrKodeArea>(row, null);
                e.Cache.SetValueExt<FALocationHistoryExtension.usrDeskripsiArea>(row, null);
            }
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-01
    • 1970-01-01
    • 2017-05-05
    • 1970-01-01
    • 2019-06-12
    • 1970-01-01
    • 2011-03-18
    • 1970-01-01
    相关资源
    最近更新 更多