表单插件开发——加载单据体物料的父件编码信息
1、用户需求:要求采购申请单填写物料后,显示父件物料的编码、规格、名称信息。
2、解决方案:
(1)BOS里查看单据明细行上有“父件产品”,但是做单时并没有显示什么数据;
(2)字段值更新可用的现有服务里也没有直接获取父件物料信息的服务;
(3)只好做二次开发,用表单插件解决;
(4)在单据体自定义基础资料(物料编码)、基础资料属性(规格、名称)共3个字段;
(5)二次开发表单插件,在DataChanged(值更新)事件中去数据库获取到父件信息然后赋值给自定义的父件物料字段。
注意:DataChanged是针对单据上所有的字段,所以要判断一下本次更新的是不是目标字段。具体编码如下:
using Kingdee.BOS.Core.DynamicForm.PlugIn;
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
using Kingdee.BOS.Core.DynamicForm.PlugIn.ControlModel;
using Kingdee.BOS.Util;
using Kingdee.BOS.App.Data;
using System;
using System.ComponentModel;
using Kingdee.BOS.Orm.DataEntity;
using Kingdee.BOS.Core.Metadata.FieldElement;
using System.Linq;
using Kingdee.BOS.Core.Metadata.EntityElement;
namespace VMKR.K3CLOUD.SCM.PUR.APPLY.Plugin
{
/// <summary>
/// 【表单插件】按钮
/// </summary>
[Description("【表单插件】获取物料父件信息"), HotUpdate]
public class ApplyPlugin : AbstractDynamicFormPlugIn
{
/// <summary>
/// 物料编码值更新事件
/// </summary>
/// <param name="e"></param>
public override void DataChanged(DataChangedEventArgs e)
{
base.DataChanged(e);
if (e.Field.Key.Equals( "FMaterialId",StringComparison.OrdinalIgnoreCase))
{
string strSql = @"/*dialect*/SELECT TBOM.FNUMBER BomVersion,FXWL.FNUMBER ,FXWL_L.FNAME ,FXWL_L.FSPECIFICATION,FXWL.FMATERIALID
FROM DBO.T_ENG_BOM T1
INNER JOIN (SELECT MAX(FNUMBER ) FNUMBER, FMATERIALID FROM T_ENG_BOM GROUP BY FMATERIALID) TBOM ON TBOM.FMATERIALID=T1.FMATERIALID --and t1.FNUMBER=tbom.FNUMBER
INNER JOIN T_BD_MATERIAL FXWL ON FXWL.FMATERIALID = T1.FMATERIALID and t1.FFORBIDSTATUS = 'A' --只取未禁用状态的BOM
INNER JOIN T_BD_MATERIAL_L FXWL_L ON FXWL.FMATERIALID = FXWL_L.FMATERIALID and FXWL_L.FLOCALEID =2052
INNER JOIN T_ENG_BOMCHILD T3 ON T1.FID = T3.FID
INNER JOIN T_BD_MATERIAL ZXWL ON ZXWL.FMATERIALID = T3.FMATERIALID
WHERE ZXWL.FMATERIALID=" + e.NewValue.ToString();
DynamicObjectCollection dc = DBUtils.ExecuteDynamicObject(this.Context, strSql);
if (dc.Count() > 0)
{
BaseDataField bdf = e.Field as BaseDataField;
DynamicObject materialObj = Kingdee.BOS.ServiceHelper.BusinessDataServiceHelper.LoadSingle(this.Context, dc[0]["FMATERIALID"], bdf.RefFormDynamicObjectType);
string entityKey = "FEntity";//单据体标识,非实体
Entity entity = this.View.BillBusinessInfo.GetEntity(entityKey);
DynamicObjectCollection rows = this.View.Model.GetEntityDataObject(entity);
//this.View.ShowMessage("此物料父件为:"+dc[0]["FSPECIFICATION"].ToString()+ dc[0]["FNAME"].ToString());
//DynamicObject m = rows[e.Row]["F_VMKR_FJBM"] as DynamicObject;
rows[e.Row]["F_VMKR_FJBM"] = materialObj;//e.row非行实体,只是行index;只能获取整个单据体,通过index定位到行实体
this.View.UpdateView(entityKey);
}
}
}
}
表单插件开发——加载单据体物料的父件编码信息
本文2024-09-16 18:08:51发表“云星空知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-k3cloud-20249.html