我是 PowerApps 新手,我需要帮助来简化代码。如果有人可以提供帮助,我将不胜感激,并提前致谢。我现在的代码在嵌套 if 下工作,但它太长了。所以我需要一个替代解决方案。 简而言之,我有 3 个组合框,并且根据从该组合框中选择的值,我将启动一个过滤结果 URL,该 URL 将打开包含过滤结果的共享点列表。所以现在我想添加更多的条件,那么可能的组合数量也会增加,因此嵌套的 if 会太长。我现在的代码是:
Launch(
"example.com" & If(
IsBlank(box1.Selected.DisplayName) && IsBlank(box2.Selected.DisplayName) && IsBlank(box3.Selected.DisplayName),
"",
If(
!IsBlank(box1.Selected.DisplayName) && IsBlank(box2.Selected.DisplayName) && IsBlank(box3.Selected.DisplayName),
"&FilterField1=A1&FilterValue1=" & EncodeUrl(box1.Selected.DisplayName),
If(
IsBlank(box1.Selected.DisplayName) && !IsBlank(box2.Selected.DisplayName) && IsBlank(box3.Selected.DisplayName),
"&FilterField1=A2&FilterValue1=" & EncodeUrl(box2.Selected.DisplayName),
If(
IsBlank(box1.Selected.DisplayName) && IsBlank(box2.Selected.DisplayName) && !IsBlank(box3.Selected.DisplayName),
"&FilterField1=A3&FilterValue1=" & EncodeUrl(box3.Selected.DisplayName),
If(
!IsBlank(box1.Selected.DisplayName) && !IsBlank(box2.Selected.DisplayName) && IsBlank(box3.Selected.DisplayName),
"&FilterField1=A1&FilterValue1=" & EncodeUrl(box1.Selected.DisplayName) & "&FilterField2=A2&FilterValue2=" & EncodeUrl(box2.Selected.DisplayName),
If(
!IsBlank(box1.Selected.DisplayName) && IsBlank(box2.Selected.DisplayName) && !IsBlank(box3.Selected.DisplayName),
"&FilterField1=A1&FilterValue1=" & EncodeUrl(box1.Selected.DisplayName) & "&FilterField2=A3&FilterValue2=" & EncodeUrl(box3.Selected.DisplayName),
If(
IsBlank(box1.Selected.DisplayName) && !IsBlank(box2.Selected.DisplayName) && !IsBlank(box3.Selected.DisplayName),
"&FilterField1=A2&FilterValue1=" & EncodeUrl(box2.Selected.DisplayName) & "&FilterField2=A3&FilterValue2=" & EncodeUrl(box3.Selected.DisplayName),
If(
!IsBlank(box1.Selected.DisplayName) && !IsBlank(box2.Selected.DisplayName) && !IsBlank(box3.Selected.DisplayName),
"&FilterField1=A1&FilterValue1=" & EncodeUrl(box1.Selected.DisplayName) & "&FilterField2=A2&FilterValue2=" & EncodeUrl(box2.Selected.DisplayName) & "&FilterField3=A3&FilterValue3=" & EncodeUrl(box3.Selected.DisplayName),
""
)
)
)
)
)
)
)
)
)
我不知道还能尝试什么,我尝试使用 Switch,但出现了一些错误。
在简化代码之前,你可以做一件小事让当前的代码看起来更干净一点:你不需要有多个嵌套的“If”语句,其中一个就足够了:
Launch(
"example.com" &
If(
IsBlank(box1.Selected.DisplayName) && IsBlank(box2.Selected.DisplayName) && IsBlank(box3.Selected.DisplayName),
"",
!IsBlank(box1.Selected.DisplayName) && IsBlank(box2.Selected.DisplayName) && IsBlank(box3.Selected.DisplayName),
"&FilterField1=A1&FilterValue1=" & EncodeUrl(box1.Selected.DisplayName),
IsBlank(box1.Selected.DisplayName) && !IsBlank(box2.Selected.DisplayName) && IsBlank(box3.Selected.DisplayName),
"&FilterField1=A2&FilterValue1=" & EncodeUrl(box2.Selected.DisplayName),
IsBlank(box1.Selected.DisplayName) && IsBlank(box2.Selected.DisplayName) && !IsBlank(box3.Selected.DisplayName),
"&FilterField1=A3&FilterValue1=" & EncodeUrl(box3.Selected.DisplayName),
!IsBlank(box1.Selected.DisplayName) && !IsBlank(box2.Selected.DisplayName) && IsBlank(box3.Selected.DisplayName),
"&FilterField1=A1&FilterValue1=" & EncodeUrl(box1.Selected.DisplayName) & "&FilterField2=A2&FilterValue2=" & EncodeUrl(box2.Selected.DisplayName),
!IsBlank(box1.Selected.DisplayName) && IsBlank(box2.Selected.DisplayName) && !IsBlank(box3.Selected.DisplayName),
"&FilterField1=A1&FilterValue1=" & EncodeUrl(box1.Selected.DisplayName) & "&FilterField2=A3&FilterValue2=" & EncodeUrl(box3.Selected.DisplayName),
IsBlank(box1.Selected.DisplayName) && !IsBlank(box2.Selected.DisplayName) && !IsBlank(box3.Selected.DisplayName),
"&FilterField1=A2&FilterValue1=" & EncodeUrl(box2.Selected.DisplayName) & "&FilterField2=A3&FilterValue2=" & EncodeUrl(box3.Selected.DisplayName),
!IsBlank(box1.Selected.DisplayName) && !IsBlank(box2.Selected.DisplayName) && !IsBlank(box3.Selected.DisplayName),
"&FilterField1=A1&FilterValue1=" & EncodeUrl(box1.Selected.DisplayName) & "&FilterField2=A2&FilterValue2=" & EncodeUrl(box2.Selected.DisplayName) & "&FilterField3=A3&FilterValue3=" & EncodeUrl(box3.Selected.DisplayName),
""
)
)
现在进行简化:如果选择了相应的框,您的逻辑需要通过“&”组合几个值。在这种情况下,您可以在过滤非空选项后使用 Concat 函数,类似于下面的表达式:
Launch(
"example.com" &
With(
{
valuesToFilter: Filter(
[
{ Field: "A1", Value: box1.Selected.DisplayName },
{ Field: "A2", Value: box2.Selected.DisplayName },
{ Field: "A3", Value: box3.Selected.DisplayName }
],
Not IsBlank(Value)
)
},
Concat(
Sequence(CountRows(valuesToFilter)),
$"&FilterField{Value}={Index(valuesToFilter, Value).Field}&{EncodeUrl(Index(valuesToFilter, Value).Value}"
)
)
)