我有一个要求,我必须从sql server本地数据库读取数据,并首先将其映射到另一个第三方组织提供的XML文件中。谁拥有自己的数据库。然后,一旦我有适当的字段映射,我必须将数据从sql server数据库转换为XML格式,反之亦然。 到目前为止,我能够在mirthconnect中连接sqlserver数据库但是我不知道在通道和变换器中创建需要哪些步骤来执行读取数据和将相应字段映射到第三方提供的XML格式的任务,最后写入XML文件提供,反之亦然。
简而言之,如果我可以在欢乐连接中获取创建此类频道的详细信息,我可以在其中读取sql server数据库并映射相应xml文件中的字段....我想我可以写信给它。如果我从xml格式转到sqlserver数据库,则同样适用。有人能告诉我如何做到这一点吗?
对于数据库字段映射,最好的方法是在两个不同的数据库上完全映射字段,是否有任何可以帮助的工具....
此外,一旦完成将数据从一端转换为另一端的任务,是否有任何方法可以验证数据是否正确地从一端移动到另一端?
答案 0 :(得分:1)
如果你想一次处理一行,普通的数据库阅读器将正常工作;只需在Summary to XML下为所有步骤设置数据类型。将通道编写器的目标设置为无处运行并运行一次,以查看它在仪表板中的作用。您可以将其作为示例复制并粘贴到消息模板中,以便映射变量。
如果您想在Transformer步骤中一次处理整个结果,我发现在Microsoft SQL查询结束时创建自定义阅读器并使用“FOR XML RAW,ELEMENTS”更容易。 类似的东西:
//build connection
var dbConn = DatabaseConnectionFactory.createDatabaseConnection('com.microsoft.sqlserver.jdbc.SQLServerDriver','jdbc:sqlserver://servername:1433;databaseName=dbname;integratedSecurity=true;','',''); //this uses the MS JDBC driver and auth dll
//query results with XML output from server 'FOR XML' statement at end
var result = dbConn.executeCachedQuery("SELECT col1 AS FirstColumn, col2 AS SecondColumn FROM [dbname].[dbo].[table1] WHERE [processed] = 'False' FOR XML RAW, ELEMENTS");
//Make sure we are at the top of results
result.beforeFirst();
//wrap XML. Namespace etc. not required
XMLresult = '<message>';
//XML broke up across several rows in one column. Re-combine
while (result.next()) {
XMLresult += result.getString(1);
}
XMLresult += '</message>';
dbConn.close();
return XMLresult;