对于某个单据上的关联选择其他单据的字段(例如:报价单模块单据头“客户名称”或者单据分录“产品名称”字段),如果可选数据范围有特殊的控制需求,即关联选择联动,目前可以在数据库表 ld_relatecreatecondition 中增加控制规则实现。
1. ld_relatecreatecondition 可补充“页面设置->审批要求->其他条件” 1) 页面设置中单据头“关联选择单据”字段,可以设置高级查询条件,但是一些复杂的应用还不能通过界面功能配置实现。 2) 单据分录中选择其他单据不能通过界面功能配置实现。
2. ld_relatecreatecondition 表结构说明 1) id:自动增长 2) modulename:被选模块 3) columnname:被选模块对应的查询字段 4) comparator:当 contenttype = 'sql' 时可以不用填写,表示被选模块按照查询字段(columnname)做查询时查询条件的比较关系 5) content:当 contenttype = 'sql' 时填写SQL语句,当 contenttype = 'db' 时填写查询字段(columnname)对应的查询内容 6) relatecreatemodule:当前模块,即针对哪个模块增加的规则 7) sequence:有多个规则时,规则的加载顺序 8) contenttype:规则的类型,sql/db。db类型适用于简单的字段比较,sql 类型适用于相对复杂的查询。
3. 业务场景一
应用需求:报价单选择客户,不允许选择“公海未分配”和“关闭”状态的客户(页面设置中选择关联单据字段的“审批要求 ->其他条件”不能按照“公海未分配”查询)
实现方法:在 ld_relatecreatecondition 表中增加控制规则,然后清除缓存、刷新页面即可。 1) modulename: Accounts (被选单据) 2) columnname:accountid 3) relatecreatemodule:Quotes (当前模块) 4) contenttype:sql 5) sequence:1 6) comparator:不需要填写 7) content:特殊控制查询SQL ld_account.publicaccount<>1 AND IFNULL(ld_account.rating,'')<>'关闭'
4. 业务场景二
应用需求:报价单如果选择了“客户名称”之后,在单据分录选择“产品名称”时,只能选择关联了该“客户”的产品(产品上增加了选择“客户”的字段)。 实现方法:在 ld_relatecreatecondition 表中增加控制规则,然后清除缓存、刷新页面即可。 1) modulename: Products (被选单据) 2) columnname:productid 3) relatecreatemodule:Quotes (当前模块) 4) contenttype:sql 5) sequence:1 6) comparator:不需要填写 7) content:特殊控制查询SQL (CASE WHEN '{$Quotes.accountid}'>0 THEN ld_products.accountid='{$Quotes.accountid}' ELSE 1=0 END)
说明:当前单据上的某个字段的取值方法:{ $模块名.字段列名}
|