• 金蝶云星空自定义WebApi接口开发和调用


    1、金蝶云星空自定义WebApi开发

    插件开发好之后,编译生成DLL文件,放到金蝶安装目录\WebSite\bin下,并重启IIS

    2、客户端调用

    第一种方式,引用Kingdee.BOS.WebApi.Client组件

    自定义webapi的名称:接口工程命名空间.类名.方法名,接口工程命名空间

     第二种方式,不引用Kingdee.BOS.WebApi.Client组件

     

     

     

     

     

     3、工具调用自定义webapi示例

    接口的URL地址:http://IP/k3cloud/接口工程命名空间.类名.方法名,接口工程命名空间

     4、自定义Webapi源码示例

    using Kingdee.BOS.WebApi.ServicesStub;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using Kingdee.BOS.ServiceFacade.KDServiceFx;
    using Newtonsoft.Json.Linq;
    using Kingdee.BOS.App.Data;
    using System.Data;
    using Kingdee.BOS.ServiceHelper;

    namespace GetCust
    {
    public class GetCust: AbstractWebApiBusinessService
    {
    //固定写法,方法名和类名一致
    public GetCust(KDServiceContext context): base(context)
    {

    }
    public JObject ExecuteService(JObject parameter)
    {
    string OrgNo = MyConvert.ToString(parameter["OrgNo"]);
                //返回客户信息
                JObject jsonRoot = new JObject();
                //正确
                JObject jsonRootTrue = new JObject();
                //错误
                JObject jsonRootErr = new JObject();
    string Err = "";
    if (OrgNo == "")
    {
    Err = "组织字段不可以为空";
    }
    else
    {

    //数据库查询,是否有这个组织
    string sql = "/*dialect*/select FORGID from T_ORG_Organizations where FDOCUMENTSTATUS='C' AND FNUMBER = '" + OrgNo + "'";
    DataSet ds = DBServiceHelper.ExecuteDataSet(this.KDContext.Session.AppContext, sql);
    DataTable dt = ds.Tables[0];
    if (dt.Rows.Count == 1)
    {
    //查询组织下面的客户
    string sql1 = @"/*dialect*/select b.FCUSTID,FNUMBER,a.FNAME from T_BD_CUSTOMER_L a inner join T_BD_CUSTOMER b on a.FCUSTID=b.FCUSTID where FUSEORGID=" + (int)dt.Rows[0]["FORGID"] + " and a.FLOCALEID=2052";

    DataSet ds1 = DBServiceHelper.ExecuteDataSet(this.KDContext.Session.AppContext, sql1);
    DataTable dt1 = ds1.Tables[0];
    jsonRootTrue.Add("IsSuccess", "true");

    //构造Json
    JArray Rows = new JArray();
    jsonRootTrue.Add("Cust", Rows);
    for (int i = 0; i < dt1.Rows.Count; i++)
    {
    JObject Row = new JObject();
    Row.Add("Custid", dt1.Rows[i]["FCUSTID"].ToString());
    Row.Add("CustNumber", dt1.Rows[i]["FNUMBER"].ToString());
    Row.Add("CustName", dt1.Rows[i]["FNAME"].ToString());
    Rows.Add(Row);
    }
    }
    else
    {
    Err = "组织字段没有找到对应的编码";
    }
    }
    if (Err != "")
    {
    jsonRootErr.Add("IsSuccess", "false");
    jsonRootErr.Add("Errors", Err);
    jsonRoot = jsonRootErr;
    }
    else
    {
    jsonRoot = jsonRootTrue;
    }
    return jsonRoot;
    }
    }
    }

    5、客户端调用源码示例

    using Kingdee.BOS.WebApi.Client;
    using Newtonsoft.Json;
    using Newtonsoft.Json.Linq;
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.IO;
    using System.Linq;
    using System.Net;
    using System.Net.Http;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;

    namespace WindowsFormsApp1
    {
    public partial class Form1 : Form
    {
    public Form1()
    {
    InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
    #region 引用Kingdee.BOS.WebApi.Client
    //K3CloudApiClient client = new K3CloudApiClient("http://127.0.0.1/k3cloud/");
    //var loginResult = client.ValidateLogin("6281cc6e2ae1d5", "Administrator", "qwe123!@#", 2052);

    //var resultType = JObject.Parse(loginResult)["LoginResultType"].Value<int>();

    //if (resultType == 1)
    //{
    // string sJson = textBox1.Text;
    // textBox2.Text = client.Execute<JObject>("GetCust.GetCust.ExecuteService,GetCust", new object[] { sJson }).ToString();
    // //string a = Query(sJson);
    //}
    #endregion

    #region 不引用Kingdee.BOS.WebApi.Client
    var result = Login();
    var iResult = JObject.Parse(result)["LoginResultType"].Value<int>();
    if (iResult == 1 || iResult == -5)
    {
    string sJson = textBox1.Text;
    string a = Query(sJson);
    textBox2.Text = a;
    }
    #endregion
    }
    public static string Login()
    {
    HttpClient httpClient = new HttpClient();
    httpClient.Url = string.Concat("http://127.0.0.1/k3cloud/",
    "Kingdee.BOS.WebApi.ServicesStub.AuthService.ValidateUser.common.kdsvc");

    List<object> Parameters = new List<object>();
    Parameters.Add("6281cc6e2ae1d5");//账套标示
    Parameters.Add("Administrator");//用户名
    Parameters.Add("qwe123!@#");//密码
    Parameters.Add(2052);//2052代表中文
    httpClient.Content = JsonConvert.SerializeObject(Parameters);

    return httpClient.SysncRequest();
    }
    public static string Query(string content)
    {
    HttpClient httpClient = new HttpClient();
    httpClient.Url = string.Concat("http://127.0.0.1/k3cloud/", "GetCust.GetCust.ExecuteService,GetCust.common.kdsvc");

    List<object> Parameters = new List<object>();
    //业务对象Id
    //Parameters.Add(formId);
    //Json字串
    Parameters.Add(content);
    httpClient.Content = JsonConvert.SerializeObject(Parameters);
    return httpClient.SysncRequest();
    }
    }

    public class HttpClient
    {
    /// <summary>
    /// Seivice URL
    /// </summary>
    public string Url { get; set; }
    /// <summary>
    /// 内容
    /// </summary>
    public string Content { get; set; }
    /// <summary>
    /// Cookie,保证登录后,所有访问持有一个Cookie;
    /// </summary>
    static CookieContainer Cookie = new CookieContainer();

    /// <summary>
    /// HTTP访问
    /// </summary>
    public string SysncRequest()
    {
    HttpWebRequest httpRequest = HttpWebRequest.Create(Url) as HttpWebRequest;
    httpRequest.Method = "POST";
    httpRequest.ContentType = "application/json";
    httpRequest.CookieContainer = Cookie;
    httpRequest.Timeout = 1000 * 60 * 10;//10min

    using (Stream reqStream = httpRequest.GetRequestStream())
    {
    JObject jObj = new JObject();
    jObj.Add("format", 1);
    jObj.Add("useragent", "ApiClient");
    jObj.Add("rid", Guid.NewGuid().ToString().GetHashCode().ToString());
    jObj.Add("parameters", Content);
    jObj.Add("timestamp", DateTime.Now);
    jObj.Add("v", "1.0");
    string sContent = jObj.ToString();
    var bytes = UnicodeEncoding.UTF8.GetBytes(sContent);
    reqStream.Write(bytes, 0, bytes.Length);
    reqStream.Flush();
    }
    using (var repStream = httpRequest.GetResponse().GetResponseStream())
    {
    using (var reader = new StreamReader(repStream))
    {
    return ValidateResult(reader.ReadToEnd());
    }
    }
    }

    private static string ValidateResult(string responseText)
    {
    if (responseText.StartsWith("response_error:"))
    {
    var failText = responseText.TrimStart("response_error:".ToCharArray());
    }
    return responseText;
    }
    }
    }

  • 相关阅读:
    common daemon
    java和 javaw 以及 javaws的区别
    Windows 64位环境的Java 服务配置
    Java Service Wrapper
    使用exe4j把java程序生成可执行的.exe文件
    Oracle安装
    Oracle 排序问题(null带来的)
    剖析简易计算器带你入门微信小程序开发
    实战SpringMVC+Mybatis搭建高性能安全站点
    SpringMVC利用拦截器防止SQL注入
  • 原文地址:https://www.cnblogs.com/zfangfang/p/16317117.html
Copyright © 2020-2023  润新知