执行计划中如何调用单据的操作?

栏目:云星空知识作者:金蝶来源:金蝶云社区发布:2024-09-23浏览:1

执行计划中如何调用单据的操作?

问题描述:

有时候业务需要在执行计划中调用单据的提交,审核等操作

解决方案:

  1. 创建执行计划参考帖子:https://vip.kingdee.com/article/35401

  2. 以销售订单为例,调用提交和审核操作,代码如下:

      1)Sal_SalOrder 为销售订单的formId

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel;
using Kingdee.BOS.Core;
using Kingdee.BOS.Contracts;
using Kingdee.BOS.ServiceHelper;
using Kingdee.BOS.App.Data;
using Kingdee.BOS.WebApi.FormService;
using Newtonsoft.Json.Linq;
using Kingdee.BOS.JSON;
using Newtonsoft.Json;
namespace Kingdee.BOS.CustomSchedule
{
    /// <summary>
    ///在执行计划中调用提交和审核操作
    /// </summary>
    [Description("在执行计划中调用提交和审核操作")]
    public class InvokeOperationService : IScheduleService
    {
        /// <summary>
        /// 执行入口
        /// </summary>
        /// <param name="ctx"></param>
        /// <param name="schedule"></param>
        public void Run(Context ctx, Schedule schedule)
        {
            //得到所有已创建和重新审核的单据,因为只有此两种状态才允许提交。
            string strSql = "select FId from T_SAL_ORDER where FDocumentStatus in('A','D')";
            var dynObjs = DBUtils.ExecuteDynamicObject(ctx, strSql);
            var arrPks = dynObjs.Select(x => x["FId"]).ToArray();
            //得到销售订单元数据
            var bInfo = FormMetaDataCache.GetCachedFormMetaData(ctx, "Sal_SalOrder ").BusinessInfo;
            foreach (var billPk in arrPks)
            {
                //没有工作流调用此接口
                var result = BusinessDataServiceHelper.Submit(ctx, bInfo, new object[]{ billPk }, "Submit");
                if (result.IsSuccess)
                {
                    BusinessDataServiceHelper.Audit(ctx, bInfo, new object[] { billPk }, Orm.OperateOption.Create());
                }
                //有工作流或没有工作流都可以调用api提交接口
                JSONObject dataObj = new JSONObject();
                dataObj.Add("Ids", billPk);
                var dataObjStr = JsonConvert.SerializeObject(dataObj);
                var apiSubmitResult = WebApiServiceCall.Submit(ctx, "SAL_ORDER", dataObjStr);
                var isSucc = JObject.Parse(apiSubmitResult.ToString())["Result"]["ResponseStatus"]["IsSuccess"].Value<bool>();
                if (isSucc)
                {
                    WebApiServiceCall.Audit(ctx, "SAL_ORDER", dataObjStr);
                }
            }
         }
      }
}


执行计划中如何调用单据的操作?

问题描述:有时候业务需要在执行计划中调用单据的提交,审核等操作解决方案:创建执行计划参考帖子:https://vip.kingdee.com/article/3540...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息