从moqui中的ArrayList导出数据的正确方法是什么

时间:2015-03-06 13:55:53

标签: moqui

我正在尝试导出XML文件中的数据。我有几个实体,我在ArrayList中检索所有必要的数据。我可以利用这个ArrayList并通过在script标记中嵌入Java / groovy代码来导出数据。但我想知道有没有其他方法可以在Moqui中导出数据?

我只知道可以在writeXmlText中编写实体数据的XML方法。

编辑:这是我的示例服务

<service verb="get" noun="ExportData" type="script" location="component://PracticeTutorial/service/ExportTutorialServices/getExportData.groovy">        
    <out-parameters>
        <parameter name="employees" type="List">
            <parameter name="employee" type="Map">
                <parameter name="empId"/>
                <parameter name="firstName"/>
                <parameter name="lastName"/>
                <parameter name="designation"/>
            </parameter>
        </parameter>
    </out-parameters>
</service>

示例Groovy脚本:

import org.moqui.entity.EntityList
import org.moqui.entity.EntityValue

employees = []

EntityList employeeList = ec.entity.makeFind("tutorial.Employee").list()

for(EntityValue ev : employeeList) {
    employees.add([empId:ev.empId, firstName:ev.firstName, 
                              lastName:ev.lastName, designation:ev.designation])
}

我打电话给这样的服务:

<transition name="export">
    <actions>
        <service-call name="ExportTutorialServices.get#ExportData" in-map="context" out-map="context"/>
    </actions>
    <default-response url="."/>
</transition>

问题1:在调用服务后,如何从屏幕上访问employees ArrayList?

问题2:有没有更简单的方法从ArrayList employees导出数据?我想生成这样的输出。

预期输出:

<employees>
    <employee>
         <id>001</id>
         <firstName>John</firstName>
         <lastName>Doe</lastName>
         <designation>Developer</designation>
    </employee>
</employees>

由于

1 个答案:

答案 0 :(得分:1)

简而言之,您似乎想要创建具有特定结构的XML文档,最终基于数据库中的数据。

在Java中有各种各样的工具,Groovy Node和XML API是一个非常好的工具。将字符串附加到Writer或StringBuilder有时是一种很好的方法,因为输出格式非常简单(对于较小的文档,或者那些遵循特定模式的文档)。

对于更复杂的文档,例如,如果您提到的列表是几十个中的一个或者元素嵌套了几层,那么我建议使用FTL模板生成XML和Moqui屏幕以及要调用的操作您的数据准备服务,以及包含FTL模板的screen.widgets.render-mode元素。

将FTL包裹在屏幕方法中,您可以使用ScreenFacade.makeRender()方法创建ScreenRender对象。在该对象上设置根屏幕位置,渲染模式“xml”,根据需要设置其他选项,然后调用render(Writer)方法或返回String的render()方法。使用这些方法,您可以将文本流式传输到文件,通过Web请求发送,或者其他任何内容。