二开案例.列表插件.读写单据参数
【应用场景】使用列表插件读写单据参数。
【案例演示】采购订单,列表界面,在列表插件中读写采购订单的单据参数。
【实现步骤】
<1>编写列表插件,实现读写单据参数的功能,代码如下。
using Kingdee.BOS;
using Kingdee.BOS.BusinessEntity.BillGlobalParam;
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
using Kingdee.BOS.Core.List.PlugIn;
using Kingdee.BOS.Core.Metadata;
using Kingdee.BOS.ServiceHelper;
using Kingdee.BOS.Util;
using System;
using System.ComponentModel;
using System.Linq;
namespace Jac.XkDemo.BOS.Business.PlugIn
{
/// <summary>
/// 【列表插件】读写单据参数
/// </summary>
[Description("【列表插件】读写单据参数"), HotUpdate]
public class ReadAndWriteBillParameterListPlugIn : AbstractListPlugIn
{
/// <summary>
/// 列表主菜单点击事件
/// </summary>
/// <param name="e"></param>
public override void BarItemClick(BarItemClickEventArgs e)
{
base.BarItemClick(e);
if (e.BarItemKey.EqualsIgnoreCase("tbReadBillParameter"))
{
// 非标参数按属性名读取
var parameterValue = ReadBillParameter(this.Context, this.View.BillBusinessInfo.GetForm().Id, "IsSameModifyMaker");
// 标准参数直接读取
var parameterValue2 = ReadBillParameter(this.Context, this.View.BillBusinessInfo.GetForm().Id).IsSameModifyMaker;
this.View.ShowMessage("单据参数【修改人与创建人一致】:" + parameterValue + "," + parameterValue2);
return;
}
if (e.BarItemKey.EqualsIgnoreCase("tbWriteBillParameter"))
{
var isOk = WriteBillParameter(this.Context, this.View.BillBusinessInfo.GetForm().Id, "IsSameModifyMaker", true);
this.View.ShowMessage(isOk ? "单据参数保存成功" : "单据参数保存失败");
return;
}
}
/// <summary>
/// 读取指定的单据参数
/// </summary>
/// <param name="ctx">上下文</param>
/// <param name="formId">单据标识</param>
/// <param name="parameterName">单据参数的实体属性名</param>
/// <returns></returns>
public static bool ReadBillParameter(Context ctx, string formId, string parameterName)
{
// 读取单据参数数据包
var parameterObj = ReadBillParameter(ctx, formId);
if (parameterObj == null)
{
throw new KDException("", "单据参数不存在,请先前往【单据参数配置】界面,找到对应单据,执行一次保存操作。");
}
var parameterData = new BillGlobalParameter(parameterObj);
// 从单据参数数据包中获取某一个参数
if (parameterData.DataEntity.DynamicObjectType.Properties.Contains(parameterName) && parameterData.DataEntity[parameterName] != null)
return Convert.ToBoolean(parameterData.DataEntity[parameterName]);
return false;
}
/// <summary>
/// 读取单据参数数据包
/// </summary>
/// <param name="ctx">上下文</param>
/// <param name="formId">单据标识</param>
/// <returns></returns>
public static BillGlobalParameter ReadBillParameter(Context ctx, string formId)
{
// 读取单据参数数据包
var parameterDatas = SystemParameterServiceHelper.LoadBillGlobalParameter(ctx, new[] { formId });
if (parameterDatas == null || parameterDatas.Length == 0)
{
return null;
}
var parameterData = new BillGlobalParameter(parameterDatas[0]);
return parameterData;
}
/// <summary>
/// 保存单据参数
/// </summary>
/// <param name="ctx">上下文</param>
/// <param name="formId">单据标识</param>
/// <param name="parameterName">单据参数的实体属性名</param>
/// <param name="parameterValue">单据参数的值</param>
/// <returns></returns>
public static bool WriteBillParameter(Context ctx, string formId, string parameterName, object parameterValue)
{
// 获取单据的元数据
var formMetadata = FormMetaDataCache.GetCachedFormMetaData(ctx, "BOS_BillGlobalParameter");
// 读取单据参数包
var oFilter = new OQLFilter();
var oFilterItem = new OQLFilterHeadEntityItem();
oFilterItem.FilterString = string.Format("FFORMID = '{0}'", formId);
oFilter.Add(oFilterItem);
var parameterDatas = BusinessDataServiceHelper.Load(ctx, "BOS_BillGlobalParameter", null, oFilter);
if (parameterDatas != null && parameterDatas.Any())
{
var parameterData = parameterDatas[0];
// 从单据参数数据包中获取某一个参数
if (parameterData.DynamicObjectType.Properties.Contains(parameterName))
{
parameterData[parameterName] = parameterValue;
var result = BusinessDataServiceHelper.Save(ctx, formMetadata.BusinessInfo, parameterData);
SystemParameterServiceHelper.ClearCacheOfBillGlobalParameter(ctx, new[] { formId });
return result.IsSuccess;
}
}
return false;
}
}
}
/*
-- 查询单据参数
SELECT * FROM T_BAS_BILLGLOBALPARAMETER
SELECT * FROM T_BAS_BILLGLOBALPARAMFIELD
SELECT * FROM T_BAS_BILLGLOBALPARAMSEARCH
*/
<2>拷贝插件组件到应用站点的WebSite\Bin目录下,重启IIS。
<3>BOSIDE扩展采购订单,列表菜单添加两个菜单项,注册列表插件,保存元数据,开发完毕。
现在可以登录业务站点,打开采购订单列表,检验一下插件效果啦。
读取单据参数:
保存单据参数:
再次读取修改后的单据参数:
【知识点】
<1>单据参数与组织无关,与单据有关,一个单据有且仅有一个单据参数。
<2>可通过【单据参数[BOS_BillGlobalParameter]】获取单据参数的某个具体参数的属性名。
<3>单据参数存储在哪个表?
SELECT * FROM T_BAS_BILLGLOBALPARAMETER
---------------------------------------------------------------------------------------------------------
【金蝶云星空BOS二次开发案例演示】https://vip.kingdee.com/article/94751030918525696
二开案例.列表插件.读写单据参数
本文2024-09-23 04:20:34发表“云星空知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-k3cloud-164688.html