在纷享销客与金蝶K3 Wise 14.3数据同步的项目中发现,K3 Wise 14.3 API很不完善,一是接口不完善,比如:没有即时库存查询接口,没有直接SQL报表接口,而这两个 接口只有升级到15.0以后才有。除了接口不完善外,还有很多基础资料、单据的字段不全,比如:基础资料里的物料,没有创建时间和修改时间字段,这样就很不方便,这些都是数据同步的基础条件,为了解决这些问题,跟金蝶研发进行了一番交流,他们提供了增加自定义API接口的一个demo,C#语言开发,经过测试,能够在K3 Wise 14.3和K3 Wise 15.0版本下正常运行。
![b866822c38dc11083cd52bbcb397f421.png](https://i-blog.csdnimg.cn/blog_migrate/e59d5407c1dd1af83f1392fb80fde757.jpeg)
//第三步的SQL
INSERT INTO t_APIComponents(FComponentID,FClassID,FController,FComponentName) VALUES(70,7000,'Demo' , 'k3api_custom|demo');
//第四步的SQL
INSERT INTO t_APIMethodTemplate(FMethodID,FKey,FOpera,FName_CHS,FName_CHT,FName_EN,FDesc_CHT,FDesc_CHS,FDesc_EN,FIndex,FMask,FScope,FRequestType)VALUES(20,'Test',0,'test', 'test','test', 'TEST 1%','TEST 1%', 'TEST 1%' ,20,0,0,'POST');
public ActionResponseResult GetInventory(Dictionary<string, string> dict)
{
ActionResponseResult result = new ActionResponseResult();
result.StatusCode = 200;
result.Message = "ok";
JavaScriptSerializer serializer = new JavaScriptSerializer();
StringBuilder sb = new StringBuilder();
String jsonString = dict["k3data"];
JavaScriptSerializer json = new JavaScriptSerializer();
DataItem postdata = (DataItem)json.Deserialize<DataItem>(jsonString);
string sql = postdata.StrSQL;
RemoteCommunication oComm = new RemoteCommunication(MMTS.ServerName);
DataTable dt = ((DataSet)oComm.RemoteCall(BOSServerClass.BusinessDataReaderService, "GetData", MultiAcctInfoMgr.GetK3Connect(this.m_sAcctID), sql)).Tables[0];
result.Data = dt;
string sql2 = "UPDATE t_Accessory SET FFileName = 'test' WHERE FID=1";
int i = ((int)oComm.RemoteCall(BOSServerClass.BusinessDataUpdateService, "UpdateData", MultiAcctInfoMgr.GetK3Connect(this.m_sAcctID), sql2));
return result;
}
这个方法接受的请求接口参数就是:dict,dict["k3data"],就是我们在请求接口时,POST过来的JSON字符串,可以把这个字符串解析出来,用于拼接SQL,查询需要的数据(dt),并返回。
这方面资料比较少,在金蝶社区也没有找到相关内容,分享出来,供有需要的小伙伴参考。
作者:王志锋
邮箱:wangzhifeng@tongdog.com.cn
欢迎各行业朋友交流CRM相关问题!