【问题标题】:What is the proper way to export data from an ArrayList in moqui从 moqui 中的 ArrayList 导出数据的正确方法是什么
【发布时间】:2015-03-27 03:47:37
【问题描述】:

我正在尝试在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>

问题一:调用服务后如何从屏幕访问employeesArrayList?

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

预期输出:

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

谢谢

【问题讨论】:

  • 这些信息不足以缩小任何类型的答案。 ArrayList 包含什么?您要生成什么样的 XML 输出? EntityValue、EntityList 等上的 write XML 方法生成用于实体 XML 导出/导入文件的格式。
  • @DavidE.Jones 抱歉,问题不完整。我已经用必要的细节更新了问题。

标签: moqui


【解决方案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 请求发送或其他方式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-11
    • 2020-02-16
    • 1970-01-01
    • 2011-11-05
    • 2016-10-27
    • 2019-09-04
    • 2016-01-11
    • 2019-09-14
    相关资源
    最近更新 更多