二开案例.列表插件.读写单据参数

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

二开案例.列表插件.读写单据参数

【应用场景】使用列表插件读写单据参数。

【案例演示】采购订单,列表界面,在列表插件中读写采购订单的单据参数。

【实现步骤】

<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

二开案例.列表插件.读写单据参数

【应用场景】使用列表插件读写单据参数。【案例演示】采购订单,列表界面,在列表插件中读写采购订单的单据参数。【实现步骤】<1>编写列表...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息