Эффективный парсинг EDI в базе данных на C #

Более трех лет назад нас попросили в срочном порядке разработать решение EDI для клиента.

Им нужен был полный IP / контроль и т. Д. Над решением, и они не хотели использовать бесплатные решения с открытым исходным кодом, платить большие суммы денег за подобные BizTalk и т. Д. Или платить регулярные сборы VAN.

В то время мы провели некоторое исследование и на самом деле не нашли много информации о форматах EDI, синтаксическом анализе и т. Д., Поэтому наша команда разработчиков из двух человек сразу же взялась за дело и разработала решение на C # / ASP.Net. Из-за небольшого количества транзакций сообщений EDI, которые будут иметь место (около 100 в день), мы приняли процесс RegEx для синтаксического анализа, проверки и вставки в базу данных. Это было сделано с помощью отдельного приложения C #, которое должно было запускаться каждые несколько минут и подключаться к клиентам различных провайдеров по FTP, AS2, EBMX и загружать данные, а также загружать любые исходящие сообщения EDI.

Затем мы разработали веб-интерфейс, который предоставил персоналу клиентов полный доступ к данным с различными отчетами о доходах, возможность контролировать данные, а также позволял некоторым агентам клиентов входить в систему, а также взаимодействовать с данными и инициировать транзакции по счетам. тоже.

Теперь клиент хочет, чтобы работа с EDI была проделана для другого направления своего бизнеса, однако на этот раз транзакции edi-сообщений вырастут до тысячи. Наши группы разработчиков обеспокоены использованием RegEx. Недавно я прочитал, что использование RegEx для синтаксического анализа EDI имеет огромные накладные расходы и его следует избегать.

Единственная причина, по которой мы приняли его в первую очередь, заключалась в том, что мы не знали, что лучше всего использовать. Тем не менее, RegEx упростил управление шаблонами сообщений edi, включая проверку в шаблонах. Клиент добавил в свои книги еще несколько поставщиков, и мы смогли добавить новые шаблоны сообщений (с индивидуальными изменениями) за считанные минуты.

Проведя гораздо больше исследований недавно, мы обнаружили, что большинство решений анализируют файлы EDI в XML. Для этого есть причина? Это просто для того, чтобы принять более общий формат и / или избежать доступа к базе данных? Быстрее ли просто проанализировать XML по сообщениям EDI в плоских файлах?

Мы хотим, чтобы элементы данных из файла EDI находились в базе данных? Не могли бы мы вместо этого просто проанализировать XML-файл? Разве это не еще один шаг обработки, которого можно было бы избежать?

Прошу прощения за общий характер моего вопроса, но мне трудно найти ответы.

Большое спасибо за ваше время.

ПРИМЕЧАНИЕ. Наша команда разработчиков использует только продукты Microsoft, поэтому примите это во внимание при отправке отзывов.


person Liam North    schedule 08.03.2013    source источник


Ответы (2)


Я подозреваю, что большинство разработчиков, которые решили написать собственное решение, написали свои собственные классы для преобразования EDI в XML, потому что их интеграция с конечной точкой поддерживала XML (либо они не могли писать в базу данных напрямую, либо хотели использовать XSLT, чтобы показать конечному пользователю данные красиво). Я написал парсеры, которые «переводились» в форматы CSV и плоских файлов, потому что это то, что нам нужно было импортировать. Я также написал парсеры для дампа прямо в базу данных. Синтаксический анализ в XML обычно представляет собой необходимый шаг для некоторых в качестве подхода «промежуточного программного обеспечения». Если вам не нужно делать промежуточный шаг, то зачем вам это делать? Если вы можете записать это в БД, обязательно сделайте это. Вы также не упомянули, какие документы вы делаете, и я предполагаю, что вы встроили процесс FA в свое приложение. RegEx должен продолжать работать на вас, и есть много способов снять шкуру с кошки.

С учетом сказанного, применяется мой обычный отказ от ответственности. Здесь вы изобретаете велосипед. Милями. Я понимаю пожелания вашего клиента и рад, что вы смогли удовлетворить его потребность. Честно говоря, я бы, наверное, уволил клиента :) Поскольку вы пользуетесь только продуктами Microsoft, вы как бы запутались. Оглядываясь на SO, BizTalk обсуждается больше, чем другие пакеты. Вероятно, для этого есть причина, и, как вы выяснили, это тоже очень дорого. Я большой поклонник Liaison Delta - работает в Windows, использует классы Microsoft Foundation в своей основе и позволяет переводить любой на любой за небольшую часть стоимости BizTalk. Мне кажется, поддерживать «карты» перетаскивания проще, чем тысячи строк кода, но, эй, политика есть политика :) Надеюсь, это поможет.

person Andrew    schedule 08.03.2013
comment
Большое спасибо за ваш вклад, Эндрю. Я действительно надеялся, что ты ответишь. Прочтите довольно много тем, основанных на EDI, с вашими входными данными и определенно оцените ваш ответ. В любом случае, не говоря уже о документах, которые мы сейчас обрабатываем (входящие / исходящие): X12: 323, 300, 301, 315, 540, 630, 660, 900, 904, 909, 916, 917, 918, 919 Я буду обязательно взгляните на Delta (о которой вы упоминали в других потоках). Если есть случай предложить клиенту более профессиональное, надежное и дешевое решение, я буду настаивать на этом. Вы определенно ответили именно то, что мне нужно. Тай! - person Liam North; 08.03.2013
comment
Что это за документы? 909? 916? Я никогда не слышал о них и не могу найти их в моем средстве просмотра словарей ANSI X12. Я вижу, что другие документы - это логистические документы морского перевозчика, и некоторые из них довольно просты. Я, вероятно, просто собирался сойти с ума, если вы делали медицинские документы, такие как 837. Извините, если некоторые из моих ответов повторяются. Я сделал хорошую карьеру в EDI за последние 15 лет и знаю, насколько жесткими могут быть проблемы с некоторыми клиентами. - person Andrew; 08.03.2013
comment
Мои извенения. До первых 900 должен был быть «VTIMS:». Я считаю, что это специальные сообщения EDI, используемые для «VTIMS» (Система управления информацией о движении судов), используемая General Motors. У нас есть копии их МИГов. - person Liam North; 11.03.2013
comment
Привет всем! Кто-нибудь подскажет, как мне начать кодирование для преобразования EDI в xml или csv или импорта в таблицу базы данных? - person dilipkumar1007; 31.05.2017

Около 3 лет назад я также создал парсер x12, который разбирает x12 edi в xml. В настоящее время он доступен в виде открытого исходного кода по адресу http://x12parser.codeplex.com. Причина, по которой я сделал это таким образом, заключалась в том, что я хотел, чтобы часть синтаксического анализа не заботилась о цели, будь то база данных или, возможно, плоские файлы. Оказывается, это было ценно, поскольку некоторые пользователи использовали Oracle вместо Sql Server, и многие пользователи преобразовали его в плоские файлы для загрузки в свою базу данных или отправки в какой-либо последующий процесс. Я думаю, что это сделало сам синтаксический анализатор очень гибким для многих сред. Еще одна причина, по которой мне понравился XML, заключается в том, что я смог добавить другие аннотации, которые были полезны для всех, кто не запомнил все коды EDI (в основном для всех), и я смог преобразовать их в HTML (см. Сайт для пример) с этими аннотациями. Я также встроил возможность разделять ваши объекты на отдельные сообщения, чтобы ваша пост-обработка могла потреблять по одному объекту за раз. Многие пользователи помогли мне оптимизировать его, чтобы он обрабатывал огромные файлы, поэтому он стал довольно стабильным. Сейчас я занимаюсь обслуживанием его, чтобы он поддерживал все транзакции 4010. Часть о синтаксическом анализе в базе данных я оставляю на усмотрение пользователя, потому что все, кажется, очень разборчивы в том, как они проектируют таблицы данных (например, я не мог договориться с коллегой о том, использовать ли целые числа или идентификаторы GUID для идентификаторов таблиц. , те, кто склоняется к менталитету DBA, предпочитают ints, те, кто использует много ORM, предпочитают GUID).

Вскоре после того, как я опубликовал это, я добавил поддержку базы данных, так что вы можете пропустить XML и передать его непосредственно в базу данных SqL Server. Вы можете решить, сколько типов сегментов будет проанализировано в отдельные таблицы, чтобы не перегружать вашу базу данных 300 таблицами, из которых вы, вероятно, будете использовать только 10 или 20. Здесь обсуждается SQL Server в качестве промежуточной среды о плюсах и минусах использования xml или sql server в качестве вашего посредник для вашей окончательной системы.

person Dannie Strubhar    schedule 19.03.2013
comment
Ваша посылка выглядит довольно круто! - person Mr.Hardy; 06.09.2013