Жидкий шаблон XML в Json перестал работать в Azure Logic Apps

После одного месяца успешного сопоставления наш шаблон дает разные результаты без каких-либо изменений в процессе. Фрагмент XML выглядит следующим образом:

  <Authorisation>
    <Application>
    </Application>
    <Role>Role on</Role>
    <Role>Role two</Role>
  </Authorisation>

и отображение:

        "roles":[
            {% JSONArrayFor userRole in authorisation where Role-%}
            {
            "role":"{{userRole}}"
            }
            {% endJSONArrayFor -%}
        ]

Приложение Logic раньше создавало правильную коллекцию json, но теперь она внезапно пуста.

Я вижу, что authorisation.Role производит только первый элемент Role one и autorisation.Role.size дает 11. For loop вместо JSONArray For read role one char by char. Все это означает, что отображение считывает только первый элемент роли - коллекции нет

Проблема только для простого типа Xml (просто элемент xml со строковым значением). Мы обрабатываем сложные типы таким же образом, и это по-прежнему нормально.

Что-то внутреннее в Azure LogicApps изменило процесс сопоставления в прошлом месяце?


person Paweł Stadnicki    schedule 16.07.2020    source источник
comment
Привет, пожалуйста, обратитесь к решению, которое я предоставил ниже. Если это поможет решить вашу проблему, примите его как ответ (нажмите галочку рядом с моим ответом, чтобы переключить его с серого на заполненный). Заранее спасибо ~   -  person Hury Shen    schedule 17.07.2020
comment
Привет, спасибо за ответ, но это не решение. У меня уже был аналогичный обходной путь в виде гораздо более простого преобразования Xml без преобразования json. В конечном итоге эта ошибка была решена командой LogicApp.   -  person Paweł Stadnicki    schedule 11.09.2020


Ответы (2)


Это была ошибка в MS и исправлена.

person Paweł Stadnicki    schedule 11.09.2020

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

1. Я инициализирую переменную с именем xmlString для хранения того же XML-файла, что и ваши XML-данные. введите описание изображения здесь

2. Затем я инициализирую другую переменную с именем jsonString и ввожу выражение в поле ее значения (для преобразования xml в json). введите описание изображения здесь

3. После этого проанализируйте jsonString с помощью Разобрать JSON действие < img src = "https://i.stack.imgur.com/co5kq.png" alt = "введите описание изображения здесь" />

4. Наконец, используйте Преобразуйте JSON в JSON, чтобы преобразовать jsonString в нужный формат. введите описание изображения здесь

Моя жидкая карта:

{% assign items = content.Authorisation.Role %}
{
    "roles": [
        {%- for item in items -%}
            {
                "role": "{{item}}"
            },
        {%- endfor -%}
    ]
}

5. Запустите приложение логики и получите результат, показанный ниже: < img src = "https://i.stack.imgur.com/w2Fx2.png" alt = "введите описание изображения здесь" />

person Hury Shen    schedule 17.07.2020
comment
Да где фильтр должен работать. У нас есть регрессионный тест на то же самое в нашей базе кода, выполняющий фильтр по сложному имени элемента xml. Наши инженеры выясняют, почему для этого конкретного использования, как указано здесь, оно в настоящее время не работает. - person David Burg; 21.07.2020
comment
Это нормально, когда вы отправляете два или более элементов в роли, но если вы отправляете только одну роль, то проблема заключается в том, что автоматическое преобразование в JSON объявит его как объект, а не массив, и ваш Parse JSON завершится ошибкой. В этом случае лучше всего использовать преобразование Liquid, потому что вы не можете знать, отправит ли кто-то одну или несколько ролей. - person Dino.F; 12.05.2021