我对为用户输入值提供一组验证规则感兴趣。
例如,一个名为' Today'的文本框。可能需要看起来像
的规则 IsADate() and (Value >= Date())
我的问题是没有人能告诉我需要什么规则。为了提供解决方案,我需要用户能够自己决定他们想要的规则。
我想到我可以为每个输入创建一个包含单独字段的数据库表 - 每个字段都有一个用户可定义的检查约束和数据类型,但这太限制了(根据我可以定义的规则数量)
我可以允许用户使用一个UI,它可以有效地允许他们提供一个where
子句,然后执行select count(*) from dual where <plugin logic>
然后我开始认为我只是痴迷于数据库。
有什么想法吗?
答案 0 :(得分:3)
我使用应用程序代码和业务逻辑做了类似的事情。如果您根据可以加载和评估各种视图或表单的一些常见业务对象创建令牌解析器,那么您可以开始创建自定义变量的集合。
@Date.CurrentDate
@Date.LastQuarter
@Customer.LastInvoiceNumber
@Customer.ZipCode
@Customer.MaxNumberOfOrderItems
如果您在特定字段的规则列表中公开您的令牌,您可以构建一个自定义组件,让用户构建类似的表达式。
Value [ Greater Than ] [ @Customer.LastOrderNumber ] [ AND ]
Value [ Starts With ] [ @Customer.CustomerID ]
在我看来,这比使用sql进行验证更灵活。
答案 1 :(得分:3)
如果用户的Delphi / Pascal语法知识有限,快速解决方案是让他们创建验证作为pascal函数,并使用 JCL库<的TJvInterpreter
/强>
易于使用,易于实施,这是一个很好的解决方法!