Web下拉列表中的Boo语言计算

时间:2015-06-03 22:21:17

标签: if-statement conditional boo

我们使用的软件 LanDesk Service Desk 使用Boo语言计算来允许动态窗口。

我在表单上有一个下拉列表,其中包含两个选项之一。 “急性”和“动态”。根据选择的内容,将不再隐藏两个可能字段中的一个,并将其设置为强制字段。我已经设法让这个工作,但我担心如果选项的数量在未来的表格上增长,代码将变得有点罗嗦。你们有没有任何关于替代品的建议。谢谢,

import System

static def GetAttributeValue(Request):
    isAcuteHidden = true
    isAcuteMandatory = false
    isAmbulatoryHidden = true
    isAmbulatoryMandatory = false


    if Request._PharmacyType != null and Request._PharmacyType._Name == "Acute":
        isAcuteHidden = false
        isAcuteMandatory = true

    elif Request._PharmacyType != null and Request._PharmacyType._Name == "Ambulatory":
        isAmbulatoryHidden = false
        isAmbulatoryMandatory = true

    return String.Format(":SetHidden(_AcutePharmacy, {0});:SetMandatory(_AcutePharmacy, {1});:SetHidden(_AmbulatoryPharmacy, {2});:SetMandatory(_AmbulatoryPharmacy, {3});", isAcuteHidden, isAcuteMandatory,  isAmbulatoryHidden, isAmbulatoryMandatory)   

1 个答案:

答案 0 :(得分:0)

一些指示:

对于这两对,is?????Hidden和相应的is?????Mandatory似乎总是相反的值。如果是这样,您不需要两个单独的布尔变量来跟踪它们。

如果你最终会得到很多看起来像这个的块,那么在Boo中处理它的正确方法是使用宏,如下所示:

macro HiddenOrRequiredValues:
   ControlStrings = List[of String]()
   ArgVarNames = List[of ReferenceExpression]()
   counter = 0
   for arg as ReferenceExpression in HiddenOrRequiredValues.Arguments:
      argVariable = ReferenceExpression("is$(arg)Hidden")
      yield [|$argVariable = true|]
      yield [|
         if Request._PharmacyType != null and Request._PharmacyType._Name == $(arg.ToString()):
        $argVariable = false
      |]
      ControlStrings.Add(":SetHidden(_$(arg)Pharmacy, {$(counter)});:$(arg)Mandatory(_AcutePharmacy, {$(counter + 1)})")
      ArgVarNames.Add(argVariable)
      counter += 2
   resultString = join(ControlStrings, '')
   resultCmd as MethodInvocationExpression = [|String.Format($resultString)|]
   for varName in ArgVarNames:
      resultCmd.Arguments.Add([|$varName|])
      resultCmd.Arguments.Add([|not $varName|])
   yield [|return $resultCmd|]

然后整个方法变为:

static def GetAttributeValue(Request):
    HiddenOrRequiredValues Acute, Ambulatory

设置它还需要做更多的工作,但是一旦你有了宏,添加更多的值会变得更容易。随意修改宏以满足您的需求。不过,这应该足以让你入门。