webapi 订单执行行状态,下传各类日期实现方式
关于生产订单状态机调用的自定义接口,
详情可参见本贴 :
http://club.kingdee.com/forum.ph ... 8245&extra=page%3D1
http://club.kingdee.com/forum.ph ... 8245&extra=page%3D1对于有些小伙伴实际使用过程中,反向执行(例如反计划确认)时,可能会碰到类似{"从额外选项OperateOption中获取变量失败,变量[_BillOperationSelectedRows_]不存在!"} 的错误,这是因为传给系统行执行方法的参数缺少生产订单的单据内码。
现将兼容反向执行的自定义生产订单行状态机API接口实现示例如下:
1、封装自定义Webapi实现类示例如下:
using Kingdee.BOS.JSON;
using Kingdee.BOS.Orm;
using Kingdee.BOS.Util;
using Kingdee.BOS.Core.DynamicForm;
using Kingdee.BOS.ServiceFacade.KDServiceFx;
using Kingdee.BOS.WebApi.ServicesStub;
using Kingdee.K3.MFG.App;
using Kingdee.K3.MFG.Contracts.PRD;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Kingdee.EK.K3.MFG.WebApi.ServicesStub
{
public class MoTransfer : AbstractWebApiBusinessService
{
public MoTransfer(KDServiceContext context)
: base(context)
{
}
///
/// 执行服务
///
/// (操作码,字典(生产订单行内码,生产订单内码))
///
public JSONArray ExecuteService(KeyValuePair<string, dictionary<long, long>> parameters,DateTime inputDate)
{
JSONArray jsonArray = new JSONArray();
try
{
string operation = parameters.Key;
Dictionary<long, long> dctMoeIds = parameters.Value;
List<long> moEntryIds = dctMoeIds.Keys.ToList();
OperateOption statusOption = OperateOption.Create();
var selectedRows = new ListSelectedRowCollection();
statusOption.SetVariableValue("ExeCuteTime",inputDate)
foreach (var dctMoeId in dctMoeIds)
{
selectedRows.Add(new ListSelectedRow(dctMoeId.Value.ToString(), dctMoeId.Key.ToString(), 0, "PRD_MO"));
}
//下一句需引用Kingdee.BOS.Core.dll组件,并using Kingdee.BOS.Core.DynamicForm命名空间后可用
statusOption.SetBillOperationSelectedRows(selectedRows);
var result = AppServiceContext.GetMFGService<IMOService>().MOStateTransfer(this.KDContext.Session.AppContext, moEntryIds, operation, statusOption);
if (result.FuncResult.IsNullOrEmpty())
{
//校验不过的原因
string message = result.ValidationErrors[0].Message;
jsonArray.Add(message);
}
else
{
jsonArray.Add("生产订单状态机执行成功");
}
}
catch (Exception ex)
{
jsonArray.Add(ex.Message);
}
finally
{
}
return jsonArray;
}
}
}
2、封装自定义Webapi实现类示例如下:
// 使用webapi引用组件Kingdee.BOS.WebApi.Client.dll
//http://localhost:1400/ 本地部署的Cloud站点地址
ApiClient client = new ApiClient("http://localhost:1400/");
//参数:数据中心ID,用户名,密码,语言
bool result = client.Login("59c9f8153bb26a", "demo", "888888", 2052);
// 登陆成功
object responseOut = null;
if (result)
{
//状态机操作码,打开BOS设计器操作列表里面可以找到相应的操作码,如ToStart,UndoToPlanConfirm等
string operation = "UndoToPlanConfirm";
//构建结构为(生产订单行内码,生产订单内码)的数据字典
Dictionary<long, long> dctMoeIds = new Dictionary<long, long>();
dctMoeIds.Add(100467, 100027);
KeyValuePair<string, dictionary<long, long>> parameters = new KeyValuePair<string, dictionary<long, long>>(operation, dctMoeIds);
//传入对应的时间,
DateTime inputDate=DateTime.Now ;
// 注意第一个参数 sn + classname + methodname,assembly
responseOut = client.Execute<string>("Kingdee.EK.K3.MFG.WebApi.ServicesStub.MoTransfer.ExecuteService,Kingdee.EK.K3.MFG.WebApi.ServicesStub", new object[] { parameters ,inputDate});
}
3、部署(调试)说明:
将步骤1中的类所在组件编译成Kingdee.EK.K3.MFG.WebApi.ServicesStub.dll,放置于Cloud站点目录下的WebSite\Bin文件夹中,然后调试步骤2的代码,即可调用步骤1API接口。如果要调试步骤1的接口,则需要将步骤1的工程在Cloud服务器中采用附加IIS进程(w3wp.exe进程)的方法进行调试。
webapi 订单执行行状态,下传各类日期实现方式
本文2024-09-16 17:20:17发表“云星空知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-k3cloud-15047.html
- 鼎捷EAI整合規範文件V3.1.07 (集團).pdf
- 鼎捷OpenAPI應用場景說明_基礎資料.pdf
- 鼎捷OpenAPI應用場景說明_財務管理.pdf
- 鼎捷T100 API設計器使用手冊T100 APIDesigner(V1.0).docx
- 鼎新e-GoB2雲端ERP B2 線上課程E6-2應付票據整批郵寄 領取.pdf
- 鼎新e-GoB2雲端ERP B2 線上課程A4使用者建立權限設定.pdf
- 鼎新e-GoB2雲端ERP B2 線上課程C3會計開帳與會計傳票.pdf
- 鼎新e-GoB2雲端ERP B2 線上課程E6-1應付票據.pdf
- 鼎新e-GoB2雲端ERP B2 線上課程A5-1進銷存參數設定(初階篇).pdf
- 鼎新e-GoB2雲端ERP B2 線上課程D2帳款開帳與票據開帳.pdf