关于标准产品ECN(工程变更单)的webapi生效接口无效的二开处理原创
29人赞赏了该文章
598次浏览
编辑于2023年06月09日 10:05:45
由于标准产品的ECN生效有部分代码写在了表单插件上导致接口失效了,只能稍作二开自己处理一下。
先自定义一个web api,具体参考:https://vip.kingdee.com/article/218296473741031424
在自定义的api中处理我们的逻辑,找到对应的工程变更单然后调用服务插件中的生效方法
using Kingdee.BOS.Core.DynamicForm; using Kingdee.BOS.Core.Metadata; using Kingdee.BOS.Core.SqlBuilder; using Kingdee.BOS.Orm.DataEntity; using Kingdee.BOS.ServiceFacade.KDServiceClient.User; using Kingdee.BOS.ServiceFacade.KDServiceFx; using Kingdee.BOS.ServiceHelper; using Kingdee.BOS.WebApi.Client; using Kingdee.BOS.WebApi.ServicesStub; using Kingdee.K3.MFG.ServiceHelper.ENG; using Newtonsoft.Json.Linq; using System; using System.Linq; namespace ExtraProgram { public class apiClass : AbstractWebApiBusinessService { public apiClass(KDServiceContext context) : base(context) { } public JObject ExecuteService(string parameter) { JObject messages = new JObject(); UserServiceProxy proxy = new UserServiceProxy(); proxy.HostURL = @"http://172.17.2.179/k3cloud/"; Kingdee.BOS.Context context1 = proxy.ValidateUser("", "62a0339474f6a3", "demo", "888888", null, 2052).Context; FormMetadata meta = null; try { //时间过长的话context里面的sessionid会失效导致无法load元数据 meta = MetaDataServiceHelper.Load(context1, "ENG_ECNOrder") as FormMetadata; } catch (Exception e) { messages.Add("issuccess", "false"); messages.Add("detail", "该接口登录时间较长session被杀了,请重新发起一次调用创建新的session"); return messages; } if (meta == null) { messages.Add("issuccess", "false"); messages.Add("detail", "meta为空调式代码查看原因"); return messages; } QueryBuilderParemeter queryParam = new QueryBuilderParemeter(); queryParam.FormId = "ENG_ECNOrder"; //通过接口参数的FID找到对应的工程变更单 queryParam.FilterClauseWihtKey = String.Format("FID = {0}", parameter); DynamicObject objOrg = BusinessDataServiceHelper.Load(context1, meta.BusinessInfo.GetDynamicObjectType(), queryParam).FirstOrDefault(); //调用生效方法 IOperationResult result = ECNOrderServiceHelper.EffectChange(context1, meta.BusinessInfo, objOrg); //自己根据生效的result设置返回值 if (result.IsSuccess) { return messages; } return messages; } }
这是我本地工程的引用,我就不帮大家挑出来了,大家可以对着这个类的using选择的引入一下。
调用接口的result的返回值可以重新构建自定义api的返回信息
推荐阅读