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: 每页大小(如果支持分页)
响应格式¶
注意事项¶
- ⚠️ API地址: 确保API地址正确且可访问
- ⚠️ 认证信息: 如果API需要认证,确保提供正确的认证信息
- ⚠️ 错误处理: 建议添加try-catch进行错误处理
- ⚠️ 超时处理: API调用可能超时,需要处理超时情况
- ⚠️ 缓存策略: 如果数据不经常变化,可以考虑使用缓存
- ⚠️ 性能优化: 避免频繁调用API,考虑使用缓存或批量查询
- API调用可能需要网络访问权限
- 注意API的响应格式,确保正确解析
- 建议添加日志记录,方便调试
使用场景¶
- 获取表单数据数量
- 统计报表数据
- 数据监控和告警
- 系统集成
- 数据同步
如需查看完整脚本代码,请访问源文档链接。