【二开】销售订单关联收款单时选单的收款单分录列表如何显示收款单自定义字段

销售订单的收款计划里通过点击关联单号进行关联收款单做预收,选单的时候,弹出来的收款单分录列表实际上是一个动态表单Sal_ReceiveList,动态表单里的取数是通过表单插件执行的,因此,表单里展示的收款单相关字段是固定的,并不支持通过配置显示收款单自定义字段或者是当前未显示的其他字段,而实际应用中,则确实有这样的需求。

当前这样的需求,那就需要二开插件来变通处理,以下就简单介绍一下二开方案,相关思路和代码仅做参考,实际应用中还需要客户二开根据实际应用适当改写并测试应用。
二开这个动态表单的表单插件,注册进来应用,二开插件里建议重载AfterBindData事件,即在标准绑定数据后进行二次关联查询取数。

二开的基本思路是在AfterBindData事件中,遍历获取动态表单里的单据体的数据,从单据体里获取标准逻辑已返回的收款单的分录内码,以这些内码做条件,关联查询收款单的相关表,将收款单的自定义字段获取返回并和收款单分录内码拼成字典对象,形成对应关系,再用该字典跟原单据体进行匹配,将自定义字段赋值回单据体对应行显示。二开代码参考如下,代码仅做参考,实际应用中还需要客户二开根据实际应用适当改写并测试应用:
public override void AfterBindData(EventArgs e)
{
Entity entryEntity = this.View.BusinessInfo.GetEntity("FSalReceive");
DynamicObjectCollection entryList = this.View.Model.GetEntityDataObject(entryEntity);
List<long> entryIdLists = new List<long>();
foreach (var item in entryList)
{
if (item == null)
continue;
long entryId = Convert.ToInt64(item["EntryId"]); //预收单分录内码
if (entryId > 0 && !entryIdLists.Contains(entryId))
{
entryIdLists.Add(entryId);
}
}
if (entryIdLists.Count > 0)
{
#region 这一段关联收款单表重取数据,执行SQL一般不在表单插件直接执行,建议改写放到服务端插件里去
string sql = string.Format(@"select E.FENTRYID,E.自定义字段 from T_AR_RECEIVEBILLENTRY E
inner join (SELECT {0} FID FROM TABLE(fn_StrSplit(@FENTRYID, ',', 1)) B) SS on SS.FID = E.FENTRYID",
this.Context.DatabaseType != DatabaseType.MS_SQL_Server ? string.Format("/*+ cardinality({0} {1})*/", "B", entryIdLists.Count) : ""); //实际取数SQL按需编写
List<SqlParam> lstParam = new List<SqlParam>();
lstParam.Add(new SqlParam("@FENTRYID", KDDbType.udt_inttable, entryIdLists.Distinct().ToArray()));
DynamicObjectCollection result = DBUtils.ExecuteDynamicObject(this.Context, sql, null, null, CommandType.Text, lstPara
【二开】销售订单关联收款单时选单的收款单分录列表如何显示收款单自定义字段
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。



