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
设置它需要更多工作,但是一旦您准备好宏,添加更多值就会变得非常非常容易。随意修改宏以满足您的需要。不过,这应该足以让您入门。
我们使用的软件 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
设置它需要更多工作,但是一旦您准备好宏,添加更多值就会变得非常非常容易。随意修改宏以满足您的需要。不过,这应该足以让您入门。