二开案例-【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操作生产订单状态机,并指定执行时间
【应用场景】针对部分二开需要指定生产订单明细行业务状态,并且指定时间【注意事项】该实现方案以生产订单执行到完工为例,执行时间以当前...
点击下载文档
本文2024-09-23 03:22:06发表“云星空知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-k3cloud-158405.html
您需要登录后才可以发表评论, 登录登录 或者 注册
最新文档
热门文章