K/3 Cloud在5.0版本中推出了集成利器WebApi,使得伙伴的集成开发更加简单了,无需构建Webservice站点,轻引用,轻松实现数据集成。唯一遗憾的是webapi接口仍然是面向表单级别的服务,缺少一个万能接口,可以由开发伙伴来自定义参数、自己实现接口的业务逻辑,自己返回处理结果。现在很高兴的告诉大家,我们将马上放开这个接口给到大家,让大家爱怎么玩就怎么玩。具体实现步骤请参考下面:
1、首先写一个K/3Cloud服务插件,需要引用Kingdee的相关组件,这个插件必须要继承抽象类Kingdee.BOS.WebApi.ServicesStub.AbstractWebApiBusinessService,实现构造函数,然后就可以任意定义服务接口和接口参数了,如下例子定义了两个服务接口:ExecuteService和UpdateData
参考示例如下:
using Kingdee.BOS.Core.Metadata;
using Kingdee.BOS.Core.SqlBuilder;
using Kingdee.BOS.JSON;
using Kingdee.BOS.Orm.DataEntity;
using Kingdee.BOS.Orm.Metadata.DataEntity;
using Kingdee.BOS.ServiceHelper;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ApiServiceTest
{
/// <summary>
///
/// </summary>
public class CustomBusinessService : Kingdee.BOS.WebApi.ServicesStub.AbstractWebApiBusinessService
{
public CustomBusinessService(Kingdee.BOS.ServiceFacade.KDServiceFx.KDServiceContext context)
: base(context)
{ }
/// <summary>
/// 执行服务,根据参数来处理自己的业务并返回结果
/// </summary>
/// <param name="ctx"></param>
/// <param name="parameter"></param>
/// <returns></returns>
public JSONArray ExecuteService(string parameter)
{
// TODO:在此方法中处理业务,可以引用Kingdee现有接口,根据传入的参数来实现自己的业务逻辑,
// 例如查询数据、单据转换、甚至数据同步等都可以
// 以下为查询币别信息的示例代码
// 构造查询参数
QueryBuilderParemeter para = new QueryBuilderParemeter()
{
// 查询表单,测试用例中直接传入了“BD_Currency”
FormId = parameter,
// 需要查询币别主键、币别名称等信息,此处用字段的标识来构造
SelectItems = SelectorItemInfo.CreateItems("FCURRENCYID,FName"),
};
// 调用查询接口
DynamicObjectCollection list = QueryServiceHelper.GetDynamicObjectCollection(this.KDContext.Session.AppContext, para);
// 返回结果类型可以自定义
// 如果第三方系统不想引用BOS其他组件的,可以使用json字符串、List、Dictionary等类型做为返回结果
// 此处示例代码使用 BOS定义的类型JSONArray
JSONArray jsonArray = new JSONArray();
foreach (DynamicObject dynamicObject in list)
{
jsonArray.Add(ConvertDynamicObject2Json(dynamicObject));
}
return jsonArray;
}
/// <summary>
/// 自定义服务接口
/// </summary>
/// <param name="parameter"></param>
/// <param name="formId"></param>
/// <returns></returns>
public bool UpdateData(string parameter,string formId)
{
return true;
}
private JSONObject ConvertDynamicObject2Json(DynamicObject dynamicObject)
{
DynamicPropertyCollection dynamicPropertyCollection = dynamicObject.DynamicObjectType.Properties;
JSONObject obj = new JSONObject();
foreach (DynamicProperty property in dynamicPropertyCollection)
{
obj.Put(property.Name, dynamicObject[property.Name]);
}
return obj;
}
}
}
2、第三方系统集成调用,参考示例如下:
namespace Test1
{
static class Program
{
static void Main(string[] args)
{
// 使用webapi引用组件Kingdee.BOS.WebApi.Client.dll
ApiClient client = new ApiClient("http://localhost:1200/");
bool result = client.Login("00155dd2d2b4b79811e4113e191b84d1", "Developer", "888888", 2052);
// 登陆成功
object responseOut = null;
if (result)
{
// 注意第一个参数 sn + classname + methodname,assembly
responseOut = client.Execute<JSONArray>("ApiServiceTest.CustomBusinessService.ExecuteService,ApiServiceTest", new object[] { "BD_Currency" });
}
Console.Write(responseOut);
}
}
}
转载论坛:http://club.kingdee.com/home.php?mod=space&uid=421001&do=blog&id=119314&page=2#comment
推荐阅读