2010-04-22 27 views
6

Máy khách của chúng tôi gửi cho chúng tôi một tệp phẳng làm đầu vào, sau đó chúng tôi lấy và chuyển đổi sang tệp XML trước khi gửi đến hệ thống đích.Sơ đồ tệp phẳng BizTalk - cách chấp nhận LF hoặc CRLF làm dấu tách dòng

Tệp phẳng bao gồm nhiều dòng, mỗi dòng được phân cách bằng LF hoặc CRLF.

Làm cách nào để tạo Sơ đồ tệp phẳng để BizTalk có thể diễn giải từng dòng dữ liệu bất kể dòng được giới hạn bởi LF (0x0A) hay CRLF (0x0D 0x0A)?

Trả lời

6

Sự cố được giải quyết. Đây là giải pháp trong trường hợp bất kỳ ai khác đang tự hỏi:

Vì LF và CRLF đều chia sẻ ký tự LF, tôi đặt dấu phân cách là LF (0x0A). Điều này hoạt động chính xác để trích xuất các bản ghi đầy đủ (với tác dụng phụ của việc có thêm một ký tự CR ở cuối khi CRLF là dấu phân tách).

Người ta có thể loại bỏ nhân vật CR phụ bằng cách sử dụng trường giả để hấp thụ ký tự CR hoặc bằng cách sử dụng bản đồ.

Lưu ý rằng vì dấu phân tách LF và CRLF có độ dài khác nhau (1 và 2 ký tự tương ứng), tôi phải thực hiện thêm một vài thay đổi đối với giản đồ để đảm bảo cả hai được xử lý chính xác. Trong kịch bản của tôi, mỗi bản ghi dòng đã được phân tích cú pháp chứa 8 trường vị trí, vì vậy có một ký tự CR phụ ở cuối dẫn đến lỗi do Biztalk mong đợi một độ dài nhất định cho trường cuối cùng không tính đến phần bổ sung Nhân vật CR. Giải pháp là tăng độ dài của trường thứ 8 (trường Filler trong trường hợp của tôi) lên 1. Tuy nhiên, để vẫn có thể xử lý các dấu phân tách dòng LF, hãy đảm bảo bạn đặt 'Cho phép chấm dứt sớm' cờ đến TRUE. Bằng cách này không có lỗi nào được ném nếu trường cuối cùng là 1 ký tự ngắn của độ dài được gán của nó (nếu không có ký tự CR).

+0

Điều này có nghĩa là bạn cũng sẽ chấp nhận các hồ sơ không đúng định dạng? –

4

Hãy tha thứ cho tôi nếu tôi hiểu sai câu hỏi ... có vẻ như mỗi dòng là một bản ghi, nhưng một số dòng kết thúc bằng LF và các dòng khác trong CRLF và bạn cần có cả dấu phân tách ở cùng một mức?

Tôi không biết cách nào để chỉ định nhiều dấu phân cách con với lược đồ tệp phẳng, nhưng một giải pháp có thể là viết thành phần đường ống tùy chỉnh cho giai đoạn giải mã của đường ống nhận của bạn để thay thế CRLF với LF, sau đó sử dụng LF làm dấu phân tách trên giản đồ tệp phẳng.

+0

Cảm ơn bạn BiztalkMama. Câu trả lời của bạn chắc chắn là một lựa chọn, nhưng tôi muốn có một cách để làm điều này bằng cách sử dụng Schema Editor chứ không phải là một thành phần giải mã tùy chỉnh. May mắn thay, tôi phát hiện ra rằng nó có thể sau khi tất cả. Tôi đánh giá cao sự giúp đỡ của bạn mặc dù. – FullOfQuestions

Các vấn đề liên quan