订单进度跟踪二开字段原创
金蝶云社区-new_昵称
new_昵称
23人赞赏了该文章 387次浏览 未经作者许可,禁止转载编辑于2023年11月30日 15:32:12

系统内置了订单进度跟踪(动态表单),怎样使用请看:https://vip.kingdee.com/school/detail/254301001912965632?productLineId=1

以及提供了可配置的添加字段的方法:

https://vip.kingdee.com/article/449625075612991744?productLineId=1&isKnowledge=2

但是此方法只能添加销售订单内有的字段,无法个性化定义,例如:我要在销售页签内查看销售报价、模拟报价、二开单据等等信息,经过查看源码,摸索出了一个业务关联添加字段的方法,正片开始

一、首先我们在BOS内扩展单据,并拖入合适的字段类型

image.png


二、插件工程新增一个类,继承AbstractBillPlugIn,并重写BarItemClick(参照了:https://vip.kingdee.com/article/272105314009335808?productLineId=1&isKnowledge=2

,且通过查看源码,该单据内的刷新按钮是通过该方法触发的),刚开始打算与原刷新按钮一同触发(tbRefreash),但是经过实践,无论是调整插件执行顺序,还是直接执行,都无法实现原插件获取到数据后在执行此次插件内容,有知道的大佬可以留言指导我下,这里我添加了一个按钮,并对该按钮做取数处理

using Kingdee.BOS;

using Kingdee.BOS.Core.Bill.PlugIn;
using Kingdee.BOS.Orm.DataEntity;
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
using Kingdee.BOS.ServiceHelper;

using System;
using System.ComponentModel;
using System.Linq;

namespace DEMO
{
    [Description("订单进度跟踪 - 获取模拟报价信息")]
    //GetMockQuoteInformationPlugIn
    public class GetMockQuoteInformationPlugIn : AbstractBillPlugIn
    {
      
        public override void BarItemClick(BarItemClickEventArgs e)

        {
            base.BarItemClick(e);



            if (e.BarItemKey.Equals("tbRefreashs"))
            {

                //获取销售订单单据id集合
                String FSoEntryId = this.Model.GetValue("FSoEntryId").ToString();
                string sql = string.Format(@"/*dialect*/
取数的SQL
                            ", FSoEntryId.Replace(";", ","));

                DynamicObjectCollection RS = DBServiceHelper.ExecuteDynamicObject(this.Context, sql);
                //获取单据体,行数
                for (int i = 0; i < this.Model.GetEntryRowCount("FEntity"); i++)
                {

                    String FFormId = this.Model.GetValue("FFormId", i).ToString();
                    String FBillEntryId = this.Model.GetValue("FBillEntryId", i).ToString();

                    if (FFormId == "SAL_SaleOrder")
                    {
                    //此处是因为我是依照销售订单分录内码来做关联的,考虑到性能,在上面统一获取数据,此处配合前面获取单据体行数的for,来匹配需要输出的数据
                        for (int ii = 0; ii < RS.Count(); ii++)
                        {
                        //如果当前行销售订单分录内码 = sql结果集里对应的销售订单分录内码
                            if (FBillEntryId == RS[ii]["FENTRYID"].ToString())
                            {
                            
                               //注意,此时不要使用this.view.Model.SetValue,此时不处在view层
                                this.Model.SetValue("字段标识", 值, i);
                                this.Model.SetValue("字段标识", 值, i);
                                this.Model.SetValue("字段标识", 值, i);

                            }
                        }
                    }
                }
                
                //this.View.UpdateView("FEntity");
            }
        }

    }
}

三、看一下实现效果

1701329344149.jpg



因为社区内没有相应的教程,该功能是一步步调试了无数次摸索出来的,处理方式不一定规范,如果有更好的处理方式请联系我。

完结,撒花

赞 23