二开案例-【WebAPI】如何通过WebAPI操作生产订单状态机,并指定执行时间

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

二开案例-【WebAPI】如何通过WebAPI操作生产订单状态机,并指定执行时间

【应用场景】

针对部分二开需要指定生产订单明细行业务状态,并且指定时间


【注意事项】

该实现方案以生产订单执行到完工为例,执行时间以当前天数加三天,生产订单分录内码为测试数据


【案例演示】


上传图片



【实现步骤】

<1>编写自定义WebAPI接口,代码如下:

/// <summary>
    /// 生产订单信息
    /// </summary>
    public class MoInfos
    {
        /// <summary>
        /// 生产订单分录内码与执行时间数据包
        /// </summary>
        public List<Tuple<long, DateTime>> MoEntryIdsOfDate { get; set; }

        /// <summary>
        /// 操作代码
        /// </summary>
        public string OperationNumber { get; set; }

        /// <summary>
        /// 生产订单分录内码
        /// </summary>
        public List<long> MoEntryIds { get; set; }

    }


    public class ExtSetMoStatusWebAPIService : AbstractWebApiBusinessService
    {
        public ExtSetMoStatusWebAPIService(KDServiceContext context) : base(context) { }

        public JObject ExecuteService(string info)
        {
            JObject result = new JObject();
            var param = JsonConvert.DeserializeObject<MoInfos>(info);
            OperateOption option = OperateOption.Create();
            option.SetVariableValue("LstMoEntryIdOfExecDate", param.MoEntryIdsOfDate);
            option.SetVariableValue(Consts.ForceNoTransaction, true);
            IOperationResult exeResult = AppServiceContext.PRDService.MOService.MOStateTransfer(
                    this.KDContext.Session.AppContext, param.MoEntryIds.Distinct(), param.OperationNumber, option);
            if (!exeResult.ValidationErrors.IsEmpty())
            {
                StringBuilder errMsg = new StringBuilder();
                foreach (var item in exeResult.ValidationErrors)
                {
                    errMsg.AppendLine(item.Message);
                }
                result.Add("IsSuccess", false);
                result.Add("Message", string.Format("执行失败:{0}", errMsg.ToString()));
            }
            else
            {
                result.Add("IsSuccess", true);
                result.Add("Message", "执行成功");
            }
            result.Add("Data",  JsonConvert.SerializeObject(exeResult));
            return result;
        }

    }


<2>调用演示,代码如下:

[Description("WebAPI生产订单执行状态机指定时间")]
    public class MoWebAPI : AbstractBillPlugIn
    {

        public override void BarItemClick(BarItemClickEventArgs e)
        {
            base.BarItemClick(e);
            switch (e.BarItemKey.ToUpperInvariant())
            {
                case "TBTEST":
                    string webSiteUrl = "http://localhost:1780/k3cloud/";
                    K3CloudApiClient client = new K3CloudApiClient(webSiteUrl);
                    var loginResult = client.ValidateLogin("5e688b60010075", "demo", "888888", 2052);
                    var loginResultJson = JsonConvert.DeserializeObject<JObject>(loginResult);
                    var resultType = JObject.Parse(loginResult)["LoginResultType"].Value<int>();
                    if (resultType == 1)
                    {
                        string userToken = loginResultJson["Context"]["UserToken"].ToString();
                        List<Tuple<long, DateTime>> moEntryIdsOfDateParam = new List<Tuple<long, DateTime>>();
                        List<long> moEntryIds = new List<long>();
                        //测试数据、示例是执行到完工,当前天数加三天
                        moEntryIdsOfDateParam.Add(new Tuple<long, DateTime>(112061, DateTime.Now.AddDays(3)));
                        moEntryIdsOfDateParam.Add(new Tuple<long, DateTime>(112062, DateTime.Now.AddDays(3)));
                        moEntryIds.Add(112061);
                        moEntryIds.Add(112062);
                        MoInfos moInfos = new MoInfos
                        {
                            MoEntryIdsOfDate= moEntryIdsOfDateParam,
                            OperationNumber="ToFinish",
                            MoEntryIds= moEntryIds
                        };
                        string serviceName = "ITIBB.App.ServicePlugIn.WebAPI.ExtSetMoStatusWebAPIService.ExecuteService,ITIBB.App.ServicePlugIn";
                        var info = client.Execute<JObject>(serviceName, new object[] { JsonConvert.SerializeObject(moInfos) });
                    };
                    
                    break;
            }
        }
    }



<3>整个代码涉及的命名空间

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using Kingdee.BOS.Core.Bill.PlugIn;
using Kingdee.BOS.Core.DynamicForm;
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
using Kingdee.BOS.Orm;
using Kingdee.BOS.ServiceFacade.KDServiceFx;
using Kingdee.BOS.Util;
using Kingdee.BOS.WebApi.Client;
using Kingdee.BOS.WebApi.ServicesStub;
using Kingdee.K3.Core.MFG.EnumConst;
using Kingdee.K3.Core.SCM;
using Kingdee.K3.MFG.App;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;

<4>关于生产订单业务状态标识说明

ToPlanConfirm:执行至计划确认

ToRelease:  执行至下达 

ToStart: 执行至开工 

ToFinish:  执行至完工 

ToClose:执行至结案


【参考资料】

二开案例.WebApi.从零开发自定义WebApi接口 (kingdee.com)
二开自定义webapi接口详解 (kingdee.com)



【金蝶云星空BOS二次开发案例演示】

https://vip.kingdee.com/article/94751030918525696



二开案例-【WebAPI】如何通过WebAPI操作生产订单状态机,并指定执行时间

【应用场景】针对部分二开需要指定生产订单明细行业务状态,并且指定时间【注意事项】该实现方案以生产订单执行到完工为例,执行时间以当前...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息