跳转至

获取网格视图(页面上获取)

本文档内容来源于 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(): 获取当前应用ID
  • getWebUser().getDomainid(): 获取当前用户的域ID

网格视图数据结构

网格视图返回的数据通常是文档集合,每个文档包含: - id: 文档ID - item_字段名: 文档字段值 - 可以通过 getItemValueAsString()getItemValueAsDouble() 等方法获取字段值

注意事项

  • ⚠️ 视图名称: 确保视图名称准确,区分大小写
  • ⚠️ 应用ID: 需要指定正确的应用ID
  • ⚠️ SQL查询: 如果直接使用SQL查询,注意SQL注入风险
  • ⚠️ 数据量: 如果数据量很大,建议使用分页或限制查询数量
  • ⚠️ 空值处理: 查询结果可能为空,需要判断
  • ⚠️ 性能优化: 大量数据查询时注意性能优化
  • 网格视图数据可以通过视图对象获取SQL语句,然后执行查询
  • 也可以直接通过SQL查询表单数据表获取数据
  • 返回的数据可以转换为JSON格式,方便前端使用

使用场景

  • 在页面上获取网格视图数据
  • 获取选中行的数据
  • 数据过滤和查询
  • 数据统计和分析
  • 数据导出和格式化
  • 动态数据展示

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