880 likes | 1.08k Views
第 2 天 日程表. 转换映射 创建一个新的映射 映射编辑器 操作 映射检测器 过滤器 用户操作 脚本概况 WSDL 导入向导 流程组件编辑器 特性概况 了解消息流程 运行 SA 管理控制台. 安装 消息格式 在 XML 模式中复制 MDL 编辑器 创建一个变量记录输出 格式检测器 HL7 编辑器 X12 编辑器 日程表 假日日程表 查找表. 安装. 前提 : Sun Java 1.5 JDK 运行安装程序,安装到你选择的路径 重新启动让环境变量变更起作用 对于主要版本,如果安装到同一路径,安装新版本前请先卸载先前的版本
E N D
第2天 日程表 • 转换映射 • 创建一个新的映射 • 映射编辑器 • 操作 • 映射检测器 • 过滤器 • 用户操作 • 脚本概况 • WSDL 导入向导 • 流程组件编辑器 • 特性概况 • 了解消息流程 • 运行 SA • 管理控制台 • 安装 • 消息格式 • 在XML模式中复制 • MDL 编辑器 • 创建一个变量记录输出 • 格式检测器 • HL7编辑器 • X12编辑器 • 日程表 • 假日日程表 • 查找表
安装 • 前提: Sun Java 1.5 JDK • 运行安装程序,安装到你选择的路径 • 重新启动让环境变量变更起作用 • 对于主要版本,如果安装到同一路径,安装新版本前请先卸载先前的版本 • 复制修改过的ChainBuilderESB-SE-Transformer-1.2.jar
已安装的组件 • ChainBuilder ESB • Eclipse 集成开发环境 (IDE + Server install only) • Service 和JBI 容器 • Tomcat Web Server • Derby 数据库
消息格式 • HL7 – Healthcare • HL7 编辑器 • MDL – 消息定义语言 • 消息格式编辑器 • 固定 • 变量 • 分级 • X12 • X12编辑器 • XML – 导入模式
简单固定的记录范例– Account Balance • 输入格式: Account Number (5), Balance (10) • 范例数据 (accountBalance.txt): • 617230000070.00 • 514290000238.31 • 012840007452.99 • 831490000002.35 消息类型 文件 消息 字段
字段定义 字段属性
测试 MDL • 测试目录: C:\<cbesb_home>\ideworkspace\Level1\src\test 移动不同行的范例数据
简单 CSV 范例 – clientAccountNumbers.mdl • 输入数据格式: first, last, account# • 范例数据 (clientAccountNumbers.csv): • Doe,John,61723 • Doe,Jane,51429 • Smith,John,01284 • Johnson,Jim,83149 消息类型 分隔符 文件 消息 字段
测试 MDL 移动不同行的范例数据
HL7 编辑器 • 许多常见HL7 格式都是预装入的 • HL7 变体允许修改现有格式
HL7 编辑器 – 创建一个变体 • 添加一个额外的PID字段来捕获病人的E-mail地址 MSH|^~\&|ADT1|MCM|LABADT|MCM|199008181126|SECURITY|ADT^A01|MSG00001|P|2.3.1| EVN|A01|199008181123|| PID|1||PATID1234^5^M11^ADT1^MR^MCM~123-45-6789^^^USSSA^SS||SMITH^JOHN^A^III||19800101|M||C|100 N MAIN STREET^^COLUMBUS^OH^43125-1020|GL|(614)555-1212|(614)555-3434||S||PATID12345001^2^M10^ADT1^AN^A|123456789|987654^OH|||||||||||patient@patient.com NK1|1|SMITH^JANE^K|WI^WIFE||||NK^NEXT OF KIN PV1|1|I|2000^2012^01||||004444^SMITH^CHARLES^J.|||SUR||||ADM|A0|
HL7 编辑器 – 创建一个变体 • 在PID的末尾增加最大长度为50的额外字段
HL7 编辑器 – 测试变体 • 选择消息类型ADT A01并进行测试
X12 编辑器 • 许多常见X12 格式都是预装入的 • X12变体允许修改现有格式
查找表编辑器 • 创建从 Package Explorer (右击) New -> Lookup File • 简单 键-值 对表 • 点击绿色加号添加新条目
查表 • XML 文件 • 命名为 *.tbl • 设置在表目录 • 从Transform或Java索引 • 范例: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"> <properties> <comment>LookUp Table Example general_sample</comment> <entry key=“key1">value1</entry> <entry key=“key2">value2</entry> </properties>
映射编辑器 • 操作属性 • 源和目标树 • 操作树 • 操作面板
操作 • 联合: 连接多个源 • 注释 • 块注释: 注释掉/取消注释 现有操作 • 复制: 单一源到单一目标 • 迭代器: 循环读取数据元素 • 查找 • 数学
操作 • 发送: 创建发送到外部消息 (所有在一起交换) • 禁止: 防止在映射结束消息自动创建 • If: 使用Java比较,如: ?1.equals(“string”) • ElseIf • Else • While • User: 使用自定义映射用户操作 • JDBC: 映射执行时访问数据库
映射测试器 • 测试前必须创建项目 • 点击测试按钮开始 • 选择输入文件 • 选择读取格式
映射测试结果 • 源数据树和目标数据树 • 操作树 • 翻阅多个结果集 保存结果 到文件
迭代映射范例 • 目的: 创建映射orders.trn 从重复元素项XML格式到相似的格式 • 源: SingleOrderReportInternational.xsd • 目标: SingleOrderReportUSA.xsd
迭代映射范例 • 使用映射特性完成大部分映射 • 从Order (源树)点击和拖拽到 Order (目标树) • 自动地为相同名字的所有字段创建复制和迭代语句
迭代映射范例 • 注意元素编码颜色和父子组关系 • 说明:某些字段没有映射也许需要手动映射 • PostalCode -> Zip
迭代映射范例 • 完善缺少的Zip 代码复制操作 • 点击不在迭代器中的复制 (所以新的操作不会在迭代器内被创建) • 从源字段拖拽到目标
迭代映射范例 • 测试映射 • 首先,存储映射并创建项目 • 测试文件 • Order_International_USA_apoproval.xml • Order_International_USA_denial.xml • 注意迭代器如何在出站消息中输入重复元素
高级迭代范例 • 目的:映射从重复product属性的XML格式到包含一个属性的CSV格式 • 从每一个迭代器创建一个出站消息(所有在一次消息交换),并可能创建出基于逻辑的额外出站消息
高级迭代范例 • 迭代操作只能在单一的循环结构内执行。如果我们映射到的目标格式有一个循环结构,那在它的内部会有一个嵌套的循环。
高级迭代范例 • 使用源作为键查找表,在目标字段返回它的值
高级迭代范例 • 如果语句使用java比较 (选择类型) • 用?1, ?2, ?3, 等索引源数据元素
高级迭代范例 • 如果多种源字段语句使用Integer比较
高级迭代范例 • 数学运算允许多种源字段 • 使用 ?1 类型索引 • 允许基本的数学运算
高级迭代范例 • 初始化变量 • 循环重复属性标签 • 有条件地填充基于属性名的变量 • 为每个迭代器创建出站消息 • 如果我们发现高度,宽度和长度然后计算尺寸并创建额外的记录 • 禁止自动创建消息 (防止最后一条消息重复) • 在表中找到ID属性
自定义代码 • 代码必须用Java 或 Groovy写 • 代码自动生成 • 必须创建项目
自定义代码类型 • 映射过滤器:为映射中字符串操作的单一方法 • 映射用户操作:自定义映射操作 • TrxId: 在CBR中确定路由名称 • Upoc:插入绑定组件 • 脚本组件:自定义绑定组件,可能是提供者或消费者 • 自定义组件:在向导界面下创建自定义绑定组件
过滤器 • 可以进行许多操作 • 典型地用来文本操作 • 选择类和方法 • 必须先建立项目 • 单一字符串输入 • 单一字符串输出
映射过滤器范例 import java.util.Date; import java.text.DateFormat; import java.text.SimpleDateFormat; public class Filters { public String trimQuotes (String in) { // removes all double-quote characters (") from input data in = in.replaceAll("\"", ""); return in; } public String replaceSpacesWithUnderscores (String in) { // removes all double-quote characters (") from input data in = in.replaceAll(" ", "_"); return in; } public String getDateTime(String in) { DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); Date date = new Date(); return dateFormat.format(date); } }
映射用户操作范例 package com.bostechcorp.cbesb.map; import java.util.Map; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Map; import com.bostechcorp.cbesb.runtime.ccsl.lib.ITransformationOperation; publicclass reformatDate implements ITransformationOperation { publicboolean process(String[] arg0, String[] arg1) throws Exception { /* * Takes in a date with a given format at outputs the date in a modified format * input: arg0[0]: input date format arg0[1]: output date format arg0[2]: date to be modified * output: arg1[0]: modified date */ String inputPattern = arg0[0]; String outputPattern = arg0[1]; SimpleDateFormat inputFormatter = new SimpleDateFormat(inputPattern); SimpleDateFormat outputFormatter = new SimpleDateFormat(outputPattern); Date date = (Date)inputFormatter.parse(arg0[2]); String dateStr = outputFormatter.format(date); arg1[0] = dateStr; returntrue; } }
脚本组件范例 publicvoid run(Log logger, String rootDir, ComponentContext componentContext, DeliveryChannel channel, MessageExchange exchange, Map<String, String> params) throws Exception { /* * This class receives in an inbound message and prints the contents * Then the out message is set to a different value and sent on * Use this class when it is necessary to have an out message (in-out) */ NormalizedMessage inMsg = exchange.getMessage("in"); NormalizedMessageHandler nmhIn = new NormalizedMessageHandler(inMsg); Source record = nmhIn.getRecordAtIndex(0); // assumes that incoming message is a string String inMessage = ((StringSource)record).getText(); logger.info("modifyMessage - inbound message: " + inMessage); NormalizedMessage outMsg = exchange.getMessage("out"); NormalizedMessageHandler nmh = new NormalizedMessageHandler(outMsg); // set new outbound message StringSource strSrc = new StringSource("modified message"); nmh.addRecord(strSrc); nmh.generateMessageContent(); LinkedList sendList = new LinkedList(); sendList.add(exchange); }
WSDL 导入向导 • 从ChainBuilder ESB 菜单访问 • 从WSDL生成模式 • 选择源WSDL(必须从文件)和目标目录 • 用来创建可以被利用的映射的模式向Web Service发送数据
流程组件编辑器 • Eclipse 插件 • 图形化界面 • 拖拽功能 • 向导援助
绑定组件 • HTTP – 包括 web services • File • FTP • JMS - MQ • TCPIP – Server 或 Client 模式, 包括 MLP • Script • Custom • Email – POP3 和 SMTP
文件绑定组件 • 读取和写入文件 • 在复选框中选择模式读,写或都选 使用CCSL选项打开或关闭在向导中下面的CCSL配置界面,典型地选择True
文件绑定组件 • 文件模式 – 选择输入文件读取目录 • Glob or Regex • 基本的或高级的日程表 • 源和层目录可以是完整或相对路(esbHome\runtimes\test\SA)
文件绑定组件 • 读入方式 • raw: 整个文件内容读到单一的消息 • newline: 在单一的交换每一行读入不同的消息
文件绑定组件 • 动作:删除或存档 • 保留:在启动时怎样处理层目录中的文件 • 二次校验:在读入前是否检查文件大小
文件绑定组件 • 回复设置 • 只为写入/读出配置 • 回复是最后的出站消息 • 写出方式 • raw: 每一个交换消息写入到不同的文件 • newline:所有交换消息到单一文件
文件绑定组件 • 文件模式 –包含文字字符和宏 • 基本名:原始文件名(无扩展名) • 日期:系统日期格式为YYYYMMDD • 时间:系统时间格式为hhmmss • 数:从1开始,每次组件启动自动递增 • EXT:原始文件扩展名
文件绑定组件 • 写入模式属性 • 只有写在第一个界面上检查了才可以