二开案例.维度关联字段.维度关联字段赋值之辅助属性

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

二开案例.维度关联字段.维度关联字段赋值之辅助属性

【应用场景】给辅助属性赋值。

【案例演示】采购订单,明细信息,给指定物料设置辅助属性值。

【实现步骤】

<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


二开案例.维度关联字段.维度关联字段赋值之辅助属性

【应用场景】给辅助属性赋值。【案例演示】采购订单,明细信息,给指定物料设置辅助属性值。【实现步骤】<1>编写单据插件,实现辅助属性赋...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息