从 moqui 中的 ArrayList 导出数据的正确方法是什么
What is the proper way to export data from an ArrayList in moqui
我正在尝试导出 XML
文件中的数据。我有几个实体,可以从中检索 ArrayList
中的所有必要数据。我可以利用此 ArrayList
并通过在 script
标记中嵌入 Java / groovy 代码来导出数据。但我想知道在 Moqui 中是否还有其他方法可以导出数据?
我只知道可以在XML
中写入实体数据的writeXmlText
方法。
编辑:这是我的示例服务
<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>
谢谢
简而言之,听起来您想创建一个 XML 具有特定结构的文档,最终基于数据库中的数据。
在 Java 中有多种工具可以执行此操作,Groovy 节点和 XML API 是一个很好的工具。将字符串附加到 Writer 或 StringBuilder 有时是一个好方法,因为输出格式非常简单(对于较小的文档,或者那些遵循特定模式的文档)。
对于更复杂的文档,例如如果您提到的列表是几十个中的一个,或者元素嵌套了几层,那么我建议使用 FTL 模板生成 XML 和Moqui 屏幕,包含调用数据准备服务的操作,以及包含 FTL 模板的 screen.widgets.render-mode 元素。
通过将 FTL 包裹在屏幕方法中,您可以使用 ScreenFacade.makeRender() 方法创建 ScreenRender 对象。在该对象上设置根屏幕位置、"xml" 渲染模式、其他所需选项,然后调用 returns 字符串的 render(Writer) 方法或 render() 方法。使用这些方法,您可以将文本流式传输到文件,通过 Web 请求发送,或其他任何方式。
我正在尝试导出 XML
文件中的数据。我有几个实体,可以从中检索 ArrayList
中的所有必要数据。我可以利用此 ArrayList
并通过在 script
标记中嵌入 Java / groovy 代码来导出数据。但我想知道在 Moqui 中是否还有其他方法可以导出数据?
我只知道可以在XML
中写入实体数据的writeXmlText
方法。
编辑:这是我的示例服务
<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>
谢谢
简而言之,听起来您想创建一个 XML 具有特定结构的文档,最终基于数据库中的数据。
在 Java 中有多种工具可以执行此操作,Groovy 节点和 XML API 是一个很好的工具。将字符串附加到 Writer 或 StringBuilder 有时是一个好方法,因为输出格式非常简单(对于较小的文档,或者那些遵循特定模式的文档)。
对于更复杂的文档,例如如果您提到的列表是几十个中的一个,或者元素嵌套了几层,那么我建议使用 FTL 模板生成 XML 和Moqui 屏幕,包含调用数据准备服务的操作,以及包含 FTL 模板的 screen.widgets.render-mode 元素。
通过将 FTL 包裹在屏幕方法中,您可以使用 ScreenFacade.makeRender() 方法创建 ScreenRender 对象。在该对象上设置根屏幕位置、"xml" 渲染模式、其他所需选项,然后调用 returns 字符串的 render(Writer) 方法或 render() 方法。使用这些方法,您可以将文本流式传输到文件,通过 Web 请求发送,或其他任何方式。