二开-列表批改功能实现

一,需求
在列表上实现批量修改选定单据的修改人,创建人等数据信息,修改选定数据行单据的所有字段类型为用户的字段。
二,实现方式
新增一个动态表单,将其作为批改按钮点击事件的弹出框, 同时通过插件获取选定源单的元数据,筛选出所有字段类型为user的字段,作为动态表单上下拉列表的动态数据构建,并且 在动态表单上设置一个基础资料为人员的基础资料。添加返回数据按钮,返回对应修改数据到父表单,更新数据库。对应的添加方式如下附件-111.doc
也可参照对应官方资料 https://wenku.my7c.com/article/360921550578870784?productLineId=1&isKnowledge=2
三,实现代码
C#源代码如下
using Kingdee.BOS;
using Kingdee.BOS.App.Data;
using Kingdee.BOS.Core.Bill.PlugIn;
using Kingdee.BOS.Core.DynamicForm;
using Kingdee.BOS.Core.DynamicForm.PlugIn;
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
using Kingdee.BOS.Core.DynamicForm.PlugIn.ControlModel;
using Kingdee.BOS.Core.List;
using Kingdee.BOS.Core.List.PlugIn;
using Kingdee.BOS.Core.Metadata;
using Kingdee.BOS.Core.Metadata.FieldElement;
using Kingdee.BOS.Orm.DataEntity;
using Kingdee.BOS.ServiceHelper;
using Kingdee.BOS.Util;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Linq;
namespace BL.K3.Plugln.APP.List
{
/// <summary>
/// 列表测试插件(挂载需要配置的列表插件)
/// </summary>
[Description("自定义列表插件-打开动态表单"), HotUpdate]
public class OpenForm:AbstractListPlugIn
{
public override void BarItemClick(BarItemClickEventArgs e)
{
base.BarItemClick(e);
//获取列表的选中行
if (e.BarItemKey.EqualsIgnoreCase("tbUpdatePerson"))
{
var lv = this.View as IListView;
if (lv == null) { return; }
var selectedRows = lv.SelectedRowsInfo;
if (selectedRows == null || selectedRows.Count == 0)
{
this.View.ShowMessage("当前没有行被选中!");
return;
}
Dictionary<string, string> indexs = new Dictionary<string, string>();
string name="";
string FieldKey = "";
for (int j = 0; j < selectedRows[0].FieldValues.Keys.Count; j++)
{
FieldKey = selectedRows[0].FieldValues.Keys.ElementAt(j).ToString();
for (int i = 0; i < selectedRows.Count; i++)
{
name = name == "" ? " " + selectedRows[i].FieldValues.Where(q => q.Key == FieldKey).First().Value.ToString() : name + "," + selectedRows[i].FieldValues.Where(q => q.Key == FieldKey).First().Value.ToString();
}
indexs.Add(FieldKey, name);
name = "";
}
DynamicFormShowParameter dynamicFormShowParameter = new DynamicFormShowParameter();
//要打开的动态表单Id
dynamicFormShowParameter.FormId = "QPUB_SCDD";
//弹出动态表单
this.View.ShowForm(dynamicFormShowParameter, result =>
{
if (result != null && result.ReturnData != null && result.ReturnData is List<Tuple<string, string>>)
{
//关闭窗体返回值
var tuple = result.ReturnData as List<Tuple<string, string>>;
//初始化SQL语句
string SQL = "";
//修改选中单据的数据
for (int k = 0; k < indexs.Count; k++)
{
if (tuple[4].Item2.ToUpper() == indexs.Keys.ElementAt(k).ToUpper())
{
SQL = string.Format("/*dialect*/UPDATE {0} SET {1} = '{2}' WHERE {3} in ({4})", tuple[0].Item2, tuple[1].Item2, tuple[2].Item2, tuple[3].Item2,indexs.Values.ElementAt(k));
DBUtils.Execute(this.Context, SQL);
this.View.Refresh();
}
}
}
});
}
}
}
[Description("自定义动态表单插件-返回修改数据"), HotUpdate]
public class ComboList : AbstractDynamicFormPlugIn
{
public override void OnInitialize(InitializeEventArgs e)
{
base.OnInitialize(e);
BindComboField();
}
/// <summary>
/// 设置下拉框数据
/// </summary>
public void BindComboField()
{
var enumList = GetEnumItems(this.Context);
//设置下拉框标识
var comboList = this.View.GetFieldEditor<ComboFieldEditor>("F_BL_UpName", 0);
if (comboList != null)
{
//添加下拉框内容
comboList.SetComboItems(enumList);
}
}
private List<EnumItem> GetEnumItems(Context ctx)
{
var enumList = new List<EnumItem>();
// 获取对应单据的元数据
var parentid = this.View.ParentFormView.BillBusinessInfo.GetForm().Id;
var billMeta = MetaDataServiceHelper.GetFormMetaData(ctx, parentid);
var obj2 = billMeta.BusinessInfo;
//获取基础资料类型为 SEC_User
va二开-列表批改功能实现
一,需求 在列表上实现批量修改选定单据的修改人,创建人等数据信息,修改选定数据行单据的所有字段类型为用户的字段。 二,实现方式...
点击下载文档文档为doc格式
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。
上一篇
已经是第一篇



