|
22.04.2011, 14:09 | #1 |
Участник
|
AIF - AifFileSystemAdapter (импорт)
Здравствуйте!
Не могу решить проблемку. Нужно для обкатки AIF, импортировать номенклатуру из AX 2009 №1 в AX 2009 №2, соответственно с помощью AIF. Номенклатура из AX 2009 №1 выгружается, тут проблем нет. Теперь хочу импортировать эту номенклатуру в AX 2009 №2: 1. Создал "Локальную конечную точку" 2. Настроил "Адаптер транспортировки" 3. Создал "Канал" с направление "Входящий", указал путь к выгруженной номенклатуре из AX 2009 №1 4. Активировал "Службу AIF" InventItemService 5. Создал "Конечную точку" -> Политика действий: InventItemService.create (все поля, при выгрузке тоже все поля). 6. Выполняю Job: X++: static void AifInboundProcessing(Args _args) { AifInboundProcessingService inbound = new AifInboundProcessingService(); AifGatewayReceiveService send = new AifGatewayReceiveService(); ; send.run(); inbound.run(); } Файл выгруженный из AX 2009 №1 удаляется(по логике так и должно быть), но номенклатура не создаётся. Перехожу на форму "Основное -> Периодические операции -> AIF -> Исключения", вижу ошибку: Локальная конечная точка DIT не существует. DIT, это "Конечная точка" в AX 2009 №1. Не долго думая, я пересоздал конечную точку в AX 2009 №2 и обозвал её именно DIT , конечно же я не рассчитывал что это поможет. Подскажите, пожалуйста, как справиться с этой ошибкой, что от меня требует система, почему ей нужна именно эта конечная точка? За ранее спасибо. |
|
22.04.2011, 18:10 | #2 |
Участник
|
Результат переименования конечной точки озвучь более конкретно: импорт после этого был успешно сделан или нет...
__________________
Ален ноби, ностра алис. Что означает - если один человек построил, другой завсегда разобрать может. |
|
25.04.2011, 07:25 | #3 |
Участник
|
Нет!
Ошибка: Локальная конечная точка DIT не существует Последний раз редактировалось Sergikrus; 25.04.2011 в 08:13. |
|
25.04.2011, 09:49 | #4 |
Участник
|
Какие у тебя настройки в форме Конечные точки?
Должно быть так: Путь: Основное/Настройка/AIF/Конечные точки. • Процедура - входящее перемещение o Конечная точка является источником o Локальная конечная точка является назначением • Процедура - исходящее перемещение o Конечная точка является назначением o Локальная конечная точка является источником Действия: • Задать конечную точку (Код, Имя) • Выбрать локальную конечную точку • Определить политику действий для выбранной конечной точки |
|
25.04.2011, 10:47 | #5 |
Участник
|
Помоему всё так как вы сказали, но наверно опишу подробнее как есть у меня.
Настройки AIF в AX 2009 №1 (Выгрузка номенклатуры): 1. Локальные конечные точки: 2. Адаптеры транспортировки: 3. Каналы: 4. Конечные точки: Политика действий конечной точки: Ну и отметил галками какие поля выгрузать, отметил все. Выгрузка: 1. На форме "Номенклатура", жму "Отправка по эл.почте" 2. Выбираю 1 номенклатуру, жму "Ок" 3. выполняю Job: X++: static void AifOutboundProcessing(Args _args) { AifOutboundProcessingService outbound = new AifOutboundProcessingService(); AifGatewaySendService send = new AifGatewaySendService(); ; outbound.run(); send.run(); } Настройки AIF в AX 2009 №2 (Импорт номенклатуры): 1. Локальные конечные точки: 2. Адаптеры транспортировки: 3. Каналы: 4. Конечные точки: Политика действий конечной точки: Отметил галками все поля, так как выгружал тоже все. Импорт: 1. Выполнил Job: X++: static void AifInboundProcessing(Args _args) { AifInboundProcessingService inbound = new AifInboundProcessingService(); AifGatewayReceiveService send = new AifGatewayReceiveService(); ; send.run(); inbound.run(); } Локальная конечная точка DIT не существует. |
|
|
За это сообщение автора поблагодарили: mazzy (2). |
25.04.2011, 11:17 | #6 |
Участник
|
Хм...В политике действий вы используете только InventItemService.create?
Попробуйте еще использовать InventItemService.read при экспорте. а также задать "перекрытие внешенего кода": http://schemas.microsoft.com/InventItemService.create Здесь играет роль только постфикс create. Выглядит странновато, но мне помогало. |
|
25.04.2011, 11:17 | #7 |
Участник
|
В каждой установке вам нужно создать по две конечные точки - одна ссылается на локальную точку (т.е. сама система), а вторая - это конечная точка, соответствующая другой установке AX. Например так:
1. AX1: 1.1. Локальная точка DAT. 1.2. Конечная точка AX1 со ссылкой на DAT. 1.3. Конечная точка AX2. 2. AX2: 2.1. Локальная точка DAT. 2.2. Конечная точка AX2 со ссылкой на DAT. 2.3. Конечная точка AX1. В итоге при экспорте вы делается отправку в AX2. А при импорте вы делаете приемку от AX1.
__________________
Ivanhoe as is.. |
|
25.04.2011, 12:09 | #8 |
Участник
|
Я свое сообщение по ошибке удалил
__________________
Ivanhoe as is.. |
|
25.04.2011, 13:41 | #9 |
Участник
|
Повтори пожалуйста, я его не успел прочитать
Последний раз редактировалось Sergikrus; 25.04.2011 в 14:17. |
|
25.04.2011, 17:05 | #10 |
Участник
|
Примерный ответ Ivanhoe звучал так:
Для каждой Инсталляции AX нужно создать по 2 локальные конечные точки: Out, In соответственно при экспорте из 1 инсталляции форма конечных точек Будет как на Рис.Out При импорте в инсталляции 2 форма конечных точек будет как на Рис. In. |
|
|
За это сообщение автора поблагодарили: Sergikrus (1). |
25.04.2011, 17:45 | #11 |
Модератор
|
|
|
26.04.2011, 08:28 | #12 |
Участник
|
Предыдущие советы вроде бы помогли, но сейчас возникает новое исключение :
Сервиса с пространством имен = "http://schemas.microsoft.com/dynamics/2008/01/services" и внешним именем = "InventItemService не существует. Служба такая включена. Что ещё мне нужно проверить, как найти причину данной ошибки? Последний раз редактировалось Sergikrus; 26.04.2011 в 08:53. |
|
26.04.2011, 10:03 | #13 |
Участник
|
А вы привели текст ошибки полностью? Дело в том, что, допустим, кто-то настроил AIF правильно - он и не будет знать что такие ошибки бывают А по тексту ошибки хотя бы можно попробовать найти место в системе, где она выдается, и понять по контексту, чего же не хватает.
__________________
Ivanhoe as is.. |
|
26.04.2011, 10:40 | #14 |
Участник
|
Дело в том, что AIF файл то сжирает,а в Диспетчере очередей помещает запись об ошибке ("пространство имен...") со ссылкой на журнал исключений.
Как вариант - попробуйте создать свои классы с помощью мастера. |
|
27.04.2011, 13:29 | #15 |
Участник
|
Значит так :
1) Ошибка: Сервиса с пространством имен = "http://schemas.microsoft.com/dynamics/2008/01/services" и внешним именем = "InventItemService не существует. Причина: в таблице AifService по критерию: X++: select firstonly * from aifService where aifService.ExternalName == 'InventItemService' && aifService.Namespace == 'http://schemas.microsoft.com/dynamics/2008/01/services'; Решение: Значение атрибута ExternalName в таблице AifService привёл к значению InventItemService вместо ItemService 2) Ошибка: Пользователь не авторизован для этой конечной точки. Причина: так надо Класс: AifRequestProcessor X++: // Verifies that the current user has access to the service operation static private void verifyRequestIsAllowed(AifMessage message) { // #48319 - the sourceEndpointUser should always be equal to the currently logged in user. if(!isValidUser || ( message.sourceEndpointAxUserId() != curuserid())) //User is not authorized for this Endpoint. throw error(strfmt('SYS89826')); } Добавил пользователя к конечной точке: 3) Ошибка: Политика действий конечной точки не существует. Причина: Из 1 Ошибки видно, что имя запрашиваемого сервиса было ItemService вместо InventItemService, то соответственно и Действия называются ItemService.find вместо InventItemService.find Решение: Привел значения атрибута Name таблицы AifAction в соответствие к требуемым, тоесть вместо ItemService.find написал InventItemService.find и так далее. |
|
27.04.2011, 13:39 | #16 |
Участник
|
Теперь мне не понятно как в выгружаемом xml документе:
X++: <?xml version="1.0" encoding="UTF-8" ?> <Envelope xmlns="http://schemas.microsoft.com/dynamics/2008/01/documents/Message"> <Header> <MessageId>{03BC7142-4A2F-47BA-B9C5-0A748C3A97FA}</MessageId> <SourceEndpoint>In</SourceEndpoint> <DestinationEndpoint>Out</DestinationEndpoint> <Action>http://schemas.microsoft.com/dynamics/2008/01/services/InventItemService/find</Action> </Header> выгружать, со значением: <Action>http://schemas.microsoft.com/dynamics/2008/01/services/InventItemService/create</Action> так как, в AX 2009 №2 требуется импортировать выгруженую номенклатуру и требуется имено InventItemService/create И соответственно получаю следущую ошибку: Элемент "QueryCriteria" с пространством имен "http://schemas.microsoft.com/dynamic.../QueryCriteria" не найден. Строка 1, позиция 2. Причина: InventItemService/find требует в загаловке первый элемент QueryCriteria Решение: Подскажите пожалуйста решение |
|
28.04.2011, 07:43 | #17 |
Участник
|
Решение найдено:
Прекрыл find в AX 2009 №1 (где выгружаем номенклатуру) вот этой строкой: <Action>http://schemas.microsoft.com/dynamics/2008/01/services/InventItemService/create</Action> |
|
21.03.2012, 05:42 | #18 |
Участник
|
Скорее всего на форме "Действие", Вы создали запись вручную (без указания класса).
Регистрация желательно осуществлять по кнопке "Сканирование и регистрация", система сканирует все классы, которые соответствуют стандарту AIf и автоматически добавляет в список доступных действий. P.S. Если Вам нужно реализовать новый класс Aif, то можно создать в AOT query (тип документов CustInvoiceJour и CustInvoiceLine), на его основе с помощью мастера сформировать классы для выгрузки Axd*. (Малость доработать напильником). http://daxdave.blogspot.com/2006/10/...ion-entry.html Последний раз редактировалось kaw; 21.03.2012 в 05:46. |
|
Теги |
aif, ax2009, как правильно, настройка |
|
|