数据规范主要是指解决我们在表中输入、显示数据时几种通用的模式、规范。我们也可以换一种叫法:数据录入规范。我们可以通过这些规范的设置,即可以做到不写代码也可以完成常规开发的70-80%功能。
数据规范的类型有以下几种:请根据索引到相应的章节去详细了解其功能与使用方法。
ID | 数据规范分类 |
1 | 自动编号 |
2 | 窗口选择 |
3 | 标准字典 |
4 | 图片字典 |
5 | 列表项目 |
6 | 系统变量 |
7 | 目录树筛选 |
8 | 自动填充 |
9 | 智能筛选 |
打开方式
打开表属性设置窗口——》点击“列数据规范”按钮切换到相应的视图——》点击“数据规范(RuleID)”列、“自动录入(RuleID)”、“字典规范(RuleID)”都可以打开“数据规范管理”窗口。
一些共性的属性介绍
规范名称: 数据规范的名称,方便自己管理。
分类: 给数据规范起一个目录名称,方便进行分类管理。也方便筛选。
数据源名称:是指当前数据规范涉及的数据库来源。
SQL语句:加载数据所用的SQL语句。这里的SQL语句不仅支持常规的SQL语句,另外还支持几种特殊的参数。 点击右边的编辑按钮还可以打开“SQL编辑”窗口,具体教程可以参考“SQL编辑窗口”。
框架中所有数据规范用到SQL语句的地方都增加了添加变量参数的功能。这样,我们就可以利用以下几种变量,以实现灵活的加载、筛选,甚至是做一些权限的设置。像全国地区下拉选择这样的需求,也可以利用变量实现有条件地动态加载。某种意义上,这种方式变相的实现了类似存储过程的效果。
1.全局代码中的系统变量。比如Proj.User.UserID这类的。
特殊字符
代表全局变量
实际引用属性
{U.S.E.R.N.M}
用户名称
Proj.User.UserName
{U.S.E.R.I.D}
用户ID
Proj.User.UserID
{U.S.E.R.D.P.N.M}
部门名称
Proj.User.GroupName
{U.S.E.R.D.P.I.D}
部门ID
Proj.User.GroupID
{U.S.E.R.P.G.I.D}
项目ID
Proj.User.ProgramID
{U.S.E.R.P.G.N.M}
项目名称
Proj.User.ProgramName
{U.S.E.R.P.S.I.D}
职位ID
Proj.User.PositionID
{U.S.E.R.P.S.N.M}
职位名称
Proj.User.PositionName
{U.S.E.R.C.P.I.D}
公司ID
Proj.User.CompanyID
{Contain.Admin}
包含管理员权限
Proj.User.Roles.Contains(Proj.AdminRoleID)
{Contain.Developer}
包含开发者权限
Proj.User.Roles.Contains(Proj.DeveloperRoleID)
{AdminID}
管理员ID
Proj.AdminRoleID
{DeveloperID}
开发者ID
Proj.DeveloperRoleID
注意:在使用这类系统变量时得用一对单引号包住,如:GroupID='{U.S.E.R.D.P.I.D}'。另外,这类系统变量不是凭空就有的,需要我们在“代码管理 ”——>“登陆事件”——>“AfterConfirm”事件里面给每个用户根据实际的业务数据赋上值。
下面以一个示例来说明如何操作,示例中仅给用户的部门ID赋值,其他的如部门名称、公司名称这些得靠自己去扩展。
Vb.Net
Dim dt As DataTableHelp=Proj.SysDataFactory("UserDB").ExecuteDataTableHelp("select * from EmployeeInfo where EmployeeID='" & Proj.User.UserID & "'")
If dt IsNot Nothing AndAlso dt.DataRows.Count>0 Then
Dim dr As RowData=dt.DataRows(0)
Proj.User.GroupID=dr("Department").ToString()
End If
C#
DataTableHelp dt = Proj.SysDataFactory("UserDB").ExecuteDataTableHelp("select * from EmployeeInfo where EmployeeID='" + Proj.User.UserID + "'");
if (dt != null && dt.DataRows.Count > 0)
{
RowData dr = dt.DataRows(0);
Proj.User.GroupID = dr("Department").ToString();
}
2.当前行指定字段的值。
格式说明:{ R("字段名称")}, R代表Proj.CurrentGrid.CurrentRowData。
示例:
select typename from PMWordtype where ID like '%{ R("ID")}'
3.指定当前窗体指定表当前行指定字段的值。
格式说明:{T("表名称").R("字段名称")},T代表当前窗口中名为“表名称”的表,R代表当前行中“字段名称”字段中的值。
4.指定窗体指定表当前行指定字段的值。
格式说明:{F("窗体名称").T("表名称").R("字段名称")},这个参数就跟代码Proj.OpenedForms("窗体名称").Grids("表名称").CurrentRowData("字段名称")的值一致。
5.Var变量
格式说明:{Vars("变量名")},这个参数就跟代码Proj.Vars("变量名")的值一致。
6、当前桌面当前窗体指定表当前行指定字段的值
格式说明:{D("表名称").R("字段名称")},这个参数就跟代码Proj.CurrentDesktop.CurrentForm.Grids("表名称").CurrentRowData("字段名称")的值一致。
7、父表的当前行指定字段的值
格式说明:{ P("字段名称")}, P代表Proj.CurrentSmGrid.Relation.ParentGrid.CurrentRowData("字段名称")。