groovy - 在 Bonita 中使用 Groovy 时没有方法错误的签名
问题描述
我正在使用 Bonita 7.7.4。Groovy 脚本可以在 Bonita 中使用。我写了下面的脚本并且它有效,但是当“状态”字段不退出时,它有错误。
String status = apiAccessor.identityAPI.getCustomUserInfo(startedById, 0, 1000).stream().filter({ row ->
"status" == row.getDefinition().getName()
}).findFirst().orElse("").getValue();
错误:
Possible solutions: getClass(), getAt(int), getAt(groovy.lang.Range), getAt(java.lang.String), getAt(groovy.lang.Range), getAt(java.util.Collection) ( ). ( )
at org.bonitasoft.engine.execution.ProcessExecutorImpl.start(ProcessExecutorImpl.java:839)
at org.bonitasoft.engine.execution.ProcessExecutorImpl.start(ProcessExecutorImpl.java:782)
at org.bonitasoft.engine.api.impl.ProcessStarter.start(ProcessStarter.java:132)
at org.bonitasoft.engine.api.impl.ProcessStarter.start(ProcessStarter.java:103)
at ... 44 more. ( )
at Caused by: org.bonitasoft.engine.expression.exception.SExpressionEvaluationException.: groovy.lang.MissingMethodException: No signature of method: java.lang.String.getValue() is applicable for argument types: () values: []
Possible solutions: getClass(), getAt(int), getAt(groovy.lang.Range), getAt(java.lang.String), getAt(groovy.lang.Range), getAt(java.util.Collection) ( ). ( )
at org.bonitasoft.engine.expression.impl.GroovyScriptExpressionExecutorCacheStrategy.evaluate(GroovyScriptExpressionExecutorCacheStrategy.java:147)
at org.bonitasoft.engine.expression.impl.ExpressionServiceImpl.evaluate(ExpressionServiceImpl.java:86)
at org.bonitasoft.engine.core.expression.control.api.impl.ExpressionResolverServiceImpl.evaluateExpressionWithResolvedDependencies(ExpressionResolverServiceImpl.java:213)
at org.bonitasoft.engine.core.expression.control.api.impl.ExpressionResolverServiceImpl.evaluateExpressionsFlatten(ExpressionResolverServiceImpl.java:120)
at org.bonitasoft.engine.core.expression.control.api.impl.ExpressionResolverServiceImpl.evaluate(ExpressionResolverServiceImpl.java:83)
at org.bonitasoft.engine.execution.ProcessExecutorImpl.initializeSingleBusinessData(ProcessExecutorImpl.java:448)
at org.bonitasoft.engine.execution.ProcessExecutorImpl.initializeBusinessData(ProcessExecutorImpl.java:435)
at org.bonitasoft.engine.execution.ProcessExecutorImpl.initialize(ProcessExecutorImpl.java:387)
at org.bonitasoft.engine.execution.ProcessExecutorImpl.start(ProcessExecutorImpl.java:824)
at ... 47 more. ( )
at Caused by: groovy.lang.MissingMethodException.: No signature of method: java.lang.String.getValue() is applicable for argument types: () values: []
Possible solutions: getClass(), getAt(int), getAt(groovy.lang.Range), getAt(java.lang.String), getAt(groovy.lang.Range), getAt(java.util.Collection) ( ). ( )
at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:58)
at org.codehaus.groovy.runtime.callsite.PojoMetaClassSite.call(PojoMetaClassSite.java:49)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:117)
at BScript83.run(BScript83.groovy:47)
at org.bonitasoft.engine.expression.impl.GroovyScriptExpressionExecutorCacheStrategy.evaluate(GroovyScriptExpressionExecutorCacheStrategy.java:141)
at ... 55 more. ( )
解决方案
问题就在这里
.findFirst().orElse("").getValue();
改用这个
.findFirst().orElse("");
解释
findFirst()
在 a 上调用Stream<String>
,因此它返回 a Optional<String>
。如果流为空,则.orElse("")
确保将返回一个空字符串而不是流的第一个元素。显然,如果您宁愿null
在流为空时返回,请使用以下命令
.findFirst().orElse(null);
推荐阅读
- php - 为什么类名不回退到命名空间中的全局类名?
- r - 为什么不能在素食主义者中创造稀有曲线?
- c# - .NET Core Cronos Cron 表达式未正确解析
- python-3.x - 使用 Python 重命名批处理文件
- django - Django OperationalError 没有这样的表:
- docker - 如何为 Joomla 等多个容器使用相同的 MySQL 和相同的 PHPMyAdmin!和WordPress?
- node.js - 卡在单个请求中的 Nodejs HTTP 响应
- r - ggplot2:无效输入:使用 scale_x_datetime 时的 time_trans
- reactjs - ReactJS - 显示列名
- mule-studio - 在dataweave中转换日期时间格式