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

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

需要对表体数据进行流程审批。那针对这个表体我们先检查是否有状态字段,如果没有就添加上,例如上图的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格式
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。
上一篇
已经是第一篇



