2012-07-02 23 views
6

Chúng tôi là một công ty hiện đại sử dụng công nghệ hiện đại như giao diện XML, nhưng nhiều khách hàng của chúng tôi muốn ví dụ hóa đơn điện tử từ chúng tôi theo định dạng EDIFACT như D96A.Có cách nào thực sự đơn giản để xử lý EDIFACT ví dụ D96A không?

Không, chúng tôi không thể sử dụng các thư viện hiện có, vì chúng không được viết bằng ngôn ngữ lập trình C/AL mà phần mềm Navision của chúng tôi sử dụng.

Vì vậy, để phân tích cú pháp trong C/AL, tôi cần hiểu đặc điểm kỹ thuật của nó. Nhưng nó trông cực kỳ khó khăn và phức tạp.

Vậy ai đó có thể cho tôi một cái nhìn tổng quan về cách diễn dịch nói D96A và cách phân tích cú pháp đó?

Trả lời

0

Tôi biết rằng câu hỏi này cũ hơn, nhưng tôi phải làm một ít nghiên cứu cho dự án của khách hàng. Có một số tiện ích tốt cho Dynamics NAV. Ví dụ, hãy xem Anveo EDI Connect họ đã thực hiện việc nhập và xuất EDIFACT (và nhiều định dạng khác) trực tiếp trong NAV. Các giải pháp khác có sẵn từ BMI, Yaveon, Lanham và một số công ty khác. Ngoài ra còn có một số nhà cung cấp dịch vụ xử lý dữ liệu và bạn đồng ý với họ trên cấu trúc XML hoặc tệp dựa trên đơn giản.

2

Tôi đề xuất tìm kiếm và tìm hiểu thông qua các bản repo GitHub hoặc SourceForge. Tìm kiếm nhanh với từ khóa: + EDIFACT + D96A cung cấp một số thư viện để bạn chọn. Thực tế, điều này có vẻ hứa hẹn cho trường hợp của bạn:

  • Bots open source edi translator, http://sourceforge.net/projects/bots/. Mô tả của dự án cho biết đó là một dịch giả hoàn chỉnh cho EDI (Trao đổi dữ liệu điện tử).

Bạn luôn có thể đánh giá và kiểm tra Oracle B2B 11g là một phần của Oracle SOA Suite 11gR1: - http://www.oracle.com/technetwork/middleware/soasuite/downloads/downloads-085394.html#11g. Nó có thư viện OTD UN/EDIFACT mà tôi đoán bạn có thể sử dụng ít nhất để phân tích cú pháp.

Nói chung, đặt cược tốt nhất của bạn là chọn thư viện hiện có và chuyển đến NAV hoặc sử dụng thông qua giao diện bên ngoài nơi dữ liệu được chuyển vào cơ sở dữ liệu NAV của bạn. Nếu bạn có thể gọi mã .NET thì rất nhiều thư viện hiện có sẽ tồn tại và đơn giản bằng cách tham chiếu assembly sẽ đưa bạn đến đó. Vì nó không quen thuộc với việc phát triển NAV nhưng sử dụng một số loại REST/JSON, bất kể cơ chế truyền dữ liệu của đối tượng chuyển dữ liệu của bạn là gì, trong đó thành phần B của bạn thực hiện công việc nặng nề và thành phần NAV của bạn kéo các thông điệp UN/EDIFACT đã phân tích cú pháp Giao diện XML.

Có một câu hỏi tương tự khác và vài câu trả lời cũng phù hợp với bạn: Is there any good open source EDIFACT parser in Java?.

Cheers!

9

Phân tích cú pháp EDIFACT thực sự không phức tạp. Chỉ cần tách các ký tự của sytax: đầu tiên tại số ' để nhận các phân đoạn, so với số + để lấy các phần tử dữ liệu của các phân đoạn đó và tại : để nhận các thành phần riêng lẻ. Bạn cần phải chăm sóc ký tự thoát seperator, tất nhiên. Các ký tự được sử dụng ở đây chỉ là mặc định, chúng có thể được thay đổi ở đầu thông báo bằng phân đoạn UNA tùy chọn. Trên thực tế, wikipedia article trên EDIFACT cho một giới thiệu khá tốt (nhưng ngắn gọn) về điều đó. Và định dạng được ghi lại chi tiết trên UN's UNECE site (vâng, đó là rất nhiều và khó đọc).

Phần khó khăn là lấy thông tin ra khỏi đó và vào ứng dụng của bạn (và xác minh nó hợp lệ, để lại một mình tạo thông báo lỗi tốt). Nếu bạn thực sự có kế hoạch viết một trình phân tích cú pháp comlete ra khỏi không có gì cho tất cả các ngôn ngữ đó, thì: Không, không có cách nào dễ dàng để làm điều này. Cũng không có bất kỳ biểu diễn dữ liệu linh hoạt nào khác. Điều đó một nhiệm vụ khó khăn và sẽ luôn luôn được.

Nhưng đây là một ý tưởng: nếu bạn tham gia vào XML nhiều (hoặc bất kỳ "công nghệ hiện đại" nào khác mà bạn muốn gọi nó ...). Nó sẽ là một nhiệm vụ tương đối dễ dàng để viết một số chương trình chuyển đổi các thông điệp EDIFACT thành một số định dạng XML-EDIFACT thống nhất (đó là một điều khá khủng khiếp và rất có thể sẽ làm tôi thất vọng). Bạn có thể chuyển đổi tất cả các phân khúc EDIFACT vào một thẻ XML, có lẽ như thế này:

ERC+A7V:1:AMD' 
IFT+3+NO MORE FLIGHTS' 

Trong XML:

<segment qualifier="ERC"> 
    <element> 
     <component>A7V</component> 
     <component>1</component> 
     <component>AMD<component> 
    </element> 
</segment> 
<segment qualifier="IFT"> 
    <element> 
     <component>3</component> 
    </element> 
    <element> 
     <component>NO MORE FLIGHTS</component> 
    </element> 
</segment> 

Sau đó, bạn có thể tháo sức mạnh của công cụ XML và các thư viện của bạn vào nó để xác nhận/đánh giá nó.

Bạn cũng có thể làm điều đó cụ thể hơn, như thế này:

<segment_ERC> 
    <element> 
     <component>A7V</component> 
     <component>1</component> 
     <component>AMD<component> 
    </element> 
</segment_ERC> 
<segment_IFT> 
    <element> 
     <component>3</component> 
    </element> 
    <element> 
     <component>NO MORE FLIGHTS</component> 
    </element> 
</segment_IFT> 

Điều này có thể thực hiện xác nhận qua XSD dễ dàng hơn. Bạn có thể nhận được tất nhiên như cụ thể như bạn muốn với cuộc trò chuyện này, nhưng bạn sẽ sớm hay muộn đến một điểm, nơi bạn sẽ cần phải đặt thông tin về cấu trúc của thư hiện đang được phân tích cú pháp của bạn vào trình chuyển đổi (vì nó không tầm thường biết phân khúc nào được lồng vào các phân đoạn khác nhóm chúng. Không chỉ có UNG, UNH và các phân đoạn đó mà bạn không thấy trực tiếp).

Tuy nhiên, bạn sẽ phải tạo các chương trình/lược đồ đánh giá/máy đánh giá cụ thể cho các tin nhắn bạn nhận được, theo sổ tay EDIFACT bạn sẽ nhận được dưới dạng tài liệu.

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