WebApi实现计划订单投放原创
金蝶云社区-亦木丶
亦木丶
1人赞赏了该文章 426次浏览 未经作者许可,禁止转载编辑于2023年04月20日 13:38:28

实现方式,二开实现一个自定义webapi 接口,大致思路如下:

1,创建个工程,Class2继承于AbstractWebApiBusinessService,实现自定义接口逻辑,将生成的DLL放在服务器Website/bin目录下

using Kingdee.BOS.Core;
using Kingdee.BOS.Core.Metadata;
using Kingdee.BOS.Orm.DataEntity;
using Kingdee.BOS.ServiceFacade.KDServiceFx;
using Kingdee.BOS.ServiceHelper;
using Kingdee.BOS.WebApi.ServicesStub;
using Newtonsoft.Json.Linq;
using Kingdee.K3.Core.MFG.PLN.ParamOption;
using Kingdee.K3.Core.MFG;
using Kingdee.K3.Core.SCM;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Kingdee.BOS.Util;
using Kingdee.K3.MFG.Contracts.PLN;

namespace ClassLibrary1
{
    public class Class2 : AbstractWebApiBusinessService
    {
        public Class2(KDServiceContext context) : base(context)
        {

        }
        public JObject ExecuteService(string info)
        {
            var param = Newtonsoft.Json.JsonConvert.DeserializeObject<List<string>>(info);
            List<string> pkIds = new List<string>();
            pkIds = param;
            JObject result = new JObject();
            if (pkIds.IsEmpty())
            {
                result.Add("Status", "False");
                result.Add("Message", "当前计划订单数据为空,请重新选,请确认!");
                return result;
            }
          FormMetadata PlanMeta = (FormMetadata)MetaDataServiceHelper.Load(this.KDContext.Session.AppContext, "PLN_PLANORDER");
            IEnumerable<DynamicObject> planOrderDataObjects = Kingdee.K3.MFG.App.AppServiceContext.ViewService.Load(this.KDContext.Session.AppContext, pkIds.ToArray(),
                    PlanMeta.BusinessInfo.GetDynamicObjectType()
                   ).ToList();
            FormMetadata paraMeta = (FormMetadata)MetaDataServiceHelper.Load(this.KDContext.Session.AppContext, "PLN_PlanOrderParam");
            DynamicObject setting = UserParamterServiceHelper.Load(this.KDContext.Session.AppContext, paraMeta.BusinessInfo, this.KDContext.Session.AppContext.UserId, "PLN_PLANORDER", KeyConst.USERPARAMETER_KEY) as DynamicObject;
            ReleaseOption option = new ReleaseOption();
            if (setting == null)
            {
                option.MOBillType = Kingdee.K3.Core.MFG.MFGBillTypeConst.PRD.PRD_MO.PRDMOPTRPT;
                option.EntrustBillType = MFGBillTypeConst.PRD.PRD_MO.PRDMOENTRUST;
                option.SubRequestBillType = MFGBillTypeConst.SUB.SUB_SUBREQORDER.SUBMOPT;
                option.PurchaseBillType = Kingdee.K3.Core.SCM.BillTypeConst.StandPurchaseRequisition;
                option.PurchaseStatus = "A";
                option.MaxPurEntryCount = 500;
                option.MaxProEntryCount = 50;
                option.MaxSubEntryCount = 50;
                option.IsCarryReplace = false;
            }
else
            {
                option.MOBillType = setting["MOBillTypeId_Id"].IsNullOrEmptyOrWhiteSpace() ? MFGBillTypeConst.PRD.PRD_MO.PRDMOPTRPT : setting["MOBillTypeId_Id"].ToString();
                option.EntrustBillType = setting["TrustTypeId_Id"].IsNullOrEmptyOrWhiteSpace() ? MFGBillTypeConst.PRD.PRD_MO.PRDMOENTRUST : setting["TrustTypeId_Id"].ToString();
                option.SubRequestBillType = setting["SubBillTypeId_Id"].IsNullOrEmptyOrWhiteSpace() ? MFGBillTypeConst.SUB.SUB_SUBREQORDER.SUBMOPT : setting["SubBillTypeId_Id"].ToString();
                option.PurchaseBillType = setting["POBillTypeId_Id"].IsNullOrEmptyOrWhiteSpace() ? Kingdee.K3.Core.SCM.BillTypeConst.StandPurchaseRequisition : setting["POBillTypeId_Id"].ToString();
                option.PurchaseStatus = setting["POReleaseStatus"].ToString();
                option.MaxPurEntryCount = Convert.ToInt32(setting["PrMaxEntryNo"]);
                option.MaxProEntryCount = Convert.ToInt32(setting["ProMaxEntryNo"]);
                option.MaxSubEntryCount = Convert.ToInt32(setting["SubMaxEntryNo"]);
                option.IsCarryReplace = setting["IsCarryReplace"].IsNullOrEmpty() ? false : Convert.ToBoolean(setting["IsCarryReplace"]);
            }
//手工投放
            option.AutoRelease = false;
            option.ActionOption = Kingdee.BOS.Orm.OperateOption.Create();
            Kingdee.BOS.Core.DynamicForm.IOperationResult operationResult = Kingdee.K3.MFG.App.AppServiceContext.GetMFGService<IReleaseService>().Release(this.KDContext.Session.AppContext, planOrderDataObjects, option); ;
            result.Add("Status", operationResult.IsSuccess);
            result.Add("Data", operationResult.IsNullOrEmpty() ? "" : Newtonsoft.Json.JsonConvert.SerializeObject(operationResult));
            result.Add("Message", operationResult.IsSuccess ? "投放成功" : "投放失败");
            return result;
        }
    }
}

2,客户端调用示例

using ClassLibrary1;
using Kingdee.BOS.ServiceHelper;
using Kingdee.BOS.WebApi.Client;
using Kingdee.K3.Core.MFG.ENG.ParamOption;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApp2
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                K3CloudApiClient client = new K3CloudApiClient("http://localhost:1702/k3cloud/");
                // ValidateLogin 参数可以通过webapi界面登录的时候查询
                var loginResult = client.ValidateLogin("60ff5edae546e1", "demo", "888888", 2052);
                
                var resultType = JObject.Parse(loginResult)["LoginResultType"].Value<int>();
                  
                if (resultType == 1)
                {
                    //BomOption bomExpandParam = new BomOption() {
                    //    BomUseOrgId=1,
                    //    ValidDate = DateTime.Now,
                    //    BillMaterialIds =new List<long>() { 188524 }
                    //};

                    //string serviceName = "ClassLibrary1.GetBomQueryBackwardDatas.ExecuteService,ClassLibrary1";
                    //var info = client.Execute<JObject>(serviceName, new object[] { JsonConvert.SerializeObject(bomExpandParam) });
                    //Console.ReadKey();
                    //传入计划订单ID
                    List<long> plnPkIds = new List<long>() { 279525 };
                    string serviceName = "ClassLibrary1.Class2.ExecuteService,ClassLibrary1";
                    var info = client.Execute<JObject>(serviceName, new object[] { JsonConvert.SerializeObject(plnPkIds) });
                    Console.ReadKey();
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            
        }
    public class ValidModelEntity
        {
            public string Acctid { get; set; }

            public string userName { get; set; }

            public string password { get; set; }

            public int lcid { get; set; }
        }
    }
}

3,调用结果

image.png

备注:

工程目录

image.png

图标赞 1
1人点赞
还没有人点赞,快来当第一个点赞的人吧!
图标打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!

您的鼓励与嘉奖将成为创作者们前进的动力,如果觉得本文还不错,可以给予作者创作打赏哦!

请选择打赏金币数 *

10金币20金币30金币40金币50金币60金币
可用金币: 0