金蝶云星空之WebAPI开发(Android)----单据查询

记录一下开发过程遇到的坑。因为金蝶云在webapi开发能查阅到的资料少之又少,java有些SDK包用不了,或者版本不兼容等各种问题。故再此记录一下用okhttp的方法来调用api接口。

接上一篇博客,获取到cookie后,传到数据页(emmm。。。activity传值,和fragment传值都会吧?我布局里用到fragment,自己挖坑给自己跳。。。后面总结篇会讲这些坑。。。)

好了,言归正传,继续码代码。

打开金蝶云星空客户端,查看webapi开发。看一下接口参数。

金蝶云星空之WebAPI开发(Android)----单据查询_第1张图片

 

依旧是看这个接口参数。

 必录的字段必须传值,非必录就可以不用写。我觉得最关键的还是JSON的构造。

我整理好了请求的JSON,如下:

{
    "data":{
        "FormId":"STK_InStock",
        "TopRowCount":0,
        "FilterString":"fcreatorid='792671'",
        "Limit":100,
        "StartRow":0,
        "FieldKeys":"fBillNo,FInStockEntry_Link_FSBillId,fdate",
        "OrderString":"fBillNo desc"
    }
}


        "FormId":"STK_InStock", //这个是表单id,必传的
        "TopRowCount":0,
        "FilterString":"fcreatorid='792671'", //这个是过滤字段,若是多个,就把FilterString构造成JSONarry,放入要过滤的字段的键值对。
        "Limit":100,// 这是查询返回结果的行数,0则为不限制(所有结果都返回)
        "StartRow":0,//从第几行开始
        "FieldKeys":"fBillNo,FInStockEntry_Link_FSBillId,fdate",//这里是要查询的字段
        "OrderString":"fBillNo desc"//按照什么什么字段排序

金蝶云星空之WebAPI开发(Android)----单据查询_第2张图片

postman测试返回结果没问题,直接就开线程构造请求函数。cookie放入请求头就好了。

因为返回结果是数组,我布局用listview显示出来,我把每个数组的值都取出来,定义一个对象,存放返回结果的string[],通过adapter填充进去。在线程调用 runOnUiThread(new Runnable()更新UI界面。

 public void filt(String billd){
        new Thread(new Runnable() {
            String url ="http://公司域名/k3cloud/Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.ExecuteBillQuery.common.kdsvc";
            @Override
            public void run() {
                JSONObject jsonObject = new JSONObject();
                try {
                    jsonObject.put("FormId", "PUR_ReceiveBill");//PUR_ReceiveBill
                } catch (JSONException e) {
                    e.printStackTrace();
                }
                try {
                    jsonObject.put("TopRowCount", 0); //HTTP HEADER
                } catch (JSONException e) {
                    e.printStackTrace();
                }
                try {
                    jsonObject.put("FilterString","fBillNo='"+billd+"'");
                } catch (JSONException e) {
                    e.printStackTrace();
                }
                try {
                    jsonObject.put("Limit", 100);
                } catch (JSONException e) {
                    e.printStackTrace();
                }
                try {
                    jsonObject.put("StartRow", 0); 
                } catch (JSONException e) {
                    e.printStackTrace();
                }
                try {
                    jsonObject.put("FieldKeys", "fBillNo,FDate,FSupplierid,FPurchaserId,FMaterialId.FNumber," +//4
                            "FMaterialName,FMateriaModel,FBaseUnitId," +//7
                            "FActReceiveQty,FDescription ,FStockID,FPriceUnitQty,FPriceUnitId,FUnitId,FID,FDetailEntity_FEntryID,FCloseStatus,F_abcd_Decimal");
                } catch (JSONException e) {
                    e.printStackTrace();
                }
                JSONObject jsonObject1 = new JSONObject();
                try {
                    jsonObject1.put("data", jsonObject);
                } catch (JSONException e) {
                    e.printStackTrace();
                }
                RequestBody myrequsetbody = RequestBody.create(MediaType.parse("application/json;charset=utf-8"), jsonObject1.toString());
                OkHttpClient okHttpClient = new OkHttpClient();
                Request request = new Request.Builder()
                        .post(myrequsetbody)
                        .url(url)
                        .addHeader("Content-Type", "application/json")
                        .addHeader("User-Agent", "PostmanRuntime/7.29.2")
                        .addHeader("Accept-Encoding", "gzip, deflate, br")
                        .addHeader("Connection", "keep-alive")
                        .addHeader("Accept", "*/*")
                        .addHeader("Cookie",token)
                        .build();

                Log.d("qy1314", "" + jsonObject);

                Response response = null;
                try {
                    response = okHttpClient.newCall(request).execute();
                    String date = response.body().string();
                    if(date.length()!=189) {

                        Log.d("qy1314", "res_json" + response);
                        json = new JSONArray(date);
                       JSONArray[] array1 =new JSONArray[json.length()];
                        for(int i=0;i

你可能感兴趣的:(开发语言,java,android-studio)