PowerApps 中嵌套 If 的替代方案

问题描述 投票:0回答:1

我是 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,但出现了一些错误。

url sharepoint powerapps nested-if searchfiltercollection
1个回答
0
投票

在简化代码之前,你可以做一件小事让当前的代码看起来更干净一点:你不需要有多个嵌套的“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}"
        )
    )
)
© www.soinside.com 2019 - 2024. All rights reserved.