2016-02-11 103 views
0

BizTalk架構genration用於具有多個記錄的交易我有一個包含以下事務的數據文件記錄只有一個標籤

1020915 
2Suppliers - Non Consumption 
2Offer sheet needed 
3CRIV SOL 
43005t5677 

1021015 
2Shippment to New York 
3Be required to provide receipts when turning in sheets 
(Invoice was not sent in time. Copy was requested) 
43005yg876 

記錄的每行以標籤標識符1,2,3,4開始。我的問題是標記爲3的第二個事務。請注意,行中沒有標記(發票未及時發送,請求複製)。實際上,它是在上一行結尾處帶有'LF'的新行。如何制定一個模式來捕獲這個異常?

+0

類似於:http://stackoverflow.com/questions/34512862/biztalk-flatfile-schema-multiple-irregular-repeating-records/34596495#34596495(也由您問起) –

回答

0

我想在這種情況下,你會想寫一個自定義反彙編程序。可能有辦法欺騙FFDASM來處理這個權利,但這是一個非常簡單的信息,並不難。有關於CodeProject的教程。

你拆機方法可能看起來像:

msgPart = pInMsg.BodyPart; 
Stream originalStream = pInMsg.BodyPart.GetOriginalDataStream(); 
StreamReader reader = new StreamReader(originalStream); 
XNamespace ns = "http://schema_name_space"; 
XDocument returnDoc = new XDocument(new XElement(ns + "SchemaRootNode")); 

while (reader.Peek() > -1) 
{ 
    // use reader.ReadLine() to consume your lines, use the first character to determine what kind of node to put them into 
    xd.Root.Add(// new XElement with your string in it based on the "tag" 
       // with logic to determine whether line has a tag or not. 
} 

VirtualStream vts = new VirtualStream(); 
xd.Save(vts); 
vts.Position = 0; 

IBaseMessage outMsg = pInMsg; 
outMsg.BodyPart.Data = vts; 

pContext.ResourceTracker.AddResource(vts); 
pContext.ResourceTrakcer.AddResource(reader); // BizTalk will dispose of these later 

outMsg.Context.Promote("MessageType", 
    "http://schemas.microsoft.com/BizTalk/2003/system-properties", 
    "http://schema_name_space#SchemaRootNode"); 
outMsg.Context.Promote("SchemaStrongName", 
    "http://schemas.microsoft.com/BizTalk/2003/system-properties", 
    "SchemaAssembly full name"); 

qOutputMsgs.Enqueue(outMsg); 
1

不幸的是,你不能因爲反彙編器就沒有辦法知道,如果錯誤的CR/LF是記錄分隔符或實際內容。

您的問題是該文件無效,它不是BizTalk或您的架構或任何您的結尾。

因此,您需要做的第一件事就是讓此文件的供應商知道他們發送的內容無效。

如果再不能或不會糾正自己的問題,你做的第二件事是通知你的管理,因爲他們生產的無效數據,你必須花費額外的時間來修復它。

最後,你必須寫一個管道組件對於試圖檢測無效CR/LF的和取代它們解碼狀態。請注意,這可能會非常棘手,因爲您仍然不知道[CR/LF] 3是分隔符還是內容。

祝你好運!

+0

帶標記3的行是描述領域。有些用戶按Enter鍵即可開始新的內容行,即使他們不需要,因爲它會自動包裝文本。 – Jlee

+1

是的,這對用戶來說非常好,但它爲什麼會發生並不重要。由於模糊的CR/LF,誰將生產此文件仍然製作不可解析的文件。他們需要解決這個問題。 –