2016-02-22 3 views
2

У меня есть общая функция, которая будет использоваться несколькими преобразованиями в виде данных, поэтому я хочу написать это как глобальную функцию MEL.Язык выражения мула и глобальные функции для фильтрации записей

Я настроил мой глобальные функции файл -

<configuration doc:name="Configuration"> 
     <expression-language> 
      <import class="org.apache.commons.lang3.StringUtils"></import> 
      <global-functions file="global_expressions.mvel"> 
      </global-functions> 
     </expression-language> 
    </configuration> 

то у меня есть global_expressions.mvel файл, в котором я хочу такую ​​функцию -

def filterE1Records(route,type){ 
        if(type == 'COR'){ 
         return (route >= '${min.route}' and route <= '${max.route}'); 
        } else if(type == 'NONCOR'){ 
         return ((route >= '${min.route}' and route <= '${max.route}') == false and route != '${ndsin.route}'); 
        } else if(type == 'NDS'){ 
         return route == '${ndsin.route}'; 
        } else { 
         return false; 
        } 

       } 

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

def filterE1Records(route,type){ 
        if(type == 'COR'){ 
         return (route >= 10000 and route <= 15000); 
        } else if(type == 'NONCOR'){ 
         return ((route >= 10000 and route <= 15000) == false and route != 15001); 
        } else if(type == 'NDS'){ 
         return route == 15001; 
        } else { 
         return false; 
        } 

       } 

Если я удалю, что апостроф 'вокруг собственности, чтобы сделать его номер, а затем DW код не во время выполнения.

Любая идея, как сделать это сравнение работать?

Спасибо.

+1

С вашего вопроса неясно, связана ли ваша проблема с тем, что заполнители не были разрешены или что тесты фактов работают только со сравнением строк. Вы говорите, что использование 'code> = 10000' работает, но когда вы удаляете' '', это не так, что звучит противоречиво. Вы уверены, что заполнители разрешены в 'global_expressions.mvel'? –

+0

Спасибо, что посмотрели @DavidDossot. Есть ли способ узнать, разрешают ли заполнители свойства в файле global_expressions.mvel? Я уверен и проверен, если я помещаю местозаполнитель в dataweave прямо как p ('min.route'), тогда он правильно решает, что означает, что свойства настроены правильно. Я не думаю, что могу отлаживать файл выражения. Я имею в виду 'route> = 10000', но' route> = '$ {min.route}' 'не работает для тех же входных записей. –

+0

Я не понимаю, почему вы цитируете местозаполнитель? Предполагая, что это разрешено, вы хотите использовать 'route> = $ {min.route}', иначе вы будете выполнять сравнение строк, а не число. –

ответ

0

Основываясь на обсуждении в комментариях, я собираюсь предположить, что разрешение собственности не работает в импортированных файлах MEL.

Вы можете загрузить эти различные либо свойства в компоненте с помощью Spring сеттер инъекции, или в java.util.Properties объекта с помощью утилиты Spring, а затем искать их с:

app.registry.myConfigBean.minRoute 

или:

app.registry.myConfigProperties['min.route'] 
+0

Извините, я ошибся, кажется, что свойства не загружаются в 'global_expressions.mvel', даже несмотря на то, что они доступны надлежащим образом в передаче данных и остальном мула. Теперь я изменил определение функции для 'четкости filterE1Records (маршрут, тип, Cmin, Cmax, ndsin)' и от dataweave я называю функцию как 'полезной нагрузки фильтра (filterE1Records ($ ROUTE как. Число, \t \t \t \t \t \t flowVars .RecordType, \t \t \t \t \t \t p ('мин.маршрут '), \t \t \t \t \t \t р (' max.route '), \t \t \t \t \t \t р (' ndsin.route ') ) '. –

 Смежные вопросы

  • Нет связанных вопросов^_^