跳转至

sql模式视图的简单代码

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

脚本说明

该脚本用于在SQL模式视图中编写查询脚本。SQL模式视图允许直接使用SQL语句查询数据,比设计模式更灵活,可以实现复杂的查询逻辑。

常见实现方式

方式1:基本SQL查询

(function(){
    var sql = "select domainid,id,item_字段1,item_字段2 ";
    sql += "from tlk_表单名 ";
    sql += "where domainid = '"+getWebUser().getDomainid()+"'";

    return sql;
})();

方式2:带条件查询

(function(){
    var condition = getParameter("查询条件");
    var sql = "select domainid,id,item_字段1,item_字段2 ";
    sql += "from tlk_表单名 ";
    sql += "where domainid = '"+getWebUser().getDomainid()+"'";

    if(condition != null && condition.trim().length > 0){
        sql += " and item_字段1 like '%"+condition+"%'";
    }

    return sql;
})();

方式3:根据当前用户查询

(function(){
    var currentUserId = getWebUser().getId();
    var sql = "select domainid,id,item_字段1,item_字段2 ";
    sql += "from tlk_表单名 ";
    sql += "where domainid = '"+getWebUser().getDomainid()+"' ";
    sql += "and item_创建人 = '"+currentUserId+"'";

    return sql;
})();

方式4:关联查询

(function(){
    var sql = "select domainid,d.id,d.item_字段1,d.item_字段2,u.name as 创建人姓名 ";
    sql += "from tlk_表单名 d ";
    sql += "left join t_user u on d.item_创建人 = u.id ";
    sql += "where d.domainid = '"+getWebUser().getDomainid()+"'";

    return sql;
})();

扩展示例

示例1:根据日期范围查询

(function(){
    var startDate = getParameter("开始日期");
    var endDate = getParameter("结束日期");
    var sql = "select domainid,id,item_字段1,item_日期字段 ";
    sql += "from tlk_表单名 ";
    sql += "where domainid = '"+getWebUser().getDomainid()+"'";

    if(startDate != null && startDate.trim().length > 0){
        sql += " and item_日期字段 >= '"+startDate+"'";
    }

    if(endDate != null && endDate.trim().length > 0){
        sql += " and item_日期字段 <= '"+endDate+"'";
    }

    sql += " order by item_日期字段 desc";

    return sql;
})();

示例2:根据流程状态查询

(function(){
    var sql = "select domainid,d.id,d.item_字段1,fs.state,fs.state_label ";
    sql += "from tlk_表单名 d ";
    sql += "inner join t_flowstatert fs on d.id = fs.docid ";
    sql += "where d.domainid = '"+getWebUser().getDomainid()+"' ";
    sql += "and fs.state = '运行中'";

    return sql;
})();

示例3:统计查询

(function(){
    var sql = "select domainid,item_分类字段,count(*) as 数量,sum(item_金额字段) as 总金额 ";
    sql += "from tlk_表单名 ";
    sql += "where domainid = '"+getWebUser().getDomainid()+"' ";
    sql += "group by item_分类字段 ";
    sql += "order by 总金额 desc";

    return sql;
})();

示例4:子查询

(function(){
    var sql = "select domainid,id,item_字段1,item_字段2 ";
    sql += "from tlk_表单名 ";
    sql += "where domainid = '"+getWebUser().getDomainid()+"' ";
    sql += "and id in (";
    sql += "    select parent ";
    sql += "    from tlk_子表表单 ";
    sql += "    where item_状态 = '已完成'";
    sql += ")";

    return sql;
})();

示例5:多表关联查询

(function(){
    var sql = "select domainid, ";
    sql += "d.id, ";
    sql += "d.item_字段1, ";
    sql += "u.name as 创建人, ";
    sql += "dept.name as 部门名称, ";
    sql += "fs.state_label as 流程状态 ";
    sql += "from tlk_表单名 d ";
    sql += "left join t_user u on d.item_创建人 = u.id ";
    sql += "left join t_department dept on u.departmentid = dept.id ";
    sql += "left join t_flowstatert fs on d.id = fs.docid ";
    sql += "where d.domainid = '"+getWebUser().getDomainid()+"'";

    return sql;
})();

关键函数说明

  • getWebUser().getDomainid(): 获取当前用户的域ID
  • getParameter("参数名"): 获取视图查询参数
  • getWebUser().getId(): 获取当前用户ID

SQL模式视图说明

  • SQL模式: 允许直接编写SQL语句查询数据
  • 灵活性: 比设计模式更灵活,可以实现复杂查询
  • 性能: 直接使用SQL,性能通常更好
  • 必需字段: SQL查询必须包含 domainid 字段

SQL语句要求

必需字段

  • domainid: 必须包含 domainid 字段,用于数据隔离

字段选择

  • 只选择需要的字段,避免使用 SELECT *
  • 如果字段超过10个,可以使用 SELECT *
  • 字段名格式:item_字段名(表单字段)或直接字段名(系统字段)

表名格式

  • 表单表: tlk_表单名(tlk_ 前缀 + 表单名称)
  • 系统表: 直接使用系统表名,如 t_usert_department

注意事项

  • ⚠️ domainid字段: SQL查询必须包含 domainid 字段
  • ⚠️ 字段选择: 只选择需要的字段,避免性能问题
  • ⚠️ SQL注入: 注意SQL注入风险,对用户输入进行验证和转义
  • ⚠️ 表名格式: 表单表名使用 tlk_表单名 格式
  • ⚠️ 字段名格式: 表单字段使用 item_字段名 格式
  • 视图选择框选的值不能在末尾有空字符,否则选不上
  • 网格视图必须是设计模式转换为SQL模式
  • 注意SQL语句的正确性,避免语法错误

使用场景

  • 复杂数据查询
  • 多表关联查询
  • 统计查询
  • 条件动态查询
  • 性能优化

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