# KDSugar.Galaxy.API **Repository Path**: chongqingchitianxia/kdsugar.galaxy.api ## Basic Information - **Project Name**: KDSugar.Galaxy.API - **Description**: No description available - **Primary Language**: C# - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: http://www.kdsugar.cn - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 3 - **Created**: 2024-09-12 - **Last Updated**: 2024-09-12 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # KDSugar.Galaxy.API [KDSugar官网](http://www.kdsugar.cn)|[仓库地址](https://gitee.com/tosoft/kdsugar.galaxy.api)|[Nuget](https://www.nuget.org/packages/KDSugar.Galaxy.API)|[许可证](https://www.nuget.org/packages/KDSugar.Galaxy.API/1.0.0/license) ## 针对金蝶云·星空WebAPI接口的.NET实现开源解决方案 ### 引用要求 1、.Net Framework 4.0以及更高 2、如果项目已经引用Newtonsoft.Json的,请务必保证版本高于12.0.1 (如果不满足上述要求但有使用本项目的需求的,也可自行将本仓库Fork并Pull到本地进行自适应改造) #### 引用(适用于发行版) 在VS项目中打开Nuget管理器,搜索“KDSugar.Galaxy.API”(当然,只要输入关键字“KDSugar”也能搜到),然后点击安装并同意许可即可引用 ![打开Nuget程序包管理](http://kdsugar-cms.oos-website-cn.oos-cn.ctyunapi.cn/kdsg.api/img/Init1.png) ![安装界面](http://kdsugar-cms.oos-website-cn.oos-cn.ctyunapi.cn/kdsg.api/img/Init2.png) ### 功能与示例代码(C#) #### 初始化 ``` using KDSugar.Galaxy.API; namespace KDSG.API.TestCase { public class TestCall { public void TestLogin() { var apiClient = new GalaxyCloudAPIClient("http://192.168.86.128/k3cloud", "62654a94c89620", "Administrator", "888888"); var loginResult = apiClient.Login(); if (loginResult.LoginResultTypeStatus == GalaxyCloudAPIClient.LoginResponseInfo.LoginResultTypeStatusEnum.Success) { //登录成功后的处理 } //也可以在登录以后获取IsLogin属性确认是否登录成功 if (apiClient.IsLogin) { //登录成功后的处理 } else { string errorMsg = apiClient.LoginMessage;//登录失败后可获取其失败原因 } } } } ``` #### 查询(Query) ``` using KDSugar.Galaxy.API.Query; namespace KDSG.API.TestCase.Query { //查询模型(以仓库为例) [QueryTableTag(TableTagName = "BD_STOCK")] public class QueryModel { [QueryFieldTag(FieldTagName = "FStockId")] public long Id { get; set; } [QueryFieldTag(FieldTagName = "FNumber")] public string Number { get; set; } } } ``` ``` using System.Collections.Generic; using KDGAPI = KDSugar.Galaxy.API; namespace KDSG.API.TestCase { public class TestCall { public void TestOparate() { var apiClient = new KDGAPI.GalaxyCloudAPIClient("http://192.168.86.128/k3cloud", "62654a94c89620", "Administrator", "888888"); var loginResult = apiClient.Login(); if (apiClient.IsLogin) { KDGAPI.Query.QueryCommand queryCommand = new KDGAPI.Query.QueryCommand(apiClient); //通过SetFilter筛选字段条件 //queryCommand.SetFilter(m => m.Id >= 104960 || // (m.Id < 104960 && m.Number == "CK002")); //通过AppendOrderBy确定输出的字段顺序 //queryCommand.AppendOrderBy(m => m.Id, KDGAPI.Constant.OrderTypeEnum.Desc); List resultObj = queryCommand.ExecuteQueryBill(); } } } } ``` #### 保存/暂存(Save/Draft) ``` using System.Collections.Generic; using KDGAPI = KDSugar.Galaxy.API; namespace KDSG.API.TestCase { public class TestCall { public void TestOparate() { var apiClient = new KDGAPI.GalaxyCloudAPIClient("http://192.168.86.128/k3cloud", "62654a94c89620", "Administrator", "888888"); var loginResult = apiClient.Login(); if (apiClient.IsLogin) { KDGAPI.SaveOrDraft.SaveCommand saveCommand = new KDGAPI.SaveOrDraft.SaveCommand(apiClient); /* 如果需要调暂存,用下面这行 KDGAPI.SaveOrDraft.DraftCommand saveCommand = new KDGAPI.SaveOrDraft.DraftCommand(apiClient); */ SaveModel saveModel = new SaveModel() { Name = "测试用例仓库" }; var resultObj = saveCommand.ExecuteSaveBill(saveModel); } } } /// 保存模型(以仓库为例) [SaveTableTag(TableTagName = "BD_STOCK")] public class SaveModel { /// 仓库名称 [SaveFieldTag(FieldTagName = "FName")] public string Name { get; set; } } } ``` #### 查看(View) ``` using System.Collections.Generic; using KDGAPI = KDSugar.Galaxy.API; namespace KDSG.API.TestCase { public class TestCall { public void TestOparate() { var apiClient = new KDGAPI.GalaxyCloudAPIClient("http://192.168.86.128/k3cloud", "62654a94c89620", "Administrator", "888888"); var loginResult = apiClient.Login(); if (apiClient.IsLogin) { KDGAPI.View.ViewCommand viewCommand = new KDGAPI.View.ViewCommand("BD_STOCK", apiClient); viewCommand.SetNumber("CK001"); Dictionary resultObj = viewCommand.ExecuteViewBill(); } } } } ``` #### 提交(Submit) ``` using System.Collections.Generic; using KDGAPI = KDSugar.Galaxy.API; namespace KDSG.API.TestCase { public class TestCall { public void TestOparate() { var apiClient = new KDGAPI.GalaxyCloudAPIClient("http://192.168.86.128/k3cloud", "62654a94c89620", "Administrator", "888888"); var loginResult = apiClient.Login(); if (apiClient.IsLogin) { KDGAPI.Submit.SubmitCommand submitCommand = new KDGAPI.Submit.SubmitCommand("BD_STOCK", apiClient); submitCommand.SetNumbers(new List() { "CK019" }); var resultObj = submitCommand.Execute(); } } } } ``` #### 审核/反审核(Audit/UnAudit) ``` using System.Collections.Generic; using KDGAPI = KDSugar.Galaxy.API; namespace KDSG.API.TestCase { public class TestCall { public void TestOparate() { var apiClient = new KDGAPI.GalaxyCloudAPIClient("http://192.168.86.128/k3cloud", "62654a94c89620", "Administrator", "888888"); var loginResult = apiClient.Login(); if (apiClient.IsLogin) { KDGAPI.AuditOrUnAudit.AuditCommand auditCommand = new KDGAPI.AuditOrUnAudit.AuditCommand("BD_STOCK", apiClient); /* 反审核请使用下面行 KDGAPI.AuditOrUnAudit.UnAuditCommand unAuditCommand = new KDGAPI.AuditOrUnAudit.UnAuditCommand("BD_STOCK", apiClient); */ auditCommand.SetNumbers(new List() { "CK019" }); var resultObj = auditCommand.Execute(); } } } } ``` #### 删除(Delete) ``` using System.Collections.Generic; using KDGAPI = KDSugar.Galaxy.API; namespace KDSG.API.TestCase { public class TestCall { public void TestOparate() { var apiClient = new KDGAPI.GalaxyCloudAPIClient("http://192.168.86.128/k3cloud", "62654a94c89620", "Administrator", "888888"); var loginResult = apiClient.Login(); if (apiClient.IsLogin) { KDGAPI.Delete.DeleteCommand deleteCommand = new KDGAPI.Delete.DeleteCommand("BD_STOCK", apiClient); deleteCommand.SetNumbers(new List() { "CK020" }); var resultObj = deleteCommand.Execute(); } } } } ``` #### 下推(Push) ``` using System.Collections.Generic; using KDGAPI = KDSugar.Galaxy.API; namespace KDSG.API.TestCase { public class TestCall { public void TestOparate() { var apiClient = new KDGAPI.GalaxyCloudAPIClient("http://192.168.86.128/k3cloud", "62654a94c89620", "Administrator", "888888"); var loginResult = apiClient.Login(); if (apiClient.IsLogin) { KDGAPI.Push.PushCommand pushCommand = new KDGAPI.Push.PushCommand("PRD_MO", apiClient); pushCommand.SetNumbers(new List() { "MO000016" }); pushCommand.RuleId = "PRD_MO2INSTOCK"; //pushCommand.TargetFormId = "PRD_INSTOCK"; pushCommand.IsDraftWhenSaveFail = true; var resultObj = pushCommand.ExecutePushBill(); } } } } ``` #### 元数据(MateData) ``` using System.Collections.Generic; using KDGAPI = KDSugar.Galaxy.API; namespace KDSG.API.TestCase { public class TestCall { public void TestOparate() { var apiClient = new KDGAPI.GalaxyCloudAPIClient("http://192.168.86.128/k3cloud", "62654a94c89620", "Administrator", "888888"); var loginResult = apiClient.Login(); if (apiClient.IsLogin) { KDGAPI.MetaData.MetaDataCommand metaDataCommand = new KDGAPI.MetaData.MetaDataCommand("BD_STOCK", apiClient); var resultObj = metaDataCommand.ExecuteMetaDataQuery(); } } } } ``` #### 【通用操作】指令 有些时候,你可能需要对单据进行一些除上述基本功能之外的其他操作(例如单据废止、整单关闭与反关闭等),虽然说不像上述基本功能那种可以直接调用,但是也可以扩展开发达到调用的目的,具体操作如下: (PS:这是个变通实现方案,因为功能编写的时候忘记把【通用操作】相关的实现给做上去,以至于在发版之后才发现这个情况,正式的功能实现预计会在下次发版的时候给补上...) 首先,需要找到所需的调用指令,这里以【销售订单】的【作废】为例 ![金蝶云星空通用操作调用指令截图](http://kdsugar-cms.oos-website-cn.oos-cn.ctyunapi.cn/kdsg.api/img/CustCmd.png) (PS:关于通用操作指令,需要在WebAPI内找到带【opNumber】参数的部分) 可以看到【销售订单】的【作废】在WebAPI示例中【opNumber】对应显示为【Cancel】;如此,具体实现见如下代码 ``` using System.Collections.Generic; using KDGAPI = KDSugar.Galaxy.API; namespace KDSG.API.TestCase { public class TestCall { public void TestOparate() { var apiClient = new KDGAPI.GalaxyCloudAPIClient("http://192.168.86.128/k3cloud", "62654a94c89620", "Administrator", "888888"); var loginResult = apiClient.Login(); if (apiClient.IsLogin) { SealOrderCanCelCmd sealOrderCanCelCmd = new SealOrderCanCelCmd(); var resultInfo = apiClient.ExecuteCommand(sealOrderCanCelCmd);//拿到调用返回信息 } } } public class SealOrderCanCelCmd : KDGAPI.Base.BaseNumberIdNetwork { //需要指定URL public const string URL = "/Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.ExecuteOperation.common.kdsvc"; //需要依次填入URL,formid,opNumber;最后一个参数赋NULL public SealOrderCanCelCmd() :base(URL, "SAL_SaleOrder", "Cancel", null) { } public override bool ValidateResponseDataRule(string _responseData) { return true; } } } ``` ### 关于本项目的反馈与功能改进 第一次搞开源项目,可能有不完善的地方,还望谅解; 如果有意见/建议/提bug的,可以项目仓库内提Issues或者是发Email【mail@kdsugar.cn】说明 如果有兴趣参与本项目改进的,可以将本项目Fork到自己的仓库内,然后自行参考完善,然后提PR(Pull Request);功能改进类的请提到【feature】分支,bug修复类请提到【hotfix】分支 (PS:也是第一次这么整,情况会有变吧....先这么提,到时再说) ### 发版记录及说明 |版本|发行时间|说明|MD5| |-|-|-|-| |1.0.0|2022.6.22|首次发版|29cdd95c724faf9824aff18e68ff5670| 除了可以使用MD5码验证,正式版本的公共发版都会携带数字签名,如下图 ![数字签名示例1](http://kdsugar-cms.oos-website-cn.oos-cn.ctyunapi.cn/kdsg.api/img/Sign1.png) ![数字签名示例2](http://kdsugar-cms.oos-website-cn.oos-cn.ctyunapi.cn/kdsg.api/img/Sign2.png) ### 最后 如果有金蝶相关的意见或者想法,可以发Email【mail@kdsugar.cn】联系 也可在[KDSugar官网](http://www.kdsugar.cn)获取相关的动态或是最新的联系方式/交流群(如果有的话...)