MS PowerApps, если после Switch в powerapps, значит выполняется самостоятельно (после Switch, а не внутри)

У меня проблема с функцией PowerApps, которую я не могу решить самостоятельно. Ниже вы можете найти код, который работает (хотя я предполагаю, что он плохо оптимизирован). Как и в теме, условие if выполняется внутри переключателя, как один из его аргументов, а не выполняется ПОСЛЕ переключателя. Конечным результатом должно быть: пользователь нажимает кнопку, которая применяет фильтр к таблице, и после этого, если условие вступает в игру, и выполняет свою работу.

Основная часть - это условие, когда пользователь выбирает критерии в раскрывающемся меню, условие сортирует таблицу по имени или рейтингу. Внутри этого условия есть функции для поддержки поисковой системы и кнопки сортировки по возрастанию/убыванию. После этого я хотел добавить поддержку кнопок фильтра, и сами кнопки работают нормально, но условие if выполняется только при нажатии последней кнопки (поэтому, когда, например, я нажимаю кнопку, связанную с этим, она устанавливает категорию на «1» и переходит к следующему экрану, но поиск/сортировка не работает). Я попытался разделить условия большим количеством скобок, добавив «;;» в конце переключателя, но это не решило проблему (дополнительно сломало приложение).

Switch(
    category;
    1;
    Filter(
        Table1_2;
        '4. Area of training' = "IT-related"
    );
    //here is a bunch of filters for categories from 2 to 4
    5; //no filter as it should display table without any filter
If( //the problematic if, that is executed only when category is "5"
        dropdown_sort.Selected.Value = "Name of the training"; //check what the value of dropdown is, and the execute positive or negative case
        SortByColumns(
            Search(
                Table1_2;
                search_engine.Text; //takes text input and searches inside column below
                "3_x002e__x0020_Name_x0020_of_x0020_the_x0020_training"
            );
            "3_x002e__x0020_Name_x0020_of_x0020_the_x0020_training"; //sorting on this column
            If( //to change ascendin/descending on button press
                sort;
                Ascending;
                Descending
            )
        );
        //here is second part of if, that is basically identical to above (it sorts different column), and executes case when selected value of dropdown is different that "Name..."
    )
)

Я хотел бы, чтобы выполнить независимо от переключателя. Кроме того, если есть способ сделать это лучше, пожалуйста, напишите свои предложения. Спасибо.


person JachimRRX    schedule 30.06.2019    source источник
comment
Большинство моих наблюдений вам уже известно, но все же позвольте мне их изложить. В вашем текущем коде для случая переключения оператор If явно находится внутри вашего переключателя, а также для категории = 5 и, следовательно, он срабатывает только для категории для 5. То, чего вы пытаетесь достичь здесь, называется операцией цепочки. Как вы уже пытались ;;и это не помогло, как насчет просто попробовать ; Также взгляните на эту ссылку, она даст вам больше информации, дайте мне знать, если это поможет. powerusers.microsoft.com/t5/General-Discussion/   -  person AnkUser    schedule 01.07.2019
comment
Я немного переделал код, чтобы он соответствовал моим требованиям, и мне удалось заставить его работать (к сожалению, глупым способом). Я попробую ваше предложение в будущем.   -  person JachimRRX    schedule 02.07.2019


Ответы (2)


Возможно, это не окончательный ответ, но, основываясь на том, что я прочитал, я попробую что-то вроде ниже.

if( category=1;
    Filter(
        Table1_2;
        '4. Area of training' = "IT-related"
    );;If( //the problematic if, that is executed only when category is "5"
        dropdown_sort.Selected.Value = "Name of the training"; //check what the value of dropdown is, and the execute positive or negative case
        SortByColumns(
            Search(
                Table1_2;
                search_engine.Text; //takes text input and searches inside column below
                "3_x002e__x0020_Name_x0020_of_x0020_the_x0020_training"
            );
            "3_x002e__x0020_Name_x0020_of_x0020_the_x0020_training"; //sorting on this column
            If( //to change ascendin/descending on button press
                sort;
                Ascending;
                Descending
            )
        );
        //here is second part of if, that is basically identical to above (it sorts different column), and executes case when selected value of dropdown is different that "Name..."
    )
    category=2;
    Filter(
        Table1_2;
        '4. Area of training' = "IT-related"
    );;If( //the problematic if, that is executed only when category is "5"
        dropdown_sort.Selected.Value = "Name of the training"; //check what the value of dropdown is, and the execute positive or negative case
        SortByColumns(
            Search(
                Table1_2;
                search_engine.Text; //takes text input and searches inside column below
                "3_x002e__x0020_Name_x0020_of_x0020_the_x0020_training"
            );
            "3_x002e__x0020_Name_x0020_of_x0020_the_x0020_training"; //sorting on this column
            If( //to change ascendin/descending on button press
                sort;
                Ascending;
                Descending
            )
        );
        //here is second part of if, that is basically identical to above (it sorts different column), and executes case when selected value of dropdown is different that "Name..."
    )
    //here is a bunch of filters for categories from 2 to 4
    category=5;  

)
person AnkUser    schedule 01.07.2019

Тем временем мне удалось решить это самостоятельно, аналогично тому, что вы предложили. Код идентичен для ложного значения и других категорий. В любом случае, спасибо за вашу помощь.

Switch(
    category;
    1;
    If(
        dropdown_sort.Selected.Value = "Name of the training";
        SortByColumns(
            Search(
                Filter(
                    Table1_2;
                    '4. Area of training' = "IT-related"
                );
                search_engine.Text;
                "3_x002e__x0020_Name_x0020_of_x0020_the_x0020_training"
            );
            "3_x002e__x0020_Name_x0020_of_x0020_the_x0020_training";
            If(
                sort;
                Ascending;
                Descending
            )
        );

person JachimRRX    schedule 02.07.2019