14.3、 表单插件,AfterBindData事件,变通实现,单据转换,多单据体下推原创
20人赞赏了该文章
1.2万次浏览
编辑于2021年12月02日 21:26:44
摘要由AI智能服务提供
文本描述了在一个销售订单到销售出库单的业务场景中,如何通过判断单据状态来触发不同的操作。特别地,文本中详细说明了在编辑(EDIT)状态和新增(ADDNEW)状态下,如何根据销售订单上的备注信息,将其携带到销售出库单上。具体步骤包括:在销售订单和销售出库单上分别新增页签和文本字段;根据单据状态,编写代码逻辑以获取销售订单中的备注信息,并将其赋值给销售出库单中的对应字段;最后,通过数据库查询操作来获取相关的备注信息,并在销售出库单中进行赋值和刷新显示。文本还展示了相关的SQL查询语句和代码片段,用于实现这一业务流程。
业务场景:销售订单下推销售出库单,判断是什么单据状态,然后触发相应的操作
标准产品,多单据体下推,单据转换中,只能配置一个单据体;
销售订单、销售出库单,单据体,分别都新增一个页签,下推,把销售订单上面多单据体备注,带到销售出库单上面;
续
1、注释上一节
//如果是,编辑状态 EDIT //if(this.View.OpenParameter.Status.Equals(OperationStatus.EDIT)) //{ // //给备注和备注1,赋值 // this.View.Model.SetValue("FNote", "备注"); // this.View.Model.SetValue("FNote1", "备注1"); // //刷新这2个字段 // this.View.UpdateView("FNote"); // this.View.UpdateView("FNote1"); //}
2、销售订单、销售出库单,单据体,分别都新增一个页签,增加一个文本字段备注;
选择一个单据体页签,点最后面的按钮,添加页签
工具箱,拖动单据体到页签里面,设置停靠,充满
再拖动文本到页签里面
2.1、销售订单、销售出库单,单据体,分别都新增一个页签后,下推;
3、
//如果是新增状态,下推的,销售出库单,加载完成之后 if (this.View.OpenParameter.Status.Equals(OperationStatus.ADDNEW))
4、
//如果是下推生成的,销售出库单上面有订单单号 //获取源单,订单单号FSOORDENDO ,第一行,不等于空 if(Convert.ToString(this.View.Model.GetValue("FSOORDERNO",0))!="")
5、
//定义几个字段,后面sql用 string sql; DataSet ds; DataTable dt;
6、添加引用
using System.Data;
7、
//到数据库里面,寻找,关联的备注信息 sql = "/*dialect*/";
8、打开BOS,销售订单,新增的页签,获取表名 YDIE_t_Cust_Entry100017
select * from YDIE_t_Cust_Entry100017
--获取销售订单,新增页签,备注字段 select F_YDIE_TEXT,* from YDIE_t_Cust_Entry100017
--通过销售订单,单据编号,找信息,通过FID关联 select FID from T_SAL_ORDER where FBILLNO ='XSDD000027'
--关联 select F_YDIE_TEXT,* from YDIE_t_Cust_Entry100017 where FID in (select FID from T_SAL_ORDER where FBILLNO ='XSDD000027')
//到数据库里面,寻找,关联的备注信息 sql = "/*dialect*/select F_YDIE_TEXT,* from YDIE_t_Cust_Entry100017 where FID in (select FID from T_SAL_ORDER where FBILLNO ='" + Convert.ToString(this.View.Model.GetValue("FSOORDERNO", 0)) + "')";
9、
//如果是新增状态,下推的,销售出库单,加载完成之后 if (this.View.OpenParameter.Status.Equals(OperationStatus.ADDNEW)) { //定义几个字段 string sql; DataSet ds; DataTable dt; //如果是下推生成的,销售出库单上面有订单单号 //获取源单,订单单号FSOORDERNO ,第一行,不等于空 if(Convert.ToString(this.View.Model.GetValue("FSOORDERNO",0))!="") { //到数据库里面,寻找,关联的备注信息 //获取上面关联的值1001,写入销售出库单里面 sql = "/*dialect*/select F_YDIE_TEXT,* from YDIE_t_Cust_Entry100017 where FID in (select FID from T_SAL_ORDER where FBILLNO ='" + Convert.ToString(this.View.Model.GetValue("FSOORDERNO", 0)) + "')"; //读取数据库里面的,执行数据,赋值给ds ds = DBUtils.ExecuteDataSet(this.Context, sql); //读取第一行数据 dt = ds.Tables[0]; //循环dt表,给单据体赋值,如果行大于0 if(dt.Rows.Count >0) { //循环读取每一行数据 for (int i = 0; i < dt.Rows.Count; i++) { //给备注F_YDIE_TEXT,赋值 //dt.Rows[i]行 ["F_YDIE_TEXT"].ToString() 列 this.View.Model.SetValue("F_YDIE_TEXT", dt.Rows[i]["F_YDIE_TEXT"].ToString(),i); } } //刷新单据体 this.View.UpdateView("YDIE_t_Cust_Entry100017");
10、重新生成dll
11、销售出库单,注册插件
12、最终效果,新增销售订单,填写新增页签,单据体备注信息,下推销售出库单,备注带到了销售出库单上面;
using System; using System.Collections.Generic; using System.Linq; using System.Text; using Kingdee.BOS; using Kingdee.BOS.Core.Bill.PlugIn; using System.ComponentModel; //用于写sql using Kingdee.BOS.App.Data; using Kingdee.BOS.Core.Metadata; using System.Data; namespace Kingdee.Bos.Project.BillAfterBindData { [Description("AfterBindData")] [Kingdee.BOS.Util.HotUpdate] public class ClassName:AbstractBillPlugIn { //定义几个字段 string sql; DataSet ds; DataTable dt; //这个是一个数据绑定后事件。 //这个事件是单据新增,编辑,查询加载后最后一个事件。 public override void AfterBindData(EventArgs e) { base.AfterBindData(e); //这个方法是判断单据状态。 //有四种:ADDNEW、EDIT、VIEW、DISASSEMBLY //新增、编辑、查看、卸载 //如果是,新增状态 ADDNEW //如果是,编辑状态 EDIT //if(this.View.OpenParameter.Status.Equals(OperationStatus.EDIT)) //{ // //给备注和备注1,赋值 // this.View.Model.SetValue("FNote", "备注"); // this.View.Model.SetValue("FNote1", "备注1"); // //刷新这2个字段 // this.View.UpdateView("FNote"); // this.View.UpdateView("FNote1"); //} //如果是新增状态,下推的,销售出库单,加载完成之后 if (this.View.OpenParameter.Status.Equals(OperationStatus.ADDNEW)) { //如果是下推生成的,销售出库单上面有订单单号 //获取源单,订单单号FSOORDENDO ,第一行,不等于空 if (Convert.ToString(this.View.Model.GetValue("FSOORDERNO", 0)) != "") { //到数据库里面,寻找,关联的备注信息 //获取上面关联的值1001,写入销售出库单里面 sql = "/*dialect*/select F_YDIE_TEXT from YDIE_t_Cust_Entry100017 where FID in (select FID from T_SAL_ORDER where FBILLNO ='" + Convert.ToString(this.View.Model.GetValue("FSOORDERNO", 0)) + "')"; //读取数据库里面的,执行数据,赋值给ds ds = DBUtils.ExecuteDataSet(this.Context, sql); //读取第一行数据 dt = ds.Tables[0]; //循环dt表,给单据体赋值,如果行大于0 if (dt.Rows.Count > 0) { //循环读取每一行数据 for (int i = 0; i < dt.Rows.Count; i++) { //给备注F_YDIE_TEXT,赋值 //dt.Rows[i]行 ["F_YDIE_TEXT"].ToString() 列 this.View.Model.SetValue("F_YDIE_Text", dt.Rows[i]["F_YDIE_TEXT"].ToString(), i); } } //刷新单据体 this.View.UpdateView("YDIE_t_Cust_Entry100018"); } } } } }
视频下载链接
链接:https://pan.baidu.com/s/17MIKyIy9My5sc5Gn2HI7UA
提取码:KISS
总目录链接
https://vip.kingdee.com/article/64993872014591232
Kingdee.Bos.Test14.zip(17.49KB)
赞 20
20人点赞
还没有人点赞,快来当第一个点赞的人吧!
打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!
推荐阅读