二开案例.大文本.大文本字段赋值
【应用场景】使用插件给大文本字段赋值。
【案例演示】采购订单,单据头和单据体都新增一个大文本字段,通过插件给大文本字段赋值。
【实现步骤】
<1>编写单据插件,实现大文本字段赋值的功能。
using Kingdee.BOS.Core.Bill.PlugIn;
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
using Kingdee.BOS.Core.Metadata.FieldElement;
using Kingdee.BOS.Orm.DataEntity;
using Kingdee.BOS.Util;
using System;
using System.ComponentModel;
namespace Jac.XkDemo.BOS.Business.PlugIn
{
/// <summary>
/// 【单据插件】大文本字段赋值
/// </summary>
[Description("【单据插件】大文本字段赋值"), HotUpdate]
public class LargeTextFieldSetValueBillPlugIn : AbstractBillPlugIn
{
/// <summary>
/// 单据头大文本字段赋值
/// </summary>
/// <param name="e"></param>
public override void BarItemClick(BarItemClickEventArgs e)
{
base.BarItemClick(e);
var key = "F_Jac_LargeText1";
var dtNow = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
var dtNowTick = DateTime.Now.Ticks.ToString();
if (e.BarItemKey.EqualsIgnoreCase("tbLargeTextSetValue1"))
{
// 给大文本字段的摘要赋值
this.View.Model.SetValue(key, dtNow);
// 给大文本的详细信息赋值
var field = (LargeTextField)this.View.BillBusinessInfo.GetField(key);
field.TagDynamicProperty.SetValue(this.View.Model.DataObject, dtNowTick.GetUtf8Bytes());
this.View.UpdateView(key);
}
if (e.BarItemKey.EqualsIgnoreCase("tbLargeTextSetValue2"))
{
var field = (LargeTextField)this.View.BillBusinessInfo.GetField(key);
// 给大文本字段的摘要赋值
field.DynamicProperty.SetValue(this.View.Model.DataObject, dtNow);
// 给大文本的详细信息赋值
field.TagDynamicProperty.SetValue(this.View.Model.DataObject, dtNowTick.GetUtf8Bytes());
this.View.UpdateView(key);
}
}
/// <summary>
/// 单据体大文本字段赋值
/// </summary>
/// <param name="e"></param>
public override void EntryBarItemClick(BarItemClickEventArgs e)
{
base.EntryBarItemClick(e);
// 获取采购订单.明细信息的当前选中行数据包
DynamicObject entryRowObj;
int currentRowIndex;
if (!this.View.Model.TryGetEntryCurrentRow("FPOOrderEntry", out entryRowObj, out currentRowIndex))
{
return;
}
var key = "F_Jac_LargeText2";
var dtNow = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
var dtNowTick = DateTime.Now.Ticks.ToString();
if (e.BarItemKey.EqualsIgnoreCase("tbLargeTextSetValue8"))
{
// 给大文本字段的摘要赋值
this.View.Model.SetValue(key, dtNow, currentRowIndex);
// 给大文本的详细信息赋值
var field = (LargeTextField)this.View.BillBusinessInfo.GetField(key);
field.TagDynamicProperty.SetValue(entryRowObj, dtNowTick.GetUtf8Bytes());
}
if (e.BarItemKey.EqualsIgnoreCase("tbLargeTextSetValue9"))
{
var field = (LargeTextField)this.View.BillBusinessInfo.GetField(key);
// 给大文本字段的摘要赋值
field.DynamicProperty.SetValue(entryRowObj, dtNow);
// 给大文本的详细信息赋值
field.TagDynamicProperty.SetValue(entryRowObj, dtNowTick.GetUtf8Bytes());
this.View.UpdateView(key, currentRowIndex);
}
}
}
}
<2>拷贝插件组件到应用站点的WebSite\Bin目录下,重启IIS。
<3>登录BOSIDE,扩展采购订单,单据头和单据体分别新增一个大文本字段(F_Jac_LargeText1,F_Jac_LargeText2)。
<4>采购订单的菜单集合新增两个菜单,用于给单据头的大文本字段赋值,如下图所示。
<5>采购订单的明细信息单据体的菜单集合新增两个菜单,用于给单据体的大文本字段赋值,如下图所示。
<6>采购订单注册表单插件,保存元数据,开发完毕。
现在可以登录业务站点,打开采购订单,检验一下插件的运行效果啦。
给单据头的大文本字段赋值:
给单据体的大文本字段赋值:
【知识点】
<1>大文本字段由两部分组成:摘要和详细信息,对应在数据库表中也被拆分成两个字段存储数据。
例如字段F_Jac_LargeText1,在数据库表中被拆分为F_Jac_LargeText1 nvarchar(255)和F_Jac_LargeText1_Tag image
<2>因为大文本字段由两段组成,所以大文本赋值也是分两段完成的,给摘要赋值和给详细内容赋值是完全分开进行的。
<3>大文本的详细信息是使用字节数组存储的,所以SetValue前需要调用GetUtf8Bytes方法将字符串转换成UTF-8编码的字节数组。
【金蝶云星空BOS二次开发案例演示】https://vip.kingdee.com/article/94751030918525696
二开案例.大文本.大文本字段赋值
本文2024-09-23 04:20:39发表“云星空知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-k3cloud-164699.html