Web 下拉列表的 Boo 语言计算

Boo Language Calculation on Web Drop Down List

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

我在表单上有一个下拉列表,其中有两个选项之一。 "Acute" 和 "Ambulatory"。根据选择的内容,两个可能的字段之一将不再隐藏,并将设置为必填。我已经设法让它工作了,但我担心如果未来表单上的选项数量增加,代码会变得有点冗长。你们中的任何人对替代方案有什么建议吗?谢谢,

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)   

一些提示:

似乎对于这两对,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

设置它需要更多工作,但是一旦您准备好宏,添加更多值就会变得非常非常容易。随意修改宏以满足您的需要。不过,这应该足以让您入门。