二开案例.分组.添加分组
【应用场景】后台添加分组数据。
【案例演示】物料列表,添加菜单,点击菜单后后台添加新的分组。
【实现步骤】
<1>编写列表插件,代码如下。
using Kingdee.BOS;
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
using Kingdee.BOS.Core.List;
using Kingdee.BOS.Core.List.PlugIn;
using Kingdee.BOS.Core.Metadata;
using Kingdee.BOS.Orm.DataEntity;
using Kingdee.BOS.ServiceHelper;
using Kingdee.BOS.Util;
using System;
using System.Collections.Generic;
using System.ComponentModel;
namespace Jac.XkDemo.BOS.Business.PlugIn
{
/// <summary>
/// 【列表插件】添加分组数据
/// </summary>
[HotUpdate]
[Description("【列表插件】添加分组数据")]
public class AddGroupDataListPlugIn : AbstractListPlugIn
{
/// <summary>
/// 分组表表名
/// </summary>
const string GroupTableName = "T_BD_MATERIALGROUP";
/// <summary>
/// 分组Id
/// </summary>
const string GroupId = "d82dac3f-43fa-4fce-9b7f-9e3280abd0d8";
public override void BarItemClick(BarItemClickEventArgs e)
{
base.BarItemClick(e);
if (e.BarItemKey.EqualsIgnoreCase("tbAddGroupData"))
{
var model = this.Model as ITreeListModel;
if (model != null)
{
// 获取列表上的分组树的当前被选中的节点
var currGroupParentId = model.CurrGroupParentId;
AddGroupData(currGroupParentId == null ? 0 : Convert.ToInt32(currGroupParentId), "666", "我是测试节点");
}
}
}
/// <summary>
/// 添加分组数据
/// </summary>
/// <param name="parentId">父分组内码</param>
/// <param name="number">分组编码</param>
/// <param name="name">分组名称</param>
private void AddGroupData(int parentId, string number, string name)
{
var metaData = (FormMetadata)MetaDataServiceHelper.Load(this.Context, "BOS_FORMGROUP");
// 创建数据分组元数据的副本,这一行代码很重要,因为不允许直接修改元数据,但是可以修改元数据的副本
metaData = (FormMetadata)ObjectUtils.CreateCopy(metaData);
metaData.BusinessInfo.GetEntity("FBillHead").TableName = GroupTableName;
var dynamicObjectType = metaData.BusinessInfo.GetDynamicObjectType(true);
var dataObject = new DynamicObject(dynamicObjectType);
dataObject["GroupId"] = GroupId;
dataObject["Number"] = number;
dataObject["Name"] = new LocaleValue(name, 2052);
dataObject["Description"] = new LocaleValue(name, 2052);
dataObject["ParentId"] = parentId;
dataObject["FullParentId"] = GetFullParentId(parentId);
var objFromDb = BusinessDataServiceHelper.Save(this.Context, metaData.BusinessInfo, new DynamicObject[] { dataObject }, "Save");
this.View.ShowMessage("分组数据已添加");
}
/// <summary>
/// 获取父节点全路径
/// </summary>
/// <param name="parentId"></param>
/// <returns></returns>
private string GetFullParentId(int parentId)
{
if (parentId <= 0)
{
return " ";
}
var sql = string.Format("SELECT FFULLPARENTID FROM {0} WHERE FID = @FID", GroupTableName);
var lstParams = new List<SqlParam>();
lstParams.Add(new SqlParam("@FID", KDDbType.Int32, parentId));
var fullParentId = DBServiceHelper.ExecuteScalar<string>(this.Context, sql, "", lstParams.ToArray());
return string.Format("{0}.{1}", fullParentId.Trim(), parentId);
}
}
}
<2>拷贝插件组件到应用站点的WebSite\Bin目录下,重启IIS。
<3>BOSIDE扩展物料,添加列表菜单,如下图。
<4>物料注册列表插件,如下图,保存元数据,开发完毕。
现在可以登录业务站点,打开物料列表,检验一下插件效果啦。
【知识点】
<1>获取分组表名:
<2>获取GroupId:
<3>分组主要涉及三张数据表格,下面以物料分组为例进行说明:
-- 分组数据主表
SELECT * FROM T_BD_MATERIALGROUP
-- 分组数据多语言表
SELECT * FROM T_BD_MATERIALGROUP_L
-- 分组数据对应的分组级次表(账表分组汇总会用到此表的数据)
SELECT * FROM T_BD_MATERIALGROUPLEVEL
【金蝶云星空BOS二次开发案例演示】https://vip.kingdee.com/article/94751030918525696
二开案例.分组.添加分组
本文2024-09-23 04:20:47发表“云星空知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-k3cloud-164710.html