我们使用的软件 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)
答案 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
设置它还需要做更多的工作,但是一旦你有了宏,添加更多的值会变得更容易。随意修改宏以满足您的需求。不过,这应该足以让你入门。