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(): 获取当前用户的域IDgetParameter("参数名"): 获取视图查询参数getWebUser().getId(): 获取当前用户ID
SQL模式视图说明¶
- SQL模式: 允许直接编写SQL语句查询数据
- 灵活性: 比设计模式更灵活,可以实现复杂查询
- 性能: 直接使用SQL,性能通常更好
- 必需字段: SQL查询必须包含
domainid字段
SQL语句要求¶
必需字段¶
- domainid: 必须包含
domainid字段,用于数据隔离
字段选择¶
- 只选择需要的字段,避免使用
SELECT * - 如果字段超过10个,可以使用
SELECT * - 字段名格式:
item_字段名(表单字段)或直接字段名(系统字段)
表名格式¶
- 表单表:
tlk_表单名(tlk_ 前缀 + 表单名称) - 系统表: 直接使用系统表名,如
t_user、t_department等
注意事项¶
- ⚠️ domainid字段: SQL查询必须包含
domainid字段 - ⚠️ 字段选择: 只选择需要的字段,避免性能问题
- ⚠️ SQL注入: 注意SQL注入风险,对用户输入进行验证和转义
- ⚠️ 表名格式: 表单表名使用
tlk_表单名格式 - ⚠️ 字段名格式: 表单字段使用
item_字段名格式 - 视图选择框选的值不能在末尾有空字符,否则选不上
- 网格视图必须是设计模式转换为SQL模式
- 注意SQL语句的正确性,避免语法错误
使用场景¶
- 复杂数据查询
- 多表关联查询
- 统计查询
- 条件动态查询
- 性能优化
如需查看完整脚本代码,请访问源文档链接。