【问题标题】:Setting Custom Field on new BAccount Object在新的 BAccount 对象上设置自定义字段
【发布时间】:2018-02-06 05:42:48
【问题描述】:

我正在尝试在通过 Contact BLC 中的操作 ConvertToBAccount() 创建的全新 BAccount 对象上设置自定义字段。我尝试了很多不同的事情,包括覆盖操作并尝试在操作完成后设置对象的值并导航到 BAccount BLC。我发现我无法在覆盖上设置值,因为数据库中没有记录,直到用户手动保存,当我尝试在操作后设置值时,它设置了字段,但不显示新的BAccount BLC 加载完成后屏幕上的值。

如何为通过 Contacts BLC 上的 ConvertToBAccount() 操作创建的新 BAccount 设置扩展字段?

DAC 扩展:

public class BAccountExt : PXCacheExtension<PX.Objects.CR.BAccount>
{
        #region UsrHomeCampus
        [PXDBInt]
        [PXUIField(DisplayName="Home Campus")]
        [PXSelector(typeof(Search<PX.Objects.GL.Branch.branchID>),
        typeof(PX.Objects.GL.Branch.branchCD),
        SubstituteKey = typeof(PX.Objects.GL.Branch.branchCD))]
        public virtual int? UsrHomeCampus { get; set; }
        public abstract class usrHomeCampus : IBqlField { }
        #endregion
}

BLC 代码:

public class BusinessAccountMaint_Extension : PXGraphExtension<BusinessAccountMaint>
{
    #region Event Handlers
    protected void Contact_RowSelected(PXCache cache, PXRowSelectedEventArgs e)
    {
        Contact row = (Contact)e.Row;

        if (row.ContactID > 0 && Base.CurrentBAccount.Current.BAccountID < 0)
        {
            Base.CurrentBAccount.Current.GetExtension<BAccountExt>().UsrHomeCampus = row.GetExtension<ContactExt>().UsrHomeCampus;
            //Save record in database
            Base.Actions.PressSave();
            //Cause page refresh
            Base.Actions.PressCancel();
        }
    }
    #endregion
}

【问题讨论】:

  • 您能否使用 Stack Trace 添加完整的异常。
  • 我没有得到任何异常,它只是没有为扩展字段设置值。我显示的片段只是来自 Visual Studio 中的 Watch 窗口。
  • 您的 Dac 扩展是用于 BAccount 还是联系人?您的视图名称是 CurrentBAccount,但 Dac 扩展名是 ContactExt
  • 适用于 BAccount。谢谢你抓住那个。我会在上面更正它,但情况仍然存在。它确实设置了值,但它不显示我设置的值。

标签: acumatica


【解决方案1】:

当通过ConvertToBAccount() 方法从联系人创建BAccount 时,新创建的BAccountBAccountID 被设置为ContactBAccountID 字段。

您应该以 BAccount 为例,通过查询类似的内容

BAccount bAccount = PXSelect<BAccount,Where<BAccount.bAccountID,Equal<Required<BAccount.bAccountID>>>.Select(graph,contactObject.BAccountID);

然后让你像这样扩展:

BAccountExt acc = PXCache<BAccount>.GetExtension<BAccountExt>(bAccount);

并设置您需要的值,然后以某种方式更新 BAccount,如下所示:

this.Base.BAccountsView.Update(bAccount);
this.Base.Save.Press();

【讨论】:

  • 从根本上说,Acumatica 强制用户手动保存记录。如果我自动化这个过程,你知道这可能会导致什么后果吗?
  • 我实施了您的解决方案,即使使用自动保存,它仍然没有显示价值。我不确定该字段是选择器这一事实是否会有所作为。此外,该字段未标记为提交更改。
  • 我已经尝试在上面实施您的解决方案,但它似乎不起作用。 Contact.BAccountID 将返回 -2147483647。
  • @EricP。添加 Dac 扩展的来源和你在 BLC 中的更改我会看看并回答
  • 我添加了代码。目前正在按照我的方式设置值,但除非我用浏览器刷新页面,否则新值不会显示在屏幕上。
猜你喜欢
  • 2016-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-09
  • 2011-08-04
  • 1970-01-01
相关资源
最近更新 更多