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

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

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

原文地址:https://www.cnblogs.com/JasonLiao/p/1803532.html