zoukankan      html  css  js  c++  java
  • WebMethod 处理 FlatFile

      一直都是用BizTalk与FlatFile打交道,最近在使用WebMethod时,也碰到一些棘手的FlatFile,写出来和大伙分享下。

      使用BizTalk处理FlatFile时,首先可以使用FlatFile wizard对已有的FlatFile Sample文件进行解析,典型的所见即所得的形式,很容易的就可以做出那样的Schema。即使没有现成的Sample文件,也可以通过添加Record、Filed,设定Record和Filed之间的Delimiter或者Postion,最后在自定义一个Receive 或者 Send 的PipeLine就可以实现对FlatFile的处理了。

          使用WebMethod处理FlatFile时,就有很多注意的问题了。

      WebMethod处理的FlatFile包括两种方式,一种是带tag的,另一种是不带tag的。

      1)带tag的FlatFile:对于FlatFlie Schema的每一个Record,都要在FlatFile中存在一个RecordName和Schema中的RecordName匹配。

      例如在WebMethod中我们定义了如下的FlatFile Schema:

      

                      Figure 1:FF Schema with tagID

      这个Schema引用了两个在FlatFile dictionary的Record,构成了我们的Order。他的Defination如下:

      

                      Figure 2:FF Defination with tagID

      对这样的一个Schema,我们需要什么样的Sample 才能与之匹配呢?

      请注意下面的Sample的内容:

      ----------------------------------------

      Header*Jason*ShangHai*13098765432
      Detail*123*234*12340878 2344

      ----------------------------------------

      在每一行的最前面都有一个标志,这个标志和我们定义的Schema里面的Record的名字是一样的。比如Header和Header的Filed之间也使用*分隔(注意在我的dictionary中CustName和POQty的NTH的标志是从1开始的,这样他才能忽略我的每个Record起始位置的tag)。一直不明白为什么WebMethod要这样做,按照在BizTalk的做法,这个tag是可有可无的,只要我的Header和Detail都是Mandatory的,那么根本不需要在前面加tag。

      按照WebMethod的官方文档,在FlatFile中,必须有这么个标志位去match他的Schema中的Record。也是这只是WM的一种作为分辨的标识,但是它有提供了另外一种方式,可以需要使用那个tag。

      看下面的图:

      

                      Figure 3:FF Schema without tagID

      这个FlatFile的Schema就是直接设置成了dictionary中的Header,和上面的Figure 1不一样的是,他只有一个节点,就像在BizTalk中的最上层的Schema那个节点一样。但是他的类型是Header的。

      这个Schema的Sample 如下:  

      ----------------------------------------

      Jason*ShangHai*13098765432
      Jason1*ShenZhen*13098765432

      Jason2*BeiJing*13098765432

      ----------------------------------------

      很明显,这个Schema只能识别简单结构的FlatFile了。这对我们来说可不是好事,虽然不需要tag了,但是不能构造我们需要的内容了。

      那么,对于我们的如下的Sample,WebMethod该如何处理呢?  

      ----------------------------------------

      Jason*ShangHai*13098765432
      123*234*12340878 2344

      ----------------------------------------

      答案在我知道后揭晓。:)

  • 相关阅读:
    日期格式化
    面向对象高级编程——使用__slots__
    面向对象编程——实例属性和类属性(六)
    面向对象编程——获取对象信息(五)
    面向对象编程——类方法和静态方法(八)
    面向对象编程——多重继承(七)
    面向对象高级编程——使用@property
    python常用模块——logger模块
    python常用模块——hashlib模块
    面向对象编程——super进阶(十)
  • 原文地址:https://www.cnblogs.com/JasonLiao/p/1803532.html
Copyright © 2011-2022 走看看