电脑桌面
添加蚂蚁七词文库到电脑桌面
安装后可以在桌面快捷访问

手把手演示如何对单据的分录行提交流程审批

来源:金蝶云社区作者:金蝶2024-09-234

手把手演示如何对单据的分录行提交流程审批

金蝶云星空流程审批的数据载体是基于整个单据的,因此要对分录数据进行审批就比较困难。本文将演示如何通过二开的方式来变通实现分录行数据审批。


首先演示原单据如下:

需要对表体数据进行流程审批。那针对这个表体我们先检查是否有状态字段,如果没有就添加上,例如上图的FRowStatus,状态集合列表和单据状态的一样,ABCD分别表示创建、审核中、已审核、重新审核。然后对表体添加分录审批和查看流程图菜单,在分录审批菜单配置添加事件,在事件中添加一个空操作,该空操作改名为“刷新状态”,添加操作后刷新字段,用于提交工作流后自动刷新当前分录的数据。参考如下:

新建流程审批分录单据,参考如下:

该单据继承自1.2业务单据模板。新建的时候只有单据编号和单据状态两个字段,首先把单据头的表设置为原单的单据体的表,然后把单据的主键设置为原单据体的主键字段。单据状态字段和原单分录行状态字段对上。参考如下:


由于分录是没有单据编号的,这个分录单据的单据编号可以设置不可见,如果分录上有文本类型的分录编号字段,这里也可以把字段名设置为分录编号字段。其他如有需要显示的字段,例如物料、数量、金额等,在这个单据上都设计好,最为关键的是字段名要和原单据分录的字段名保持一致。其他分录单据元数据属性,例如标题等一并搞定。保存单据并发布,由于这个单据不需要新增,所以发布的时候可以设置不可见(为什么一定要发布呢?因为工作流模型设计只能选到已发布菜单的单据)。

表单都设计好之后,原单需要二开一个表单插件,主要完成分录提交流程和查看流程图功能,演示代码参考如下:

using Kingdee.BOS;
using Kingdee.BOS.Core.Bill.PlugIn;
using Kingdee.BOS.Core.DynamicForm;
using Kingdee.BOS.Core.List;
using Kingdee.BOS.JSON;
using Kingdee.BOS.Orm.DataEntity;
using Kingdee.BOS.Util;
using Kingdee.BOS.WebApi.FormService;
using Kingdee.BOS.Workflow.Model;
using Kingdee.BOS.Workflow.ServiceHelper;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
namespace JDSample.FormPlugIn.Bill
{
    [Description("演示单据分录提交审批")]
    public class SubmitBillEntryRowEdit : AbstractBillPlugIn
    {
        string _formId = "k38e42b9e76e947c79ff8f441d21bff90";

        public override void EntryBarItemClick(Kingdee.BOS.Core.DynamicForm.PlugIn.Args.BarItemClickEventArgs e)
        {
            int currentRowIndex = -1;
            DynamicObject currentRowData;
            this.Model.TryGetEntryCurrentRow("F_Jac_Entity", out currentRowData, out currentRowIndex);
            // 提交流程
            if (e.BarItemKey.Equals("tbRowSubmit", StringComparison.OrdinalIgnoreCase))
            {
                JObject jobject = new JObject();               
                if (currentRowData != null)
                {
                    object entryId = currentRowData.DynamicObjectType.PrimaryKey.GetValueFast(currentRowData);
                    jobject.Add("Ids", ObjectUtils.Object2String(entryId));
                    // 克隆上下文,因为调用的是API接口,可能会改变当前上下文
                    Context ctx = ObjectUtils.CreateCopy(this.View.Context) as Context;
                    // 提交
                    var result = WebApiServiceCall.Submit(ctx, _formId, jobject.ToString());
if (result != null)
                    {
                        Dictionary<string, object> dctResult = result as Dictionary<string, object>;
                        if (dctResult != null)
                        {
                            Dictionary<string, object> responseStatus = dctResult["Result"] as Dictionary<string, object>;
                            Dictionary<string, object> dctStatus = responseStatus["ResponseStatus"] as Dictionary<string, object>;
                            if (Convert.ToBoolean(dctStatus["IsSuccess"]))
                            {
                                this.View.ShowMessage("当前行审批提交成功。");
                                return;
                            }
                            else
                            {
                                if (dctStatus.ContainsKey("Errors"))
                                {
                                    List<object> errors = dctStatus["Errors"] as List<object>;
                                    if (errors.Count > 0)
                                    {
                                        Dictionary<string, object> error = errors[0] as Dictionary<string, object>;
                                        this.View.ShowMessage(ObjectUtils.Object2String(error["Message"]));
                                        return;
                                    }
                                }
                            }

                        }
                    }
                }
            }
//查看流程图
            if (e.BarItemKey.Equals("tbViewFlow", StringComparison.OrdinalIgnoreCase))
            {
                string[] hisProcInstIds;
                if (currentRowData != null)
                {
                    object entryId = currentRowData.DynamicObjectType.PrimaryKey.GetValueFast(currentRowData);
                    string procInstId = WorkflowChartServiceHelper.GetCurrentProcInstIdByBill(this.View.Context, _formId,ObjectUtils.Objec

手把手演示如何对单据的分录行提交流程审批

金蝶云星空流程审批的数据载体是基于整个单据的,因此要对分录数据进行审批就比较困难。本文将演示如何通过二开的方式来变通实现分录行数据...
点击下载文档文档为doc格式

声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。

已经是第一篇
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息
QQ群
  • 答案:my7c点击这里加入QQ群
支持邮箱
微信
  • 微信