Глобальная функция работает в режиме предварительного просмотра, но завершается сбоем при запуске кода

#anypoint-studio #dataweave #cloudhub #mulesoft

#anypoint-studio #dataweave #cloudhub #mulesoft

Вопрос:

У меня есть глобальная функция с именем ‘finalPrice’, которая определена в моем configuration.xml досье. Функция принимает значение — выполняет с ним какие-то действия — и возвращает конечное значение. Я ссылаюсь на функцию из DataWeave. Когда я нажимаю «предварительный просмотр», я вижу правильный вывод в окне предварительного просмотра. Однако, когда я запускаю его, я получаю сообщение об ошибке:


Сообщение: исключение при выполнении:

Нет переменной с именем ‘finalPrice’.


Я запустил код на своем локальном компьютере и в CloudHub, и я получаю тот же результат

XML-код:

 <configuration doc:name="Configuration">
        <expression-language>
            <global-functions>
                <!-- This function is called by the 'Validate and Transform' dataweave component in the 'main' flow-->
                def finalPrice(incoming_value) 
                {
                    import java.lang.String;
                    import java.math.RoundingMode;

                    // Do Stuff

                    return strFinalNumber;
                }
            </global-functions>
        </expression-language>
</configuration>
 

Код сохранения данных:

 //Refer to "finalPrice" Global Function in the main.xml configuration file
DB_FINL_PRCE: "field_missing" when payload01.DB_FINL_PRCE == "" otherwise finalPrice(payload01.DB_FINL_PRCE)
 

Любая помощь приветствуется

Ответ №1:

Это проблема с комментариями в глобальных функциях. Поэтому удалите или измените строку:

  <!-- This function is called by the 'Validate and Transform' dataweave component in the 'main' flow-->
 

и просто имейте:

 <configuration doc:name="Configuration">
            <expression-language>
                <global-functions>
                    def finalPrice(incoming_value) 
                    {
                        import java.lang.String;
                        import java.math.RoundingMode;

                        // Do Stuff

                        return strFinalNumber;
                    }
                </global-functions>
            </expression-language>
    </configuration>
 

Или измените свои комментарии на //

 <configuration doc:name="Configuration">
        <expression-language autoResolveVariables="true">
            <global-functions>
                //This function is called by the 'Validate and Transform' dataweave component in the 'main' flow
                def finalPrice(incoming_value) 
                {

                    // Do Stuff

                    return "somethingelse";
                }
            </global-functions>
        </expression-language>
</configuration>
 

Комментарии:

1. Большое вам спасибо