跳转至

api接口获取数据数量

本文档内容来源于 http://doc.myapps.cn/docs/common-script/common-script-1f4u5ge63n155

脚本说明

该脚本用于通过API接口获取数据数量。在MyApps平台中,可以通过调用API接口来获取指定条件下的数据记录数量。

常见实现方式

方式1:调用API接口获取数据数量

(function(){
    var apiUrl = "http://api.example.com/data/count";
    var params = {
        formName: "表单名称",
        condition: "条件值"
    };

    // 构建请求URL
    var url = apiUrl + "?formName=" + params.formName + "&condition=" + params.condition;

    // 调用API(假设有HTTP请求函数)
    var response = httpGet(url);
    var result = JSON.parse(response);

    return result.count;
})();

方式2:使用平台API获取数据数量

(function(){
    var formName = "表单名称";
    var domainId = getWebUser().getDomainid();

    // 调用平台API获取数据数量
    var apiUrl = "/api/document/count";
    var params = {
        formName: formName,
        domainId: domainId
    };

    var response = callAPI(apiUrl, params);
    var result = JSON.parse(response);

    return result.count;
})();

方式3:通过API查询并统计

(function(){
    var apiUrl = "http://api.example.com/data/query";
    var params = {
        formName: "表单名称",
        pageSize: 0  // 设置为0表示只获取数量
    };

    var response = httpPost(apiUrl, JSON.stringify(params));
    var result = JSON.parse(response);

    return result.total;  // 返回总数
})();

方式4:带认证的API调用

(function(){
    var apiUrl = "http://api.example.com/data/count";
    var token = getToken();  // 获取访问令牌

    var headers = {
        "Authorization": "Bearer " + token,
        "Content-Type": "application/json"
    };

    var response = httpGetWithHeaders(apiUrl, headers);
    var result = JSON.parse(response);

    return result.count;
})();

扩展示例

示例1:根据条件获取数据数量

(function(){
    var apiUrl = "http://api.example.com/data/count";
    var formName = "表单名称";
    var condition = "状态=已完成";
    var domainId = getWebUser().getDomainid();

    var params = {
        formName: formName,
        condition: condition,
        domainId: domainId
    };

    var url = apiUrl + "?" + buildQueryString(params);
    var response = httpGet(url);
    var result = JSON.parse(response);

    return result.count || 0;
})();

示例2:获取多个表单的数据数量

(function(){
    var apiUrl = "http://api.example.com/data/count";
    var formNames = ["表单1", "表单2", "表单3"];
    var domainId = getWebUser().getDomainid();
    var counts = {};

    for(var i = 0; i < formNames.length; i++){
        var formName = formNames[i];
        var params = {
            formName: formName,
            domainId: domainId
        };

        var url = apiUrl + "?" + buildQueryString(params);
        var response = httpGet(url);
        var result = JSON.parse(response);

        counts[formName] = result.count || 0;
    }

    return JSON.stringify(counts);
})();

示例3:API调用并处理错误

(function(){
    var apiUrl = "http://api.example.com/data/count";
    var formName = "表单名称";

    try{
        var params = {
            formName: formName
        };

        var url = apiUrl + "?" + buildQueryString(params);
        var response = httpGet(url);

        if(response == null || response.trim().length == 0){
            return "错误: API返回为空";
        }

        var result = JSON.parse(response);

        if(result.success){
            return result.count || 0;
        }else{
            return "错误: " + (result.message || "未知错误");
        }
    }catch(e){
        return "错误: " + e.getMessage();
    }
})();

示例4:使用POST方式调用API

(function(){
    var apiUrl = "http://api.example.com/data/count";
    var params = {
        formName: "表单名称",
        conditions: {
            status: "已完成",
            dateRange: {
                start: "2024-01-01",
                end: "2024-12-31"
            }
        }
    };

    var headers = {
        "Content-Type": "application/json"
    };

    var response = httpPost(apiUrl, JSON.stringify(params), headers);
    var result = JSON.parse(response);

    return result.count || 0;
})();

示例5:获取数据数量并格式化输出

(function(){
    var apiUrl = "http://api.example.com/data/count";
    var formName = "表单名称";

    var params = {
        formName: formName
    };

    var url = apiUrl + "?" + buildQueryString(params);
    var response = httpGet(url);
    var result = JSON.parse(response);

    var count = result.count || 0;

    var output = "表单: " + formName + "\n";
    output += "数据数量: " + count;

    if(count > 0){
        output += "\n状态: 有数据";
    }else{
        output += "\n状态: 无数据";
    }

    return output;
})();

示例6:分页查询获取总数

(function(){
    var apiUrl = "http://api.example.com/data/query";
    var params = {
        formName: "表单名称",
        pageIndex: 1,
        pageSize: 1  // 只获取1条,主要为了获取total
    };

    var response = httpPost(apiUrl, JSON.stringify(params));
    var result = JSON.parse(response);

    // 返回总数
    return result.total || 0;
})();

示例7:使用MyApps平台内部API

(function(){
    var formName = "表单名称";
    var domainId = getWebUser().getDomainid();

    // 使用平台内部API
    var apiUrl = "/api/v1/document/count";
    var params = {
        formName: formName,
        domainId: domainId
    };

    var request = getParamsTable().getHttpRequest();
    var baseUrl = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort();
    var fullUrl = baseUrl + apiUrl;

    var response = httpPost(fullUrl, JSON.stringify(params));
    var result = JSON.parse(response);

    return result.count || 0;
})();

示例8:带缓存的API调用

(function(){
    var apiUrl = "http://api.example.com/data/count";
    var formName = "表单名称";
    var cacheKey = "api_count_" + formName;

    // 尝试从缓存获取
    var cacheUtil = new Packages.cn.myapps.common.util.cache.MemoryCacheUtil();
    var cachedCount = cacheUtil.getFromPrivateSpace(cacheKey, getWebUser());

    if(cachedCount != null){
        return cachedCount;
    }

    // 调用API
    var params = {
        formName: formName
    };

    var url = apiUrl + "?" + buildQueryString(params);
    var response = httpGet(url);
    var result = JSON.parse(response);

    var count = result.count || 0;

    // 存入缓存(缓存5分钟)
    cacheUtil.putToPrivateSpace(cacheKey, count, getWebUser());

    return count;
})();

示例9:异步API调用(示例)

(function(){
    var apiUrl = "http://api.example.com/data/count";
    var formName = "表单名称";

    // 注意:MyApps脚本通常是同步的,这里只是示例
    // 实际使用时可能需要使用同步方式或回调

    var params = {
        formName: formName
    };

    var url = apiUrl + "?" + buildQueryString(params);
    var response = httpGet(url);
    var result = JSON.parse(response);

    return result.count || 0;
})();

示例10:API调用并记录日志

(function(){
    var apiUrl = "http://api.example.com/data/count";
    var formName = "表单名称";

    println("开始调用API获取数据数量");
    println("API地址: " + apiUrl);
    println("表单名称: " + formName);

    try{
        var params = {
            formName: formName
        };

        var url = apiUrl + "?" + buildQueryString(params);
        println("请求URL: " + url);

        var response = httpGet(url);
        println("API响应: " + response);

        var result = JSON.parse(response);
        var count = result.count || 0;

        println("数据数量: " + count);

        return count;
    }catch(e){
        println("错误: " + e.getMessage());
        return 0;
    }
})();

关键函数说明

  • httpGet(url): 发送HTTP GET请求
  • httpPost(url, data): 发送HTTP POST请求
  • httpGetWithHeaders(url, headers): 带请求头的GET请求
  • httpPost(url, data, headers): 带请求头的POST请求
  • callAPI(apiUrl, params): 调用平台API(如果支持)
  • getToken(): 获取访问令牌
  • buildQueryString(params): 构建查询字符串
  • JSON.parse(jsonString): 解析JSON字符串
  • JSON.stringify(obj): 将对象转换为JSON字符串

API接口说明

请求方式

  • GET请求: 适用于简单的查询,参数通过URL传递
  • POST请求: 适用于复杂的查询,参数通过请求体传递

请求参数

  • formName: 表单名称
  • condition: 查询条件
  • domainId: 域ID
  • pageIndex: 页码(如果支持分页)
  • pageSize: 每页大小(如果支持分页)

响应格式

{
    "success": true,
    "count": 100,
    "message": "成功"
}

注意事项

  • ⚠️ API地址: 确保API地址正确且可访问
  • ⚠️ 认证信息: 如果API需要认证,确保提供正确的认证信息
  • ⚠️ 错误处理: 建议添加try-catch进行错误处理
  • ⚠️ 超时处理: API调用可能超时,需要处理超时情况
  • ⚠️ 缓存策略: 如果数据不经常变化,可以考虑使用缓存
  • ⚠️ 性能优化: 避免频繁调用API,考虑使用缓存或批量查询
  • API调用可能需要网络访问权限
  • 注意API的响应格式,确保正确解析
  • 建议添加日志记录,方便调试

使用场景

  • 获取表单数据数量
  • 统计报表数据
  • 数据监控和告警
  • 系统集成
  • 数据同步

如需查看完整脚本代码,请访问源文档链接。