Acumatica 在新BAccount对象上设置自定义字段

Acumatica 在新BAccount对象上设置自定义字段,acumatica,Acumatica,我试图在通过Contact BLC中的action ConvertToAccount()创建的全新BAccount对象上设置自定义字段。我尝试了很多不同的事情,包括重写操作,以及在操作完成并导航到BAccount BLC后尝试设置对象的值。我发现我无法在覆盖上设置值,因为在用户手动保存之前,数据库中没有记录,并且当我尝试在操作后设置值时,它会设置字段,但在加载BAccount BLC时不会在屏幕上显示新值 如何为通过Contacts BLC上的ConvertToAccount()操作创建的新BA

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

如何为通过Contacts BLC上的ConvertToAccount()操作创建的新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
}
公共类BAccountExt:PXCacheExtension
{
#乌斯罗梅坎普斯地区
[PXDBInt]
[PXUIField(DisplayName=“主校园”)]
[PX选择器(类型)(搜索),
类型(PX.Objects.GL.Branch.branchCD),
SubstituteKey=typeof(PX.Objects.GL.Branch.branchCD))]
公共虚拟int?UsrHomeCampus{get;set;}
公共抽象类usrHomeCampus:IBqlField{}
#端区
}
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
}
公共类BusinessAccountMaint_扩展:pxGrapherExtension
{
#区域事件处理程序
已选择受保护的无效联系人(PXCache缓存,PXRowSelectedEventArgs e)
{
联系人行=(联系人)e.row;
if(row.ContactID>0&&Base.CurrentBAccount.Current.BAccountID<0)
{
Base.CurrentBAccount.Current.GetExtension().UsrHomeCampus=row.GetExtension().UsrHomeCampus;
//在数据库中保存记录
Base.Actions.PressSave();
//导致页面刷新
Base.Actions.PressCancel();
}
}
#端区
}

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

您应该以BAccount为例,查询如下内容

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

当通过
convertobaccount()
方法从联系人创建
BAccount
时,新创建的
BAccount
BAccountID
被设置为
Contact
BAccountID
字段

您应该以BAccount为例,查询如下内容

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


你能用堆栈跟踪添加完整的异常吗?我没有得到任何异常,它只是没有为扩展字段设置值。我显示的片段只是来自Visual Studio中的Watch窗口。您的Dac扩展是为BAccount还是为Contact?视图的名称为CurrentBAccount,但Dac扩展名为ContactExtIt,用于BAccount。谢谢你的关注。我将在上面纠正它,但情况仍然存在。它确实设置了值,但没有显示我设置的值。您可以用堆栈跟踪添加完整异常吗?我没有得到任何异常,只是没有为扩展字段设置值。我显示的片段只是来自Visual Studio中的Watch窗口。您的Dac扩展是为BAccount还是为Contact?视图的名称为CurrentBAccount,但Dac扩展名为ContactExtIt,用于BAccount。谢谢你的关注。我将在上面纠正它,但情况仍然存在。它确实设置了值,但不显示我设置的值。基本上,Acumatica强制用户手动保存记录。如果我将此过程自动化,您知道这可能会导致什么后果吗?我实施了您的解决方案,即使使用了自动保存,它仍然无法显示其价值。我不确定字段是选择器这一事实是否会产生影响。此外,该字段未标记为提交更改。我已尝试实现上述解决方案,但它似乎不起作用。Contact.BAccountID返回时为-2147483647@EricP。添加Dac扩展的源代码和您在BLC中的更改,我将查看并回答我添加的代码。目前,该值是按我的方式设置的,但新值不会显示在屏幕上,除非我使用浏览器刷新页面。基本上,Acumatica强制用户手动保存记录。如果我将此过程自动化,您知道这可能会导致什么后果吗?我实施了您的解决方案,即使使用了自动保存,它仍然无法显示其价值。我不确定字段是选择器这一事实是否会产生影响。此外,该字段未标记为提交更改。我已尝试实现上述解决方案,但它似乎不起作用。Contact.BAccountID返回时为-2147483647@EricP。添加Dac扩展的源代码和您在BLC中的更改,我将查看并回答我添加的代码。当前,该值是按我的方式设置的,但新值不会显示在屏幕上,除非我使用浏览器刷新页面。
this.Base.BAccountsView.Update(bAccount);
this.Base.Save.Press();