获取网格视图(页面上获取)¶
本文档内容来源于 http://doc.myapps.cn/docs/common-script/common-script-1fbojm7pi88kk
脚本说明¶
该脚本用于在页面上获取网格视图的数据。网格视图是MyApps平台中常用的数据展示方式,可以通过脚本获取视图中的数据,进行进一步的处理和操作。
常见实现方式¶
方式1:通过视图名称获取网格视图数据¶
(function(){
var viewName = "视图名称";
var viewProcess = getViewProcess();
var view = viewProcess.doViewByViewName(viewName, getApplication());
if(view != null){
var viewId = view.getId();
// 获取视图数据
var sql = view.getSQL(); // 获取视图的SQL语句
var datas = queryBySQL(sql);
return datas;
}
return null;
})();
方式2:通过视图ID获取网格视图数据¶
(function(){
var viewId = "视图ID";
var viewProcess = getViewProcess();
var view = viewProcess.doView(viewId);
if(view != null){
var sql = view.getSQL();
var datas = queryBySQL(sql);
return datas;
}
return null;
})();
方式3:直接查询视图数据¶
(function(){
var viewName = "视图名称";
var applicationId = getApplication();
// 通过SQL查询视图数据
var sql = "SELECT * FROM tlk_表单名 WHERE domainid = '" + getWebUser().getDomainid() + "'";
var datas = queryBySQL(sql);
return datas;
})();
方式4:获取网格视图并转换为JSON¶
(function(){
var viewName = "视图名称";
var viewProcess = getViewProcess();
var view = viewProcess.doViewByViewName(viewName, getApplication());
if(view != null){
var sql = view.getSQL();
var datas = queryBySQL(sql);
var result = [];
if(datas != null && datas.size() > 0){
for(var it = datas.iterator(); it.hasNext();){
var data = it.next();
var row = {};
row.id = data.getId();
row.field1 = data.getItemValueAsString("字段1");
row.field2 = data.getItemValueAsString("字段2");
result.push(row);
}
}
return JSON.stringify(result);
}
return "[]";
})();
扩展示例¶
示例1:获取网格视图的选中行数据¶
(function(){
var selectIds = getParameter("_selects");
if(selectIds == null || selectIds.trim().length == 0){
return "请选择数据";
}
var ids = selectIds.split(";");
var result = [];
for(var i = 0; i < ids.length; i++){
var docId = ids[i];
if(docId != null && docId.trim().length > 0){
var doc = findDocument(docId);
if(doc != null){
var row = {
id: docId,
field1: doc.getItemValueAsString("字段1"),
field2: doc.getItemValueAsString("字段2")
};
result.push(row);
}
}
}
return JSON.stringify(result);
})();
示例2:获取网格视图并过滤数据¶
(function(){
var viewName = "视图名称";
var filterValue = getParameter("filterValue");
var viewProcess = getViewProcess();
var view = viewProcess.doViewByViewName(viewName, getApplication());
if(view != null){
var sql = view.getSQL();
// 添加过滤条件
if(filterValue != null && filterValue.trim().length > 0){
sql += " AND item_字段名 = '" + filterValue + "'";
}
var datas = queryBySQL(sql);
return datas;
}
return null;
})();
示例3:获取网格视图并分页¶
(function(){
var viewName = "视图名称";
var pageIndex = getParameter("pageIndex") || 0;
var pageSize = getParameter("pageSize") || 20;
var viewProcess = getViewProcess();
var view = viewProcess.doViewByViewName(viewName, getApplication());
if(view != null){
var sql = view.getSQL();
var datas = queryBySQL(sql);
var total = datas != null ? datas.size() : 0;
var startIndex = pageIndex * pageSize;
var endIndex = Math.min(startIndex + pageSize, total);
var result = {
total: total,
pageIndex: pageIndex,
pageSize: pageSize,
data: []
};
if(datas != null && datas.size() > 0){
var index = 0;
for(var it = datas.iterator(); it.hasNext();){
var data = it.next();
if(index >= startIndex && index < endIndex){
var row = {
id: data.getId(),
field1: data.getItemValueAsString("字段1"),
field2: data.getItemValueAsString("字段2")
};
result.data.push(row);
}
index++;
}
}
return JSON.stringify(result);
}
return "{}";
})();
示例4:获取网格视图并统计¶
(function(){
var viewName = "视图名称";
var viewProcess = getViewProcess();
var view = viewProcess.doViewByViewName(viewName, getApplication());
if(view != null){
var sql = view.getSQL();
var datas = queryBySQL(sql);
var stats = {
total: 0,
sum: 0,
avg: 0
};
if(datas != null && datas.size() > 0){
stats.total = datas.size();
var sum = 0;
for(var it = datas.iterator(); it.hasNext();){
var data = it.next();
var value = data.getItemValueAsDouble("数值字段");
sum += value;
}
stats.sum = sum;
stats.avg = sum / stats.total;
}
return JSON.stringify(stats);
}
return "{}";
})();
示例5:获取网格视图并格式化输出¶
(function(){
var viewName = "视图名称";
var viewProcess = getViewProcess();
var view = viewProcess.doViewByViewName(viewName, getApplication());
if(view != null){
var sql = view.getSQL();
var datas = queryBySQL(sql);
var html = "<table border='1'><tr><th>字段1</th><th>字段2</th><th>字段3</th></tr>";
if(datas != null && datas.size() > 0){
for(var it = datas.iterator(); it.hasNext();){
var data = it.next();
html += "<tr>";
html += "<td>" + data.getItemValueAsString("字段1") + "</td>";
html += "<td>" + data.getItemValueAsString("字段2") + "</td>";
html += "<td>" + data.getItemValueAsString("字段3") + "</td>";
html += "</tr>";
}
}
html += "</table>";
return html;
}
return "未找到视图数据";
})();
示例6:获取网格视图并导出¶
(function(){
var viewName = "视图名称";
var viewProcess = getViewProcess();
var view = viewProcess.doViewByViewName(viewName, getApplication());
if(view != null){
var sql = view.getSQL();
var datas = queryBySQL(sql);
var csv = "字段1,字段2,字段3\n";
if(datas != null && datas.size() > 0){
for(var it = datas.iterator(); it.hasNext();){
var data = it.next();
csv += data.getItemValueAsString("字段1") + ",";
csv += data.getItemValueAsString("字段2") + ",";
csv += data.getItemValueAsString("字段3") + "\n";
}
}
return csv;
}
return "";
})();
示例7:获取网格视图并关联其他数据¶
(function(){
var viewName = "视图名称";
var viewProcess = getViewProcess();
var view = viewProcess.doViewByViewName(viewName, getApplication());
if(view != null){
var sql = view.getSQL();
var datas = queryBySQL(sql);
var result = [];
if(datas != null && datas.size() > 0){
for(var it = datas.iterator(); it.hasNext();){
var data = it.next();
var userId = data.getItemValueAsString("用户字段");
// 关联用户信息
var user = getUserById(userId);
var userName = user != null ? user.getName() : "";
var row = {
id: data.getId(),
field1: data.getItemValueAsString("字段1"),
userId: userId,
userName: userName
};
result.push(row);
}
}
return JSON.stringify(result);
}
return "[]";
})();
示例8:获取网格视图并动态过滤¶
(function(){
var viewName = "视图名称";
var filterField = getParameter("filterField");
var filterValue = getParameter("filterValue");
var viewProcess = getViewProcess();
var view = viewProcess.doViewByViewName(viewName, getApplication());
if(view != null){
var sql = view.getSQL();
// 动态添加过滤条件
if(filterField != null && filterField.trim().length > 0 &&
filterValue != null && filterValue.trim().length > 0){
sql += " AND item_" + filterField + " = '" + filterValue + "'";
}
var datas = queryBySQL(sql);
return datas;
}
return null;
})();
关键函数说明¶
getViewProcess(): 获取视图处理对象viewProcess.doViewByViewName(viewName, applicationId): 根据视图名称获取视图对象viewProcess.doView(viewId): 根据视图ID获取视图对象view.getSQL(): 获取视图的SQL查询语句queryBySQL(sql): 执行SQL查询并返回结果集findDocument(docId): 根据文档ID查找文档getParameter("参数名"): 获取请求参数getApplication(): 获取当前应用IDgetWebUser().getDomainid(): 获取当前用户的域ID
网格视图数据结构¶
网格视图返回的数据通常是文档集合,每个文档包含:
- id: 文档ID
- item_字段名: 文档字段值
- 可以通过 getItemValueAsString()、getItemValueAsDouble() 等方法获取字段值
注意事项¶
- ⚠️ 视图名称: 确保视图名称准确,区分大小写
- ⚠️ 应用ID: 需要指定正确的应用ID
- ⚠️ SQL查询: 如果直接使用SQL查询,注意SQL注入风险
- ⚠️ 数据量: 如果数据量很大,建议使用分页或限制查询数量
- ⚠️ 空值处理: 查询结果可能为空,需要判断
- ⚠️ 性能优化: 大量数据查询时注意性能优化
- 网格视图数据可以通过视图对象获取SQL语句,然后执行查询
- 也可以直接通过SQL查询表单数据表获取数据
- 返回的数据可以转换为JSON格式,方便前端使用
使用场景¶
- 在页面上获取网格视图数据
- 获取选中行的数据
- 数据过滤和查询
- 数据统计和分析
- 数据导出和格式化
- 动态数据展示
如需查看完整脚本代码,请访问源文档链接。