如何解决Acumatica : 是否可以在 AR521000 屏幕中自定义网格?
首先,对不起我的英语!!!
我需要自定义屏幕 AR521000 中的网格 (DunningLetterList)。
在这个网格中,我们有 BAccountid。在数据库中,每个 BAccountId(客户)默认选中一名(且只有一名)销售员(CustomerMaint 的“Salespersons”选项卡中的“Default”复选框)。
我需要为列表中出现的每个客户在 DunningLetterList 中添加此默认销售人员的姓名。
知道这是一个进程屏幕,这可能吗?如果可能,我该怎么做?
提前致谢!!
解决方法
恐怕没有不影响性能的简单解决方案。那是因为网格中的行没有像往常一样插入缓存中,而是在数据视图委托中生成并添加了 cache.Hold(row);
因此,我找到的唯一解决方案是在 RowSelected 上添加销售人员的姓名。 (!) 请注意,Acumatica 自定义最佳实践不建议这样做(尽管您可能会在这里和那里找到此类选择)。只是让您知道,SQL 生成的查询是 SELECT TOP (1)。
业务逻辑的定制:
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using PX.Data;
using PX.Objects.CM;
using PX.Objects.CS;
using PX.Objects.GL;
using PX.SM;
using static PX.Objects.Common.Extensions.CollectionExtensions;
using PX.Objects;
using PX.Objects.AR;
using ARDunningLetterList = PX.Objects.AR.ARDunningLetterProcess.ARDunningLetterList;
namespace PX.Objects.AR
{
public class ARDunningLetterListSP : PXCacheExtension<ARDunningLetterList>
{
#region SalesPerson
public abstract class salesPerson : PX.Data.BQL.BqlString.Field<salesPerson> { }
[PXString(60)]
[PXUIField(DisplayName = "Sales Person")]
public virtual string SalesPerson { get; set; }
#endregion
}
public class ARDunningLetterProcess_Extension : PXGraphExtension<ARDunningLetterProcess>
{
public virtual void ARDunningLetterList_RowSelected(PXCache sender,PXRowSelectedEventArgs e)
{
ARDunningLetterList row = e.Row as ARDunningLetterList ;
if (row == null) return;
SalesPerson sp = PXSelectJoin<SalesPerson,InnerJoin<CustSalesPeople,On<SalesPerson.salesPersonID,Equal<CustSalesPeople.salesPersonID>>>,Where<CustSalesPeople.bAccountID,Equal<Required<CustSalesPeople.bAccountID>>,And<CustSalesPeople.isDefault,Equal<True>>>>.SelectSingleBound(this.Base,null,row.BAccountID);
var rowExt = row.GetExtension<ARDunningLetterListSP>();
rowExt.SalesPerson = sp?.Descr;
}
}
}
然后在网格中添加自定义字段。
注意:我也尝试过其他解决方案(例如覆盖数据视图(添加联接表)、委托或使用属性来计算值,但我没有运气)。
,我知道这并不容易!! 感谢您的回答和研究!!
效果很好!!
你知道为什么我不能过滤或排序这个列吗?我添加了“AllowFilter”和“AllowSort”属性,但它不起作用。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。