31.01.2011, 12:58 | #1 |
Участник
|
Com-соединение
Здравствуйте! Заранее прошу прощения за, возможно, глупый вопрос, но я специалист не в Axapta, а всего лишь в Lotus Domino/Notes. Есть задача - помещать xml-файл, созданный в приложении, работающем на платформе Lotus Domino в Axapta. Файл создается этим приложением и складывается в папку, далее Заказчик требует соорудить com-процедуру, которая запускала бы процесс "засасывания" этого файла в Axapta. Подскажите, какие есть решения этой задачи? Заранее благодарен!
|
|
31.01.2011, 13:07 | #2 |
Модератор
|
Есть и немало.
Можно написать процедуру импорта и запускать по требованию. Можно ее осуществить в виде периодической операции. Можно задействовать специальный механизм интеграции - AIF, но он громоздкий. Обратитесь к специалистам, которые поддерживают DAX на предпиятии Заказчика. С Уважением, Георгий |
|
31.01.2011, 13:08 | #3 |
Участник
|
К сожалению, обратиться к их специалистам не представляется возможным, решение задачи целиком на мне
|
|
31.01.2011, 13:30 | #4 |
Модератор
|
Вы не закачаете информацию в DAX внешними средствами. DAX добавляет много служебной информации, RecId, RecVersion, идентификатор компании и т.д., которую невозможно добавить внешними средствами.
Вам нужен доступ к приложению. Если у Вас есть доступ к приложению, то необходимо кратко представлять структуру DAX, что нетривиальная задача для новичка. Как только Вы получите представление о структуре приложения (что куда нужно импортировать и какие обработки при этом необходимо вызывать), можно будет прочитать про COM-коннектор и XML - парсеры. На данный момент решение задачи Вашими силами не представляется возможным. Ищите DAX специалистов. Говорите Заказчику, что без них решения данной задачи невозможно и очень рискованно. С Уважением, Георгий |
|
31.01.2011, 13:54 | #5 |
Участник
|
Георгий, тут еще неизвестно, что имеется в виду под "засасыванием файла в Аксапту". Может нужно не содержимое файла распарсить и по таблицам раскидать, а например сам файл целиком к записи в документообороте присоединить. Но что и для чего, конечно, знать надо заранее. Я вообще не понимаю, как может взяться не знакомый с какой-то системой человек что-то в незнакомую систему загрузить, ведь он не знает, будет ли соблюдена целостность данных, к чему это может привести, и тем более как потом исправить проблему, если закачается не то и не туда.
|
|
31.01.2011, 14:01 | #6 |
Участник
|
Георгий спасибо за ответ! Сложность этого решения мне ясна. А если попробовать иной способ: xml-файл выгружается сторонним приложением в указанную папку, и далее нужно настроить Axapta так, что бы она "смотрела" в эту папку с определенным интервалом, к примеру, раз в час, или каждый день в 18:00 и забирала оттуда xml-файл, так возможно? Просто сейчас всё это делается руками, берется этот xml-файл, относится человеку, который работает с Axapta, и этот человек руками запускает в Axapta процедуру, которая этот файл забирает.
|
|
31.01.2011, 14:04 | #7 |
Участник
|
Zabr, разносится именно содержимое из файла. Всё разносится корректно, но только руками,а нужно автоматически. Естественно, не зная этого, я бы даже не стал пытаться решать какие-то задачи.
|
|
31.01.2011, 14:30 | #8 |
Модератор
|
А, ну, если есть процедура, которая парсит файл, то задача упрощается. Необходимо настроить периодичность данной операции, путь, откуда она будет забирать файл, и осуществить контроль на дублирование, чтобы избежать повторной закачки. Желательно сделать журнал импорта - когда и кем запускалось, запускалось ли автоматом, были ли ошибки.
Для этого, скорее всего, надо править уже существующий код. Немного, но надо С Уважением, Георгий |
|
31.01.2011, 14:39 | #9 |
Участник
|
Так же, если уже есть готовая внутренняя процедура импорта, то есть возможность дёрнуть её снаружи. При помощи "COM Business connector" либо "NET Business connector" в зависимости от версии аксапты connector в AX 2009
|
|
31.01.2011, 14:48 | #10 |
Участник
|
Цитата:
Сообщение от S.Kuskov
Так же, если уже есть готовая внутренняя процедура импорта, то есть возможность дёрнуть её снаружи. При помощи "COM Business connector" либо "NET Business connector" в зависимости от версии аксапты connector в AX 2009
|
|
31.01.2011, 16:25 | #11 |
Участник
|
Алексей, если бы вы сразу написали внятно, правильный ответ не заставил бы себя ждать 2 часа, как сейчас. А то ведь вы написали: Есть задача - помещать xml-файл, созданный в приложении, работающем на платформе Lotus Domino в Axapta. А на самом-то деле: Задача загрузки данных из файла в Аксапту решена, запускается вручную из Аксапты, а надо запускать автоматически по расписанию, желательно извне Аксапты. Это же совершенно другая задача.
|
|
15.02.2011, 11:06 | #12 |
Участник
|
"Задача загрузки данных из файла в Аксапту решена, запускается вручную из Аксапты, а надо запускать автоматически по расписанию, желательно извне Аксапты"
Да, именно так. Прошу прощения за неверное определение. Каким образом возможно это реализовать и насколько трудоёмок данный процесс? |
|
15.02.2011, 11:37 | #13 |
Участник
|
Импорт XML-файла через SMTP и POP3
Можно ли настроить Axapta что бы она обращалась в почтовый ящик, выдергивала оттуда вложенный xml-файл и запускала уже имеющуюся процедуру размещения данных из этого файла? Если да, то можно ли привести тут код, который эту задачу выполнял бы?
|
|
15.02.2011, 14:26 | #14 |
Участник
|
Цитата:
(theBat это умеет, outlook скорее всего тоже). Но зачем вам вообще заморачиваться с почтой ? Почта тут - лишнее звено, из за которого будут одни проблемы при эксплуатации. Не надежно все это. На мой взгляд такой способ - извращение. Не лучше ли из Аксапты, напрямую, запрашивать некий web сервис, который по заданному адресу будет возвращать xml пакет с данными, необходимыми для импорта в Аксапту ? (Эту функцию можно будет затем запускать в Аксапте в режиме пакетной обработки с любой периодичностью) Вот пример, который импортирует данные о курсах валют с сайта ЦБ (http://www.cbr.ru/scripts/XML_daily.asp) - все очень просто X++: void run() { com xml; XMLNodeList nodelist; XMLElement xmlNodeLine; int i; Currency currency; CurrencyCode currencyCode; ExchRates exchRates; InteropPermission dllPermission = new InteropPermission(InteropKind::ComInterop); ; dllPermission.assert(); try { xml = new COM('Microsoft.Xmldom'); xml.async(False); xml.validateOnParse(False); xml.load(strfmt("http://www.cbr.ru/scripts/XML_daily.asp")); nodelist = xml.getElementsByTagName("Valute"); for (i = 0; i < nodelist.length(); i ++) { xmlNodeLine = nodelist.item(i); currencyCode = valueFromXMLNode(types::String, xmlNodeLine.getElementsByTagName('CharCode').item(0)).value('value'); currency = currency::find(currencyCode); if (currency.RecId != 0) { exchRates = exchRates::find(currencyCode); if (exchRates.RecId == 0) { exchRates.CurrencyCode = currencyCode; exchRates.FromDate = systemDateGet(); exchRates.ExchRate = valueFromXMLNode(types::Real, xmlNodeLine.getElementsByTagName('Value').item(0)).value('value') / valueFromXMLNode(types::Real, xmlNodeLine.getElementsByTagName('Nominal').item(0)).value('value') * 100; if (exchRates.validateWrite()) { exchRates.insert(); info (strFmt('Введен курс валюты %1 со значением %2 на дату %3', exchRates.CurrencyCode, exchRates.ExchRate, exchRates.FromDate)); } } } } } catch (Exception::Error) { error(chi_GetTimeStamp() + "Процедура импорта валютных курсов завершилась неудачей"); } } Это всего лишь один из примеров реализации. Есть возможность передавать через web сервисы и "закрытые" данные, и данные по параметрическим запросам... Обратитесь к поставщикам вашего xml файла. Создать web сервис, который будет выдавать xml - дело 5 минут для грамотного NET программиста, например... |
|
17.02.2011, 14:11 | #15 |
Участник
|
У нас данные в XML-файл выгружаются из системы на платформе Lotus Domino, которая и является почтовой, с клиентами Lotus Notes, по-этому нам ближе вариант именно через почтовый ящик
|
|