二开案例.表单插件.值更新事件

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

二开案例.表单插件.值更新事件

【应用场景】插件捕获界面上或者后台的字段的值的变化,根据值的变化进行相应的业务逻辑处理,例如携带当前字段的某些值到其它的字段上。

【案例演示】采购订单,编辑界面,捕获多种不同类型的字段的值更新事件。

【实现步骤】

<1>编写表单插件,代码如下。

using Kingdee.BOS.Core.DynamicForm.PlugIn;

using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;

using Kingdee.BOS.Core.Metadata.FieldElement;

using Kingdee.BOS.Orm.DataEntity;

using Kingdee.BOS.Util;

using Kingdee.BOS.Web.DynamicForm;

using System.ComponentModel;

using System.Linq;

using System.Text;


namespace Jac.XkDemo.BOS.Business.PlugIn

{

    /// <summary>

    /// 【表单插件】值更新事件

    /// </summary>

    [Description("【表单插件】值更新事件"), HotUpdate]

    public class DataChangedEventFormPlugIn : AbstractDynamicFormPlugIn

    {

        private StringBuilder msgs = new StringBuilder();

        private int counter = 0;


        public override void DataChanged(DataChangedEventArgs e)

        {

            base.DataChanged(e);

            if (e.Field.Key.EqualsIgnoreCase("F_Jac_Remarks") || ((DynamicWebFormView) this.View).TryGetControl("F_Jac_Remarks") == null)

            {

                return;

            }


            // 将值更新事件发生时的对应字段的新旧值输出到界面上

            var msg = string.Format("{0}\r\n字段名:{1}\r\n字段标识:{2}\r\n旧值:{3}\r\n新值:{4}\r\n"

                , counter++, e.Field.Name, e.Field.Key, GetValue(e.Field, e.OldValue), GetValue(e.Field, e.NewValue));

            msgs.Insert(0, msg);

            this.View.Model.SetValue("F_Jac_Remarks", msgs.ToString());

        }


        private string GetValue(Field field, object val)

        {

            if (val.IsNullOrEmpty())

            {

                return "";

            }


            if (field is ComboField)

            {

                return GetEnumName((ComboField)field, val);

            }


            if (val is string[])

            {

                var obj = (string[])val;

                return string.Join(",", obj);

            }


            if (val is DynamicObject)

            {

                var obj = (DynamicObject)val;

                if (field is MulAssistantField)

                {

                    obj = (DynamicObject)obj[2];


                }


                var name = "";

                var nameProperty = obj.DynamicObjectType.GetNameProperty();

                if (nameProperty != null)

                {

                    name = obj[nameProperty.Name].ToString();

                }


                return string.Format("{0}-{1}", obj[0], name);

            }


            if (val is DynamicObjectCollection)

            {

                var objs = (DynamicObjectCollection)val;

                if (objs.Count == 0)

                {

                    return "";

                }


                return string.Join(",", objs.Select(o => GetValue(field, o)));

            }


            return val.ToString();

        }


        private string GetEnumName(ComboField field, object enumValue)

        {

            var enumName = field.GetEnumItemName(enumValue);

            return string.Format("{0}-{1}", enumValue, enumName);

        }

    }

}


<2>拷贝插件组件到应用站点的WebSite\Bin目录下,重启IIS。


<3>BOSIDE扩展采购订单,添加自定义字段,设置需观察值更新事件的字段的【即时触发更新事件】属性为勾选状态,注册表单插件,保存元数据,开发完毕。


现在可以登录业务站点,打开采购订单编辑界面,检验一下插件效果啦。
















【金蝶云星空BOS二次开发案例演示】https://vip.kingdee.com/article/94751030918525696

二开案例.表单插件.值更新事件

【应用场景】插件捕获界面上或者后台的字段的值的变化,根据值的变化进行相应的业务逻辑处理,例如携带当前字段的某些值到其它的字段上。【...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息