二开案例.表单插件.值更新事件
【应用场景】插件捕获界面上或者后台的字段的值的变化,根据值的变化进行相应的业务逻辑处理,例如携带当前字段的某些值到其它的字段上。
【案例演示】采购订单,编辑界面,捕获多种不同类型的字段的值更新事件。
【实现步骤】
<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
二开案例.表单插件.值更新事件
本文2024-09-23 04:20:31发表“云星空知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-k3cloud-164685.html