Groovy服务
要用Groovy(或者其他支持的脚本语言)而不是inline的XML Actions来实现服务,要做什么呢?尝试加像这样另一个服务定义到TutorialServices.xml文件(要测试变更效果,还需要改变FindTutorial.xml中的服务名):
<service verb="create" noun="TutorialGroovy" type="script"
location="component://tutorial/service/tutorial/createTutorial.groovy">
<in-parameters>
<auto-parameters entity-name="tutorial.Tutorial" include="all"/>
</in-parameters>
<out-parameters>
<auto-parameters entity-name="tutorial.Tutorial" include="pk" required="true"/>
</out-parameters>
</service>
注意 service.@type 属性被改为 script,还有一个 service.@location 属性指定脚本的位置。
因为我们把 service.@noun 属性改成了 "TutorialGroovy",它不是一个有效的实体名,我们必须在两个 auto-parameters 元素上指定 entity-name。换句话说,如果不指定 auto-parameters.@entity-name,框架默认会尝试 service.@location,这样在本例中将导致错误。
脚本可位于组件中的任意位置,我们指明了它的位置。方便起见,我们将其加入到了现有的 service/tutorial 目录。下面是脚本大概的内容:
def tutorial = ec.entity.makeValue("tutorial.Tutorial")
tutorial.setFields(context, true, null, null)
if (!tutorial.tutorialId) tutorial.setSequencedIdPrimary()
tutorial.create()
当使用Groovy或其他语言时,将使用Moqui Java API,它是基于 ExecutionContext 类的,在脚本中可用,变量名为"ec"。 关于API的更多细节请参考 API JavaDocs ,特别是 ExecutionContext 类的文档,有很多去其他主要API接口页面的链接。