单据转换.案例.选单按照勾选顺序返回

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

单据转换.案例.选单按照勾选顺序返回

【场景】选单按照勾选顺序返回 **【案例前说明】由于需要根据每次前端点击事件返回,需要在网络环境较好的场景使用;否则会导致指令乱序,重复发送的场景。** 【案例】通过列表插件,记录行点击事件,记录勾选顺序,在关闭时返回数据 ```csharp using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; using Kingdee.BOS.Core.Enums; using Kingdee.BOS.Core.List; using Kingdee.BOS.Core.List.PlugIn; using Kingdee.BOS.Core.List.PlugIn.Args; using System; using System.Collections.Generic; using System.Linq; namespace DynamicFormPlugIn.Convert { [Kingdee.BOS.Util.HotUpdate] public class DrawMulSelectPlugIn : AbstractListPlugIn { /// /// 获取双击返回基础资料的时间(解决前端指令错乱问题) /// private DateTime? doubleClickDate; private bool isDrawMulSel = false; private readonly List<string> orderList = new List<string>(); public override void OnInitialize(InitializeEventArgs e) { isDrawMulSel = this.ListView.OpenParameter.ListType == (int)BOSEnums.Enu_ListType.SelBill; } public override void EntityRowClick(EntityRowClickEventArgs e) { if (!isDrawMulSel) return; //偶发出现doubleclik先执行,然后执行EntityRowClick,这个时候不再执行选择行事件了,200毫秒以内忽略 DateTime dtNow = DateTime.Now; if (doubleClickDate != null && (dtNow - doubleClickDate.Value).TotalMilliseconds <= 200) { doubleClickDate = null; return; } var selectInfos = this.ListView.SelectedRowsInfo; List<string> newSelectRows = new List<string>(); foreach(var row in selectInfos) { var key = GetKey(row); newSelectRows.Add(key); } for (int i = orderList.Count - 1; i >= 0; --i) { if(!newSelectRows.Contains(orderList[i])) { orderList.RemoveAt(i); } } for (int i = 0; i < newSelectRows.Count; ++i) { if (orderList.Contains(newSelectRows[i])) continue; orderList.Add(newSelectRows[i]); } } public override void ListRowDoubleClick(ListRowDoubleClickArgs e) { if (!isDrawMulSel) return; doubleClickDate = DateTime.Now; } public override void BeforeClosed(BeforeClosedEventArgs e) { if (!isDrawMulSel) return; // 判断是否返回,然后把选中行按顺序返回 if (this.View == null || this.View.ParentFormView == null) return; if (!this.View.ParentFormView.Session.ContainsKey("returnData")) return; ListSelectedRowCollection result = this.View.ParentFormView.Session["returnData"] as ListSelectedRowCollection; //按照选中重排 ListSelectedRowCollection sortResult = new ListSelectedRowCollection(); var sortCol = result.OrderBy(x => orderList.IndexOf(GetKey(x))).ToList(); for(int i=0;i<sortCol.Count;++i) { sortResult.Add(sortCol[i]); } this.View.ReturnToParentWindow(sortResult); orderList.Clear(); } private string GetKey(ListSelectedRow row) { return string.Format("{0}|{1}", row.PrimaryKeyValue, row.EntryPrimaryKeyValue); } } } ``` 【效果】 ![Image_20221111120849.webp](/download/0100c57a8efe0d7a4a9cafbf785660c6d1e6.webp) ![Image_20221111120915.webp](/download/010072d98e7e02d34c41a76c2cf12dbc2032.webp)

插件挂载在采购申请的列表插件?

单据转换.案例.选单按照勾选顺序返回

【场景】选单按照勾选顺序返回**【案例前说明】由于需要根据每次前端点击事件返回,需要在网络环境较好的场景使用;否则会导致指令乱序,重...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息