单据转换.案例.选单按照勾选顺序返回
【场景】选单按照勾选顺序返回
**【案例前说明】由于需要根据每次前端点击事件返回,需要在网络环境较好的场景使用;否则会导致指令乱序,重复发送的场景。**
【案例】通过列表插件,记录行点击事件,记录勾选顺序,在关闭时返回数据
```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)
插件挂载在采购申请的列表插件?
单据转换.案例.选单按照勾选顺序返回
【场景】选单按照勾选顺序返回**【案例前说明】由于需要根据每次前端点击事件返回,需要在网络环境较好的场景使用;否则会导致指令乱序,重...
点击下载文档
本文2024-09-16 18:35:15发表“云星空知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-k3cloud-23120.html
您需要登录后才可以发表评论, 登录登录 或者 注册
最新文档
热门文章