forum.bitel.ru
http://forum.bitel.ru/

Проверка условия по значению параметра типа list (CRM)
http://forum.bitel.ru/viewtopic.php?f=49&t=11290
Страница 1 из 1

Автор:  zavndw [ 28 янв 2016, 15:47 ]
Заголовок сообщения:  Проверка условия по значению параметра типа list

Надо сделать проверку условия по значению параметра процесса типа list.
Используемая схема: При создании процесса используется мастер в котором заполняется 2 параметра типа list, мне надо при создании проверять введенный id подходит он под условие обработки или нет.
В доке есть
Код:
processParam
параметры изменяющегося процесса и
Код:
listValueIds
но у меня 2 параметра, как выставить условие на id нужно параметра?

Автор:  Администратор [ 29 янв 2016, 01:41 ]
Заголовок сообщения:  Re: Проверка условия по значению параметра типа list

Что-то вроде должно сработать:
Код:
<з> =~ processParam.listValueIds(<код первого параметра>) or <з1> =~ processParam.listValueIds(<код второго параметра>)

з1 и з2 - числа которые входят в значения первого параметра или второго.
Точнее не могу сказать, т.к. условие проверки до конца не понял.

Автор:  zavndw [ 29 янв 2016, 06:37 ]
Заголовок сообщения:  Re: Проверка условия по значению параметра типа list

У меня в процессе используется 2 параметра типа list с кодами 42,65. Условие надо для id 42 только.
У id 42 значение 1,2,3,4,5,6, в условие должны попасть значения 1,2,3 параметра id 42.
Попробовал в условие все попадает. В конфиге типа процесса
Код:
onProcessEvent.1.doExpression
но в доке только ifExpression, а как do работает?

Автор:  Администратор [ 30 янв 2016, 02:15 ]
Заголовок сообщения:  Re: Проверка условия по значению параметра типа list

Вам нужен ifExpression, doExpression ещё не документирован. Суть его понятна из названия - модификация процесса, то же что commands, но более универсально, с использованием JEXL.
В вашем случае должно сработать следующее выражение:
Код:
.ifExpression=cu.intersection(processParam.listValueIds(42), [1,2,3]).size() > 0


Ссылки:
http://docs.bitel.ru/pages/viewpage.act ... D0%B8-JEXL
https://commons.apache.org/proper/commo ... Utils.html

Автор:  zavndw [ 06 фев 2016, 18:31 ]
Заголовок сообщения:  Re: Проверка условия по значению параметра типа list

Получилось вот так
Код:
onProcessEvent.1.events=createFinished
onProcessEvent.1.ifExpression=cu.intersection(processParam.listValueIds(26), [1,2,3]).size() > 0
onProcessEvent.1.doExpression=<<END
phone=processParam.getParamPhoneNoFormat(20);
if(phone) {
mtsc.sendSms(phone, "Заявка №".concat( process.getId().toString() ).concat( " принята" ));
}
END

Получаю ошибку
Код:
02-06/22:30:38 ERROR [http-bio-9088-exec-280] ProcessAction - ru.bgcrm.dao.expression.Expression.check@109![3,59]: 'cu.intersection(processParam.listValueIds(26), [ 1, 2, 3 ]).size() > 0;' unknown, ambiguous or inaccessible method intersection
org.apache.commons.jexl2.JexlException$Method: ru.bgcrm.dao.expression.Expression.check@109![3,59]: 'cu.intersection(processParam.listValueIds(26), [ 1, 2, 3 ]).size() > 0;' unknown, ambiguous or inaccessible method intersection
        at org.apache.commons.jexl2.Interpreter.call(Interpreter.java:1062)
        at org.apache.commons.jexl2.Interpreter.visit(Interpreter.java:1100)
        at org.apache.commons.jexl2.parser.ASTMethodNode.jjtAccept(ASTMethodNode.java:18)
        at org.apache.commons.jexl2.Interpreter.visit(Interpreter.java:1317)
        at org.apache.commons.jexl2.parser.ASTReference.jjtAccept(ASTReference.java:18)
        at org.apache.commons.jexl2.Interpreter.visit(Interpreter.java:793)
        at org.apache.commons.jexl2.parser.ASTGTNode.jjtAccept(ASTGTNode.java:18)
        at org.apache.commons.jexl2.Interpreter.interpret(Interpreter.java:232)
        at org.apache.commons.jexl2.ExpressionImpl.evaluate(ExpressionImpl.java:65)
        at ru.bgcrm.dao.expression.Expression.check(Expression.java:109)
        at ru.bgcrm.event.listener.DefaultProcessChangeListener$ConfigRule.processEvent(DefaultProcessChangeListener.java:376)
        at ru.bgcrm.event.listener.DefaultProcessChangeListener.processEvent(DefaultProcessChangeListener.java:191)
        at ru.bgcrm.event.listener.DefaultProcessChangeListener.access$1(DefaultProcessChangeListener.java:176)
        at ru.bgcrm.event.listener.DefaultProcessChangeListener$2.notify(DefaultProcessChangeListener.java:71)
        at ru.bgcrm.event.listener.DefaultProcessChangeListener$2.notify(DefaultProcessChangeListener.java:1)
        at ru.bgcrm.event.EventProcessor.processingEvent(EventProcessor.java:205)
        at ru.bgcrm.event.EventProcessor.processEvent(EventProcessor.java:140)
        at ru.bgcrm.event.EventProcessor.processEvent(EventProcessor.java:286)
        at ru.bgcrm.struts.action.ProcessAction.processFinishCreateTmp(ProcessAction.java:837)
        at sun.reflect.GeneratedMethodAccessor487.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at ru.bgcrm.struts.action.BaseAction$InvokerCon.invoke(BaseAction.java:535)
        at ru.bgcrm.struts.action.BaseAction.dispatchMethod(BaseAction.java:240)
        at org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:170)
        at org.apache.struts.chain.commands.servlet.ExecuteAction.execute(ExecuteAction.java:58)
        at org.apache.struts.chain.commands.AbstractExecuteAction.execute(AbstractExecuteAction.java:67)
        at org.apache.struts.chain.commands.ActionCommandBase.execute(ActionCommandBase.java:51)
        at org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:191)
        at org.apache.commons.chain.generic.LookupCommand.execute(LookupCommand.java:305)
        at org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:191)
        at org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:283)
        at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)
        at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:462)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
        at ru.bgcrm.servlet.filter.SetRequestParamsFilter.doFilter(SetRequestParamsFilter.java:43)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
        at ru.bgcrm.servlet.filter.AuthFilter.doFilter(AuthFilter.java:150)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
        at ru.bgcrm.servlet.filter.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:38)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
        at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:928)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
        at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:987)
        at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:539)
        at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:300)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at java.lang.Thread.run(Thread.java:745)

Автор:  Администратор [ 10 фев 2016, 02:18 ]
Заголовок сообщения:  Re: Проверка условия по значению параметра типа list (CRM)

Поправка. Должно работать в приведённом ниже виде, но требуется обновить систему.
Пришлось перейти на новую версию библиотеки JEXL.
Код:
onProcessEvent.1.events=createFinished
onProcessEvent.1.ifExpression=cu.intersection(processParam.listValueIds(26), {1,2,3}).size() > 0
onProcessEvent.1.doExpression=<<END
phone=processParam.getParamPhoneNoFormat(20);
if(phone) {
mtsc.sendSms(phone, "Заявка №".concat( process.getId().toString() ).concat( " принята" ));
}
END

Автор:  zavndw [ 10 фев 2016, 14:40 ]
Заголовок сообщения:  Re: Проверка условия по значению параметра типа list (CRM)

Обновился и работает. Спасибо!

Страница 1 из 1 Часовой пояс: UTC + 5 часов [ Летнее время ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/