对IF语句条件使用String

时间:2015-07-09 08:27:44

标签: vb.net erp

我希望有人可以帮助回答我的问题,也许是想知道去哪里,或者我想做的事情是不可能做到的。

我已经被要求根据我们的ERP表单组件或变量所持有的数据编写一组规则

不幸的是,这些组件和变量无法在ERP之外访问或使用,因此我无法使用SQL查询值,然后构建某种SQL } query。

他们喜欢这样的陈述的能力:

C(MyComponentName) = C(MyOtherComponentName)
V(MyVariableName) > 16
(C(MyComponentName) = "") AND V(MyVariableName) <> "")
((C(MyComponentName) = "") OR C(MyOtherComponentName) = "") AND V(MyVariableName) <> "")

这应该变成某种查询,它获取MyComponentNameMyOtherComponentName的值,并且(在这种情况下)比较它们的相等性。

他们不一定只想比较相等,而是能够确定component / variable值是否大于等等。

基本上它是一个自由格式的语句,可以转换成类似于IF语句的内容。

我试过这个:

Sub TestCondition()
  Dim Condition as string = String.Format("{0} = {1}", _
             Component("MyComponent").Value, Component("MyOtherComponent").Value)

  If (Condition) Then
      ' Do Something
  Else
      ' Do Something Else
  End If
End Sub

显然,这不起作用,老实说,我认为这不会那么简单。

忽略我必须解析该行的事实,提取​​所需的运算符,组件或变量的值(用C或V表示) - 我该怎么做?

我看过表情树,但这些令人困惑,特别是因为我从未听说过它们,更不用说使用它们了。 (Is it possible to create an expression tree for dynamic if statements? - 此链接提供了有关C#)

中表达式树的一些详细信息

我知道解决这个问题的一种更简单的方法可能是简单地使用多个下拉列表填充表单,以便用户从列表中选择他们想要的内容或填写特定搜索条件的文本框。

这不是一件简单的事情,因为ERP不允许您在其表单上动态创建控件。您必须手动拖动每个组件并且旁边没用,因为我们可能希望每个表单(100 +)至少有1 rule

我要么找人说你不能按照你想要的方式做到这一点(有合适的​​理由或建议如何做到这一点)我能做到带上我的经理或一些提示,也许是一个链接或2指向我正确的方向。

2 个答案:

答案 0 :(得分:0)

如果(条件)那么 这是不可能的。无法将存储在字符串中的数据视为代码。虽然上述陈述是有效的,但它不会也不会以您希望的方式运行。相反,Condition将被评估为它是什么:一个字符串。 (任何不能归结为0的东西都被视为True;请参阅此问题。) 您尝试边界允许用户动态键入代码以获得结果。我不会说这在VB.Net中本身是不可能的,但它非常雄心勃勃。 相反,我建议清楚地定义您的应用程序可以做什么和不能做什么。枚举您的代码将允许的运算符并构建代码以直接支持每个运算符。例如: Public Function TestCondition(value1 As Object,value2 As Object,op as string)As Boolean     选择Case op         案例“=”             返回值1 = value2         案例“&lt;”             返回值1&lt;值2         案例“&gt;”             返回值1&gt;值2         Case Else             '错误处理     结束选择 结束功能 显然,您需要根据您将要处理的变量类型以及其他特定需求来定制上述内容,但这种方法应该为您提供可行的解决方案。

答案 1 :(得分:0)

对于我的特殊要求,使用NCalc库使我能够完成我想做的大部分工作。易于使用,文档非常广泛 - 很多例子。