04.04.2007, 11:40 | #1 |
Участник
|
Работа с MSMQ
Появилась задача интеграции Аксапты (3.0) с приложением использующим очереди MSMQ.
Интеграция этого чудо приложения с внешним миром, организована топорно. Через обмен текстовыми файлами. Лежащими в папочках на диске. MSMQ как я понял используется для того, чтобы сообщить Аксапте, что туда пришли новые файлы, и их необходимо обработать. После обработки, Аксапта должна положить результат в другую папочку и свистнуть опять же через MSMQ внешнему приложению что все ОК. Вот в общем то и все. Если у кого-то возникала подобная задача.. поделитесь опытом а? Спасибо Microsoft Business Solutions-Axapta 3.0 Build #1951.3730/514-193 SP3/OP023-71 |
|
04.04.2007, 12:03 | #2 |
Banned
|
В коде Commerce Gateway есть работа с MSMQ: \Classes\GatewaySendMSMQ. На самом деле, обсуждать тут особенно нечего. Перед вами стоит просто муторная задача, кропотливое кодирование. Это просто нужно сделать, и все.
Если нужно, на след. неделе (вторник) могу раскопать пример кода, в котором читается очередь MSMQ. Последний раз редактировалось EVGL; 04.04.2007 в 12:07. |
|
04.04.2007, 12:29 | #3 |
Участник
|
EVGL спасибо!
Нашел вот еще классец GatewayQueryMSMQReceive. Там вроде как раз чтение из очереди... А постоянное чтение прийдется, как я понимаю, пакетником организовывать. |
|
04.04.2007, 13:18 | #4 |
Banned
|
Цитата:
X++: void ScanDirectory(FilePath _folderPath, GatewayOrgId _gatewayOrgId) { int hndFile; boolean showInfo = true; FileName scanFileName; ProblemGatewayImportProtocol importProtocol; ; if (! _folderPath) throw error("@SFI525"); if (! _gatewayOrgId) throw error("@SFI529"); if (! WinAPI::folderExists(_folderPath)) throw error( strfmt("@SFI526", _folderPath) ); gatewayOrgId = _gatewayOrgId; [hndFile, scanFileName] = WinAPI::findFirstFile(_folderPath + "\\*.tmp"); while (scanFileName) { fileName = _folderPath + scanFileName; if (!ProblemGatewayImportProtocol::exist(fileName)) { if (showInfo) { info("@SFI527"); showInfo = false; } importProtocol.clear(); importProtocol.FilePath = fileName; importProtocol.GatewayOrgId = gatewayOrgId; try { this.run(); importProtocol.ImportStatus = ImportStatus::Imported; } catch { importProtocol.ImportStatus = ImportStatus::InvalidFile; } importProtocol.insert(); } scanFileName = WinAPI::findNextFile(hndFile); } } Последний раз редактировалось EVGL; 04.04.2007 в 13:23. |
|
04.04.2007, 15:06 | #5 |
Участник
|
Цитата:
Вот пробую простенький примерчик X++: static void MSMQ_send(Args _args) { #MSMQ MSMQQueueInfo queueInfo; MSMQQueue queue; MSMQMessage message; MSMQTransactionDispenser dispenser = new MSMQTransactionDispenser(); MSMQTransaction transaction; str res; queueInfo = new MSMQQueueInfo(); queueInfo.pathName("psp\private$\axapta_queue"); //psp имя локальной машины queue = queueinfo.open(#MQ_SEND_ACCESS, #MQ_DENY_NONE); //тут все валится transaction = dispenser.BeginTransaction(); message = new MSMQMEssage(); message.Label("Label"); message.BodyText("Message!!!"); message.sendInTransaction(queue, transaction); transaction.Commit(); // Close the queue. queue.Close(); } Метод 'Open' в COM-объекте класса 'MSMQ.MSMQQueueInfo' возвратил код ошибки 0xC00E0014 (<неизвестно>), который означает: Указаны недопустимые путь и/или имя очереди. . чего ему не нравится... не пойму |
|
04.04.2007, 15:17 | #6 |
Участник
|
Двойные бэк-слэши пробовали?
|
|
04.04.2007, 15:19 | #7 |
Участник
|
|
|
Теги |
ax3.0, msmq |
|
Похожие темы | ||||
Тема | Ответов | |||
Доступ к меню "Работа с документами" | 4 | |||
Совместная работа заказчика и исполнителя в разных или одном слое? | 6 |
|