业务流.二开案例.上下查、全流程跟踪列表按照整单显示

栏目:云星空知识作者:金蝶来源:金蝶云社区发布:2024-09-16浏览:1

业务流.二开案例.上下查、全流程跟踪列表按照整单显示

【场景】上下查、全流程跟踪只会显示和当前流程有关的分录行数据,假设上游单据有5行分录,仅下推了1行分录到下游,最终在下游上查、全流程跟踪只会显示和此单有关系的数据,上游单据只会显示1行分录(按分录过滤) 存在客户场景需要按照整单显示上游单据 【案例】插件二开,采购申请单下推采购订单,采购订单上查时,支持显示采购申请单的整单 <0>数据准备 ![Image_20230110214610.webp](/download/0100e0d87981381949ffa1666ac1bf3c7a5f.webp) ![Image_20230110214630.webp](/download/010092067b0f75314cdb92c3411cddea5131.webp) <1>验证上查、全流程,仅显示一行分录 ![Image_20230110214726.webp](/download/0100c7d2d5ba379448eea8e637b97ff2cf85.webp) ![Image_20230110215128.webp](/download/0100b0f256c70f974d07937a65bdd5d19140.webp) <2>增加菜单【显示整单】 ![Image_20230110214917.webp](/download/01005e7a86e29ef649b88c112bdb1b954329.webp) ```csharp using Kingdee.BOS; using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; using Kingdee.BOS.Core.List.PlugIn; using Kingdee.BOS.Core.List.PlugIn.Args; using Kingdee.BOS.Core.Metadata.FormElement; using Kingdee.BOS.Core.SqlBuilder; using Kingdee.BOS.Orm.DataEntity; using Kingdee.BOS.Util; using System; using System.Collections.Generic; using System.Linq; namespace DynamicFormPlugIn.BillConvert { [Kingdee.BOS.Util.HotUpdate] [System.ComponentModel.Description("全流程跟踪列表按照整单显示")] public class BusinessFlowTrackListPlugIn : AbstractListPlugIn { private bool isShowBillByFilter = false; private List<object> billIds = new List<object>(); public override void AfterCreateSqlBuilderParameter(SqlBuilderParameterArgs e) { base.AfterCreateSqlBuilderParameter(e); if (isShowBillByFilter) { PrepareBillIds(); PrepareSelectBillFilter(e); } isShowBillByFilter = false; } /// <summary> /// 准备关联的单据内码 /// </summary> private void PrepareBillIds() { /* * 根据过滤方案获取所有内码集合 */ DynamicObjectCollection rows = this.ListView.Model.GetPKData(); billIds.Clear(); foreach(var row in rows) { billIds.Add(row[0]); } } /// <summary> /// 重置查询,改为按照单据内码整单返回 /// </summary> /// <param name="e"></param> private void PrepareSelectBillFilter(SqlBuilderParameterArgs e) { //重置联查表 e.sqlBuilderParameter.ExtJoinTables.Clear(); e.sqlBuilderParameter.SqlParams.Clear(); if (billIds.Count == 0) { e.sqlBuilderParameter.FilterClauseWihtKey = "1=0"; return; } Form form = this.ListView.BillBusinessInfo.GetForm(); var pkFieldType = form.PkFieldType; var isIntPk = pkFieldType == EnumPkFieldType.INT || pkFieldType == EnumPkFieldType.LONG; if (billIds.Count == 1) { e.sqlBuilderParameter.FilterClauseWihtKey = string.Format("{0}={1}", form.PkFieldName, isIntPk ? billIds[0] : string.Format("'{0}'", billIds[0])); } if (billIds.Count <= 20) { e.sqlBuilderParameter.FilterClauseWihtKey = string.Format("{0} in ({1})", form.PkFieldName, isIntPk ? string.Join(",", billIds) : string.Join(",", billIds.Select(x => string.Format("'{0}'", x).ToList()))); } //关联内码多时使用表变量联查 e.sqlBuilderParameter.FilterClauseWihtKey = string.Empty; var distinctIds = billIds.Distinct().ToList(); string tableName; var tableNameAs = string.Format("TEPFIDS_{0}", StringUtils.GetRandomString()); var paramName = string.Format("@KDFIDS_{0}", StringUtils.GetRandomString()); tableName = StringUtils.GetSqlWithCardinality(distinctIds.Count, paramName, isIntPk ? 1 : 2); var joinTable1 = new ExtJoinTableDescription { TableName = tableName, JoinOption = QueryBuilderParemeter.JoinOption.InnerJoin, TableNameAs = tableNameAs, FieldName = "FID", ScourceKey = form.PkFieldName }; Kingdee.BOS.SqlParam sqlParam = new Kingdee.BOS.SqlParam(paramName, isIntPk ? KDDbType.udt_inttable : KDDbType.udt_varchartable, distinctIds.ToArray()); e.sqlBuilderParameter.ExtJoinTables.Add(joinTable1); e.sqlBuilderParameter.SqlParams.Add(sqlParam); } public override void BarItemClick(BarItemClickEventArgs e) { if (!IsTrackList()) return; if (!string.Equals(e.BarItemKey, "tb_TrackShowWholeBill", StringComparison.OrdinalIgnoreCase)) return; isShowBillByFilter = true; this.ListView.RefreshByFilter(); } private bool IsTrackList() { //是否上下查、全流程跟踪列表 if (this.ListView.OpenParameter.ListType != (int)Kingdee.BOS.Core.Enums.BOSEnums.Enu_ListType.TrackBill) { return false; } //针对全流程跟踪列表 object para = this.View.OpenParameter.GetCustomParameter("OpenSource"); if (para == null || !string.Equals(para.ToString(), "Track", StringComparison.OrdinalIgnoreCase)) { return false; } return true; } } } ``` ```python import clr clr.AddReference('Kingdee.BOS.Core') from System import * from Kingdee.BOS.Core.Bill import BillShowParameter from Kingdee.BOS.Core.Metadata import OperationStatus from Kingdee.BOS.Core.Metadata.FormElement import EnumPkFieldType def BarItemClick(e): if(this.ListView.OpenParameter.ListType != 4 ): return; if(not e.BarItemKey.Equals("tb_TrackShowWholeBill",StringComparison.OrdinalIgnoreCase)): return; this.View.Session['Custom_isShowBillByFilter'] = True; this.ListView.RefreshByFilter(); def AfterCreateSqlBuilderParameter(e): if (not this.View.Session.ContainsKey("Custom_isShowBillByFilter")): return; if (this.View.Session['Custom_isShowBillByFilter'] == False): return; rows = this.ListView.Model.GetPKData(); ##干预过滤 form = this.ListView.BillBusinessInfo.GetForm(); pkFieldType = form.PkFieldType; isIntPk = pkFieldType == EnumPkFieldType.INT or pkFieldType == EnumPkFieldType.LONG; e.sqlBuilderParameter.ExtJoinTables.Clear(); e.sqlBuilderParameter.SqlParams.Clear(); if(rows.Count == 0): e.sqlBuilderParameter.FilterClauseWihtKey = "1=0"; elif (rows.Count == 1): rowObj = rows[0]; e.sqlBuilderParameter.FilterClauseWihtKey = form.PkFieldName + "=" + (str(rowObj[0]) if isIntPk else ("'"+rowObj[0]+"'")); else: billIds = []; for idx in range(rows.Count): rowObj = rows[idx]; billId = (str(rowObj[0]) if isIntPk else ("'"+rowObj[0]+"'")); billIds.Add(billId); e.sqlBuilderParameter.FilterClauseWihtKey = form.PkFieldName + " in (" +",".join(billIds) +")"; this.View.Session['Custom_isShowBillByFilter'] = False; ``` 【效果】再点击菜单显示整单后,能够显示所有分录; ![Image_20230110215211.webp](/download/010044ddd1b7fbef459f9e6459d76af54a6d.webp) 重新点击搜索,可继续按照关联数据查询

业务流.二开案例.上下查、全流程跟踪列表按照整单显示

【场景】上下查、全流程跟踪只会显示和当前流程有关的分录行数据,假设上游单据有5行分录,仅下推了1行分录到下游,最终在下游上查、全流程...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息