Показать сообщение отдельно
Старый 15.02.2012, 12:02   #1  
kaw is offline
kaw
Участник
 
122 / 35 (2) +++
Регистрация: 23.03.2004
Адрес: Новосибирск
AIF - AifDocumentField (таблица соответствия)
День добрый!
Давно ждал подходящей задачи для AIF (Ax4.0)... и дождался
нужно осуществить интеграцию с внешней системой партнера через XML
все настроил с помщью AIF - AifFileSystemAdapter (импорт) - большое спасибо Sergikrus... и msdn
Создал в AOT query (тип документов новый), на его основе с помощью мастера сформировал классы для выгрузки. Привязал их к Конечной точке. Схема xsd - сформировалась стандартная. Кинул на форму ItemMenu, выгрузка прошла на УРА.

Следующим шагом нужно заменить сформированную автоматом XSD, на схему которую нам выдал наш партнер. Открыл AifSchemaStore заменил, парсер малость поворчал на не соблюдение норм..., в итоге договорились.

Снова открываю Основное \ Настройка \ AIF \ Конечные точки \ Политика действий \ Политики данных, отмечаю какие поля мне нужно выгрузить обязательно, какие желательно, какие не нужно выгружать ("/MyJournal/EmplId" - не выгружать), т.к. их нет в XSD

Отправляю документ на выгрузку и получаю ошибку
(Основное \ Период.операции \ AIF \ Диспетчер очередей)
Значение "/MyJournal/EmplId" не найдено в карте соответствия.
Т.е. Ax для всех полей моей таблицы MyJournal, пытается найти соответствующий элемент в XSD, даже если я указал (в AifDataPolicy), что это поле выгружать не нужно.
Дебагером нашел Table AifDataPolicy метод generateXsd
X++:
    // Get the document class id and construct the
    // schema map that will be used to create the
    // endpoint schema.
    documentId = AifAction::getDocumentClassId(actionId);
    map = AifDataPolicySchemaMap::construct(documentId);

    while select IsRequired, IsEnabled, MaxStringLength
        from policy
        where policy.EndpointId == endpointId && policy.ActionId == actionId

        join xpath from documentField
        where documentField.RecId == policy.DocumentFieldRecId
    {
        // Lookup the data policy element
        // associated with the xpath.
        element = map.lookup(documentField.xpath);
Тупик... Зачем генерировать заново схему? если она есть.
Копаю дальше, ага есть поле AifEndpointActionPolicy.DataPolicySynchronized
т.е. мою схему нужно синхронизировать. Но как и где, не могу разобраться...
И такое ощущение, что сбился я где-то значительно раньше...