二开案例.维度关联字段.维度关联字段赋值之辅助属性
【应用场景】给辅助属性赋值。
【案例演示】采购订单,明细信息,给指定物料设置辅助属性值。
【实现步骤】
<1>编写单据插件,实现辅助属性赋值的功能,代码如下。
using Kingdee.BOS.Core.Bill.PlugIn;
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
using Kingdee.BOS.Core.Metadata.FieldElement;
using Kingdee.BOS.Model.DynamicForm;
using Kingdee.BOS.ServiceHelper;
using Kingdee.BOS.Util;
using Kingdee.BOS.Web.DynamicForm;
using System.ComponentModel;
namespace Jac.XkDemo.BOS.Business.PlugIn
{
/// <summary>
/// 【单据插件】维度关联字段赋值之辅助属性
/// </summary>
[Description("【单据插件】维度关联字段赋值之辅助属性"), HotUpdate]
public class SetFlexValueBillPlugIn : AbstractBillPlugIn
{
public override void EntryBarItemClick(BarItemClickEventArgs e)
{
base.EntryBarItemClick(e);
var rowIndex = this.Model.GetEntryCurrentRowIndex("FPOOrderEntry");
if (rowIndex < 0)
{
return;
}
#region 模拟界面操作View进行赋值
if (e.BarItemKey.EqualsIgnoreCase("tbSetFlexValue1"))
{
// 设置物料的等级为【A级】
((DynamicWebFormView)this.View).SetItemValueByIDFromClient("$$FAUXPROPID__FF100001", "005056a3024b911211e36619da073384", rowIndex);
// 设置物料的产地为【中国】
((DynamicWebFormView)this.View).SetItemValueByIDFromClient("$$FAUXPROPID__FF100002", "5a98b74cf52cba", rowIndex);
}
#endregion
#region 直接获取维度值内码进行赋值(此种赋值方式要求维度组合值已经提前保存)
if (e.BarItemKey.EqualsIgnoreCase("tbSetFlexValue2"))
{
// 等级【A级】产地【中国】对应的维度值为100333
this.View.Model.SetValue("FAuxPropId", 100333, rowIndex);
//this.View.UpdateView("FAuxPropId", rowIndex);
}
#endregion
#region 操作Model逐个维度进行赋值
if (e.BarItemKey.EqualsIgnoreCase("tbSetFlexValue3"))
{
// 获取维度关联字段
var flexField = (RelatedFlexGroupField)this.View.BillBusinessInfo.GetField("FAuxPropId");
// 获取维度关联字段的某个维度
// 设置物料的等级为【A级】
((DynamicFormModel)this.Model).SetFlexValue(flexField, "$$FAUXPROPID__FF100001", "005056a3024b911211e36619da073384", rowIndex);
//this.View.UpdateView("$$FAUXPROPID__FF100001", rowIndex);
// 设置物料的产地为【中国】
((DynamicFormModel)this.Model).SetFlexValue(flexField, "$$FAUXPROPID__FF100002", "5a98b74cf52cba", rowIndex);
//this.View.UpdateView("$$FAUXPROPID__FF100002", rowIndex);
}
#endregion
#region 操作Model逐个维度进行赋值
if (e.BarItemKey.EqualsIgnoreCase("tbSetFlexValue4"))
{
// 获取维度关联字段
var flexField = (RelatedFlexGroupField)this.View.BillBusinessInfo.GetField("FAuxPropId");
// 获取维度关联字段的某个维度
var field = (BaseDataField)flexField.RelateFlexBusinessInfo.GetField("FF100001");
// 设置物料的等级为【A级】
var dynamicObj = BusinessDataServiceHelper.LoadSingle(this.Context, "005056a3024b911211e36619da073384", field.RefFormDynamicObjectType);
((DynamicFormModel)this.Model).SetFlexValue(flexField, "$$FAUXPROPID__FF100001", dynamicObj, rowIndex);
//this.View.UpdateView("$$FAUXPROPID__FF100001", rowIndex);
// 设置物料的产地为【中国】
dynamicObj = BusinessDataServiceHelper.LoadSingle(this.Context, "5a98b74cf52cba", field.RefFormDynamicObjectType);
((DynamicFormModel)this.Model).SetFlexValue(flexField, "$$FAUXPROPID__FF100002", dynamicObj, rowIndex);
//this.View.UpdateView("$$FAUXPROPID__FF100002", rowIndex);
}
#endregion
}
}
}
/*
-- 查找辅助属性的维度信息,其中FFLEXNUMBER为维度字段标识,【等级】的标识为FF100001,【产地】的标识为FF100002
SELECT b.FNAME,a.FFLEXNUMBER,a.* FROM T_BD_FLEXAUXPROPERTY a
LEFT JOIN T_BD_FLEXAUXPROPERTY_L b ON a.FID=b.FID AND b.FLOCALEID=2052
-- 查找辅助资料类型为【等级】的辅助资料
SELECT b.FNAME,a.* FROM T_BAS_ASSISTANTDATA a
LEFT JOIN T_BAS_ASSISTANTDATA_L b ON a.FID=b.FID AND b.FLOCALEID=2052
WHERE b.FNAME='等级'
-- 查找辅助资料【等级】的明细数据,等级【A级】的内码为005056a3024b911211e36619da073384
SELECT b.FDATAVALUE,a.* FROM T_BAS_ASSISTANTDATAENTRY a
LEFT JOIN T_BAS_ASSISTANTDATAENTRY_L b ON a.FENTRYID=b.FENTRYID AND b.FLOCALEID=2052
WHERE a.FID='005056a3024b911211e36619ce35ebd3'
-- 查找辅助资料类型为【产地】的辅助资料
SELECT b.FNAME,a.* FROM T_BAS_ASSISTANTDATA a
LEFT JOIN T_BAS_ASSISTANTDATA_L b ON a.FID=b.FID AND b.FLOCALEID=2052
WHERE b.FNAME='产地'
-- 查找辅助资料【产地】的明细数据,产地【中国】的内码为5a98b74cf52cba
SELECT b.FDATAVALUE,a.* FROM T_BAS_ASSISTANTDATAENTRY a
LEFT JOIN T_BAS_ASSISTANTDATAENTRY_L b ON a.FENTRYID=b.FENTRYID AND b.FLOCALEID=2052
WHERE a.FID='005056a3024b911211e36619b9eb366c'
-- 查找辅助属性组合值的唯一标识,等级【A级】产地【中国】对应的维度值为100333
SELECT * FROM T_BD_FLEXSITEMDETAILV WHERE FF100001 = N'005056a3024b911211e36619da073384' AND FF100002 = N'5a98b74cf52cba'
*/
<2>拷贝插件组件到应用站点的WebSite\Bin目录下,重启IIS。
<3>BOSIDE扩展采购订单,选中明细信息单据体,新增4个菜单,如下图所示。
<4>注册表单插件,保存元数据,开发完毕。
现在可以登录业务站点,打开采购订单,录入明细信息,检验一下插件效果啦。
辅助属性赋值的关键是搞清楚维度关联字段的数据结构,知识点都在上文中的那堆SQL里啦。
【知识点】
<1>如何获取某个维度列的字段标识?
通过Http数据抓包获取,可知,等级的标识是:FF100001。
也可以直接去数据库查询。
-- 查找辅助属性,其中FFLEXNUMBER为维度字段标识,【等级】的标识为FF100001,【产地】的标识为FF100002
SELECT b.FNAME,a.FFLEXNUMBER,a.* FROM T_BD_FLEXAUXPROPERTY a
LEFT JOIN T_BD_FLEXAUXPROPERTY_L b ON a.FID=b.FID AND b.FLOCALEID=2052
<2>如何获取维度列当前选中的辅助资料的内码?
Http数据抓包或者直接去数据库查询。
-- 查找辅助资料类型为【等级】的辅助资料
SELECT b.FNAME,a.* FROM T_BAS_ASSISTANTDATA a
LEFT JOIN T_BAS_ASSISTANTDATA_L b ON a.FID=b.FID AND b.FLOCALEID=2052
WHERE b.FNAME='等级'
-- 查找辅助资料【等级】的明细数据,等级【A级】的内码为005056a3024b911211e36619da073384
SELECT b.FDATAVALUE,a.* FROM T_BAS_ASSISTANTDATAENTRY a
LEFT JOIN T_BAS_ASSISTANTDATAENTRY_L b ON a.FENTRYID=b.FENTRYID AND b.FLOCALEID=2052
WHERE a.FID='005056a3024b911211e36619ce35ebd3'
<3>如何获取等级【A级】产地【中国】对应的维度组合的内码?
-- 查找辅助属性组合值的唯一标识,等级【A级】产地【中国】对应的维度值为100333
SELECT * FROM T_BD_FLEXSITEMDETAILV WHERE FF100001 = N'005056a3024b911211e36619da073384' AND FF100002 = N'5a98b74cf52cba'
<4>录单界面上虽然输入了多个维度列的值,但最终这些维度值会变成一个唯一的组合,并产生一条维度值组合的记录,存储在表 T_BD_FLEXSITEMDETAILV中,赋值给维度关联字段的值正式这个维度组合值集的内码。
【金蝶云星空BOS二次开发案例演示】https://vip.kingdee.com/article/94751030918525696
二开案例.维度关联字段.维度关联字段赋值之辅助属性
本文2024-09-23 04:20:55发表“云星空知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-k3cloud-164723.html