我们的客户端向我们发送一个平面文件作为输入,然后我们将其作为输入并转换为XML文件,然后再发送到目标系统。
平面文件由多行组成,每行由LF或CRLF分隔。
如何创建平面文件架构,以便BizTalk可以解释每一行数据,无论该行是由LF(0x0A)还是CRLF(0x0D 0x0A)分隔?
答案 0 :(得分:7)
问题解决了。以下是其他人想知道的解决方案:
由于LF和CRLF都共享LF字符,因此我将行分隔符设置为LF(0x0A)。这适用于提取完整记录(当CRLF是分隔符时,在末尾有一个额外的CR字符的副作用)。
可以使用虚拟字段来消除额外的CR字符以吸收CR字符或使用地图。
请注意,由于LF和CRLF分隔符具有不同的长度(分别为1和2个字符),因此我不得不对模式进行更多更改以确保两者都得到正确处理。
在我的场景中,每个已解析的行记录包含8个位置字段,因此在末尾有一个额外的CR字符会导致错误,因为Biztalk期望最后一个字段的某个长度不考虑额外的CR字符。解决方案是将第8个字段(在我的情况下是填充字段)的长度增加1.但是,为了仍然能够处理LF行分隔符,请确保设置'允许早期终止'标志为TRUE。这样,如果最后一个字段短于其指定长度的1个字符(如果不包括CR字符),则不会引发错误。
答案 1 :(得分:4)
如果我误解了这个问题,请原谅我......听起来好像每一行都是一条记录,但有些行以LF结尾,其他行以CRLF结尾,你需要将两者作为同一级别的分隔符?
我不知道如何使用平面文件架构单独指定多个子分隔符,但一种可能的解决方案是为接收管道的解码阶段编写自定义管道组件以替换CRLF使用LF,然后使用LF作为平面文件架构上的分隔符。
答案 2 :(得分:0)
一种简单的方法是将LF设置为分隔符,将CR设置为模式级别的填充字符。如果架构在通过Visual Studio进行测试时工作但在管道中出错,请翻转Infix / Postfix值。无需选择允许提前终止。