二开案例.表单插件.辅助资料联动赋值
【应用场景】某些辅助资料字段之间有父子关系,比如国家、地区、省份、城市,当给子级辅助资料字段赋值时,可以自动给其父项辅助资料字段赋值。
【案例演示】采购订单,新增国家、地区、省份、城市四个辅助资料字段,当给城市赋值时,自动回填该城市对应的国家、地区、省份。
【实现步骤】
<1>编写表单插件,代码如下。
using Kingdee.BOS;
using Kingdee.BOS.App.Data;
using Kingdee.BOS.Core.DynamicForm.PlugIn;
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
using Kingdee.BOS.Util;
using System;
using System.ComponentModel;
namespace Jac.XkDemo.BOS.Business.PlugIn
{
/// <summary>
/// 【表单插件】辅助资料联动赋值
/// </summary>
[Description("【表单插件】辅助资料联动赋值"), HotUpdate]
public class AssistantFieldSetValueForParentTemplateFormPlugIn : AbstractDynamicFormPlugIn
{
public override void DataChanged(DataChangedEventArgs e)
{
base.DataChanged(e);
if (e.Field.Key.Equals("F_Jac_Assistant_City", StringComparison.OrdinalIgnoreCase))
{
var id = e.NewValue as string;
if (string.IsNullOrWhiteSpace(id))
{
return;
}
var sql = @"
-- 查询城市以及该城市所属的省份、地区、国家
SELECT a.FENTRYID AS 城市内码--,a.FNUMBER AS 城市编码,b.FDATAVALUE AS 城市名称
,c.FENTRYID AS 省份内码--,c.FNUMBER AS 省份编码,d.FDATAVALUE AS 省份名称
,e.FENTRYID AS 地区内码--,e.FNUMBER AS 地区编码,f.FDATAVALUE AS 地区名称
,g.FENTRYID AS 国家内码--,g.FNUMBER AS 国家编码,h.FDATAVALUE AS 国家名称
FROM T_BAS_ASSISTANTDATAENTRY a
LEFT JOIN T_BAS_ASSISTANTDATAENTRY_L b ON a.FENTRYID=b.FENTRYID AND b.FLOCALEID=2052
LEFT JOIN T_BAS_ASSISTANTDATAENTRY c ON a.FPARENTID=c.FENTRYID
LEFT JOIN T_BAS_ASSISTANTDATAENTRY_L d ON c.FENTRYID=d.FENTRYID AND d.FLOCALEID=2052
LEFT JOIN T_BAS_ASSISTANTDATAENTRY e ON c.FPARENTID=e.FENTRYID
LEFT JOIN T_BAS_ASSISTANTDATAENTRY_L f ON e.FENTRYID=f.FENTRYID AND f.FLOCALEID=2052
LEFT JOIN T_BAS_ASSISTANTDATAENTRY g ON e.FPARENTID=g.FENTRYID
LEFT JOIN T_BAS_ASSISTANTDATAENTRY_L h ON g.FENTRYID=h.FENTRYID AND h.FLOCALEID=2052
WHERE a.FENTRYID=@FID
";
var parameter = new SqlParam("@FID", KDDbType.AnsiString, id);
var dynamicObjects = DBUtils.ExecuteDynamicObject(this.Context, sql, paramList: new[] { parameter });
if (dynamicObjects.Count > 0)
{
// 注意:如果辅助资料设置了上级辅助资料,必须按辅助资料的上级辅助资料的层级关系,先给父节点赋值,再逐级给子节点赋值
this.Model.SetValue("F_Jac_Assistant_Country", dynamicObjects[0]["国家内码"]);
this.Model.SetValue("F_Jac_Assistant_Area", dynamicObjects[0]["地区内码"]);
this.Model.SetValue("F_Jac_Assistant_Province", dynamicObjects[0]["省份内码"]);
}
}
}
}
}
<2>拷贝插件组件到应用站点的WebSite\Bin目录下,重启IIS。
<3>BOSIDE扩展采购订单,新增4个单选辅助资料字段,注册表单插件,保存元数据,开发完毕。
现在可以登录业务站点,打开采购订单新增界面,给城市字段选择一个城市,检验一下插件的控制效果啦。
辅助资料类型国家、地区、省份、城市上下级关系:
联动赋值效果:
---------------------------------------------------------------------------------------------------------
【知识点】
<1>通过以下SQL可以查询辅助资料的父级辅助资料。
-- 查询城市以及该城市所属的省份、地区、国家
SELECT a.FENTRYID AS 城市内码,a.FNUMBER AS 城市编码,b.FDATAVALUE AS 城市名称
,c.FENTRYID AS 省份内码,c.FNUMBER AS 省份编码,d.FDATAVALUE AS 省份名称
,e.FENTRYID AS 地区内码,e.FNUMBER AS 地区编码,f.FDATAVALUE AS 地区名称
,g.FENTRYID AS 国家内码,g.FNUMBER AS 国家编码,h.FDATAVALUE AS 国家名称
FROM T_BAS_ASSISTANTDATAENTRY a
LEFT JOIN T_BAS_ASSISTANTDATAENTRY_L b ON a.FENTRYID=b.FENTRYID AND b.FLOCALEID=2052
LEFT JOIN T_BAS_ASSISTANTDATAENTRY c ON a.FPARENTID=c.FENTRYID
LEFT JOIN T_BAS_ASSISTANTDATAENTRY_L d ON c.FENTRYID=d.FENTRYID AND d.FLOCALEID=2052
LEFT JOIN T_BAS_ASSISTANTDATAENTRY e ON c.FPARENTID=e.FENTRYID
LEFT JOIN T_BAS_ASSISTANTDATAENTRY_L f ON e.FENTRYID=f.FENTRYID AND f.FLOCALEID=2052
LEFT JOIN T_BAS_ASSISTANTDATAENTRY g ON e.FPARENTID=g.FENTRYID
LEFT JOIN T_BAS_ASSISTANTDATAENTRY_L h ON g.FENTRYID=h.FENTRYID AND h.FLOCALEID=2052
WHERE b.FDATAVALUE LIKE '%广州%'
---------------------------------------------------------------------------------------------------------
【参考链接】
【二开案例.元模型.单选辅助资料】https://vip.kingdee.com/article/157536706114078208
---------------------------------------------------------------------------------------------------------
【金蝶云星空BOS二次开发案例演示】https://vip.kingdee.com/article/94751030918525696
二开案例.表单插件.辅助资料联动赋值
本文2024-09-23 04:20:08发表“云星空知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-k3cloud-164643.html