本帖最后由 liuyang 于 2016-6-16 11:22 编辑
概要:设计表结构主要是各个表里的字段进行统一管理。 功能描述:
首先【表名】是必填的,【单据类型】要注册生成,具体操作如下:
如何生成单据类型:
1、输入表名 2、点击【保存】下面的【注册主档】就会自动生成一个单据类型 3、再点击【保存】下面的【跳到单据类型】进行单据类型的配置([24230]系统单据类型管理)
单点功能说明
添加的单个按钮的业务描述
【注册为单据】把本表注册为单据,回写表的链接单据类型ID 【注册为主档】把本表注册成主档,回写表的链接单据类型ID 【跳转到单据类型】点击跳转到该表的单据类型管理 【跳转到DB脚本】点击跳转到该单据类型的DB脚本 【跳转到常量】选中有常量值的一行字段,点击跳转就可以对该字段的常量值进行管理 【跳转到单据公式】选中已生成常量值的一行字段,点击跳转就可以对该字段的常量值进行管理 【复制到产品】选中已经生成了编码规则的一行字段,点击跳转就可以对该字段的单据公式进行管理 【复制到产品】把本表复制到其他产品 【剪切到产品】复制出来的表剪其他产品 【注册表类型】相当于表变量 【生成表类型脚本】 【生成Trigger文件】 【父表名】相当于继承关系,父表里有的数据,子表里面就一定存在,但是字表里面也可以再添加新的数据。 【标题】表名的标题 【iIdenGroup】ID分组归类 【分组字段】、【所属项目】根据实际情况填写
字段
【导入】导入其他表的字段
【合并父类字段】父表里有的字段字表里没有就需要合并父类字段,保持子表和父表字段一致,查询父表必填字段,非必填但本表中有的也要合并本表中的重载字段,不合并父类字段【从父表同步】当本表和父表的字段不一致时,就同步父表即可 【注册到标准库】把本表的某个字段注册到标准库 【从标准库同步】本表和标准库的字段不一致 【复制选中字段名】对该行数据进行复制的功能 【显示废弃字段】勾选上就会看到废弃了不用的字段,这边用到的action:
DoIf(:f[bsEntityInfo.bShowAbandonedColumn]=0,EntitySet.Filter(dtlEntitySet,bAbandoned=0));#当这个字段名=0(未勾选),是否废弃字段(bAbandoned)也是未勾选,就不显示废弃字段
DoIf(:f[bsEntityInfo.bShowAbandonedColumn]=1,EntitySet.Filter(dtlEntitySet))#当这个字段名=1(勾选),dtl实体集的数据都会显示出来
【字段名】,【类型】
字段类型 | 描述 | bit
| 0或1的整型数字
| int
| 从-2^31(-2,147,483,648)到2^31(2,147,483,647)的整型数字
| nvarchar
| 变长Unicode的字符型数据,最大长度为8000
| varchar
| 变长非Unicode的字符型数据,最大长度为8000
| decimal
| 从-10^38到10^38-1的定精度与有效位数的数字
| numeric
| decimal的同义词
| float
| 从-1.79E+308到1.79E+308可变精度的数字
| char
| 定长非Unicode的字符型数据,最大长度为8000
| datetime
| 从1753年1月1日到9999年12日31的日期和时间数据,最小时间单位为百分之三秒或3.33毫秒
| smallint
| 从-2^15(-32,768)到2^15(32,767)的整型数字
| tinyint
| 从0到255的整型数字
| money
| 从-2^63(-922,337,203,685,477.5808)到2^63-1(922,337,203,685,477.5807)的货币数据,最小货币单位千分之十
| smallmoney
| 从-214,748.3648到214,748.3647的货币数据,最小货币单位千分之十
| real
| 从-3.04E+38到3.04E+38可变精度的数字
| smalldatetime
| 从1900年1月1日到2079年6月6日的日期和时间数据,最小时间单位为分钟
| timestamp
| 时间戳,一个数据库宽度的唯一数字
| Uniqueidentifier
| 全球唯一标识符GUID
| text
| 变长非Unicode的字符型数据,最大长度为2^31-1(2G)
| nchar
| 定长Unicode的字符型数据,最大长度为8000
| ntext
| 变长Unicode的字符型数据,最大长度为2^31-1(2G)
| binary
| 定长二进制数据,最大长度为8000
| varbinary
| 变长二进制数据,最大长度为8000
| image
| 变长二进制数据,最大长度为2^31-1(2G)
| 【默认值】,一般时间是当前时间(getdate())
【UI可见】(界面上能不能看到),【UI非空】(字段名不能为空)
【链接常量】【常量值】自动注册生成,当该字段为枚举类型就需要有常量值。
【录入方式】用户手工录入,程序录入,程序回写,参照自动写入......
【资源】对字段名进行解释
【编码规则】字段名后有【编码规则】编号时,录入方式一定是程序写入,【编码规则】是对字段进行要求系统自动生成一个新的是生成几位年几位月的新的编号。
【自定义外键】主外键关系
【往来字段】
【DB外键】
【是否冗余字段】当该字段有【冗余依赖字段】就需要在【是否冗余字段】里打钩
【是否重载】当保存时字段报错,就需要在相对应的字段后面把【是否重载】给勾选上
索引
常规索引:IX_表名_字段名 IX__fiAmountDtl_iHdrId
主键索引:PK_表名 PK__fiAmountHdr
唯一索引:UQ_表名_字段名 UQ__fiAmountHdr_sBillNo
主键索引和唯一索引的字段值都是唯一的
约束:
要约束的名称和文本
校验:
1. 表的所属组织=产品组织2. 系统表必须是物理表,而且不能有项目分支3. 系统表不能有项目分支字段4. 校验单据类型是否有效5. 基表一定要设置分组字段
6. 表被多个过程insert,应该添加表类型7. 字段名不能重复8. Decimal字段要设置整数精度和小数精度9. 业务字段表必须填写录入方式10. 表变量类型,不能有iIden字段(模板会自动生成)
11. 表变量类型,不能有计算字段12. 表变量类型,不需要有回写字段13. 表变量类型,不需要冗余字段14. 表类型中的字段,原表必须有15.单据头表要添加时间戳字段
16. 非计算字段NVARCHAR(1000)以上的,建议NVARCHAR(MAX)17. 字段资源要写入18. 业务表的sBillNo必须指定录入方式19. sBillNo如果是程序写入,必须指定单据编号公式ID
20. 公式中不允许有dbo.函数的调用21. 字段单号编码规则ID,是否存在22. 字段单号编码规则,是否合法23. tinyint类型,一定要有常量ID24. 检验字段前缀与类型,是否匹配25. 判断冗余字段是否存在
26. 冗余字段必须要指定往来字段27. i*ID命名的INT字段,要有外键28. DB外键与自定义外键,只允许有一个值29. iHdrid的自定义外键不能指向自己30. 校验外键的表字段是否存在
31. 计算字段的公式,要非空(_基表除外)32. 表的分组字段,必须存在33. 表的分组字段,必须存在,而且是计算字段34. 有设置公式的,则必须是计算字段
35. 有设置数字公式,则必须设置常量值iConstValue(Hdr.iBillTableld=0的除外)36. 字段设置了常量值,则录入方式,必须定义为3,常量37. 字段设置常量值,则必须是计算字段,且公式=常量值,基表除外
38. iBillTypeId字段必须设置常量值,且必须=表的单据ID39. iBillTableId字段,必须设置常量值40. 单据内当前产品中是否有表的BillTableid重复
41. Char,varchar应设置为nchar,nvarchar(标准库设置为char的除外)42. 校验字段的长度类型,是否匹配43. 录入方式为程序回写的,必须备注或需求中说明在哪里回写,如何回写的
44. 字段链接常量的ID是否存在45. 字段链接的常量ID是否合法(产品树中存在且可用)46. 有默认值的,可以设置为非空47. 判断字段和标准库配置是否相同
48. 计算字段有约束的,必须要设置持久化49. 计算字段不能设置默认值50. 表字段有外键,应设置为非空51. 查找父表的ID,判断父表是否存在
52. 查找父表属性,判断iIdenGroup与父表的iIdenGroup是否相同,不同要报错的53. 父表里字段设置为废弃的,则子表里就不应该存在54. 校验父类字段是不是都是已经添加
55. 子表字段和父表的类型所有都一样56. 父表字段链接了常量,则子表链接的常量=父表链接常量57. 父类设置了常量字段,则子表常量值应该=父类的常量的值(iBillTableId除外)
58. 父表字段设定了单据公式id,则子表的单据公式=父表59. 父表字段非空,则子表必须非空60. 父表字段设置了默认值,则子表默认值应=父表默认值
61. 父表字段设置了录入方式,则子表录入方式要和父表一样62. bool类型的字段,录入方式应为763. ibillTableid字段的常量值=父表的分区字段,常量*10+父表的常量值,父表分组字段中包含ibillTypeid的除外64. iBillTableId是单据的区分点,如果按照iBilltype分组,iBillTableId不需要以上的原则65. 父表字段设置了计算公式的,则子表录入公式=父表公式66. 父表字段设置了新增/更新默认值的,则子表=父表
67. 非空无默认值的,UI非空应该=true68. 有2个及以上的冗余字段的INT型字段,UI不可见(如iMaterialid,sMaterialNo,sMaterName中iMaterlIdUI不可见)
69. 有冗余字段,且源字段链接了常量,冗余字段UI不可见(如iStatus,sStatus,则sStatus字段UI不可见)70. 冗余字段分组共2个字段且类型不同的,只能有一个UI可见(iUnitid,sUnit)
71. 校验往来字段的类型,长度,精度,非空是否一致72. 检验表是否设置了主键73. 校验表外键是否有索引74. 父表的索引是否已经添加(父表是物理表的除外,可选字段索引除外)
75. 父表的约束是否添加76. 检测索引的字段是否存在77. 检测缺少的外键(UML中有外键,二DB中没有的)78. 检测的那个表有FileStream列时候,是否有RowGuidcol列
参数:
【隐藏动态工具栏按钮】:按控件名称匹配,从FormConfig70项中排除控件
取消审核,审核,添加字段,生成Trigger文件,复制到产品,剪切到产品,注册为主档,注册为单据,跳转到单据公式,跳转到单据类型,跳转到常量,跳转到DB脚本,注册表类型,生成表类型脚本
参照说明:
【级联】;是85常量值,分为级联删除、级联更新、忽略约束 【录入方式】229常量,分为1.用户手工录入、2.程序写入、3.固定常量、4.外部导入、5.程序回写、6.计算字段、7.程序/用户录入、8.参照自动写入、9.用户参照录入 【状态】1113常量,分为0.新建、1.提交、2.审核、3.开发完成、4.测试通过、9.无、99.废弃 【单据类型】从系统单据类型,根据产品的所有父产品进行筛选 【插入默认值】union all一起的数据包括 'getdate()'、 '#XX'、':iUserId'、 ':sUserNo'、':sUserName'、 ':iCompanyId' 【父表名】从表定义(存储表属性及说明),根据产品的所有父产品进行筛选 【所属项目】从项目表(dvProject)根据所属产品读取数据 UI显示与控制 【编辑】按钮,设置了权限功能,只有开通权限才可以对表里的数据进行编辑。 【添加字段】:个人需要在表里添加的字段需要在这里自己点击新增添加,经理审核后才可以通过。如下图 这里用到的action: EntitySet.ValidateEmpty(mainEntitySet);
Entity.Retrive(outParam,42231,mainEntitySet);#执行 SQL,结果合并到 Entity 中,在sql里在原表名的前面加#的临时表,SELECT sTableName='#'+@sTableName1,iProductId=@iProductId1,iTableType=CASE WHEN@sTableNameFirst='#' THEN 1 ELSE 0 END
IF(:f[outParam.iTableType]=0);#确保表的类型是物理表 Invoke(AddNew);#调用新增的action Entity.SetFieldValue(mainEntitySet,sTableName,:f[outParam.sTableName]);#表名的值传过来 Entity.SetFieldValue(mainEntitySet,iProductId,:f[outParam.iProductId]);#所属产品传过来 Entity.SetFieldValue(mainEntitySet,iTaskStatus,0);#表的状态为草稿
RefreshControl(btnAddColumn,false);#刷新添加字段按钮
约束: |