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