Почему не срабатывает импортёр?

Тема в разделе "Lotus - Программирование", создана пользователем Constantin A Chervonenko, 31 май 2010.

  1. Constantin A Chervonenko

    Constantin A Chervonenko Well-Known Member

    Регистрация:
    30 май 2006
    Сообщения:
    1.288
    Симпатии:
    0
    Дошли руки (нашлась задача) до DXL.
    Экспортирую док-т в поток, парсю его SAXParser-ом, пытаюсь импортировать обратно.
    Импортёр говорит Ok, но док-т не обновляется :-(

    Нет-ли каких подводных камней при импорте док-та их XML?
    Да, версия клиента - 6.5.5
     
  2. turumbay

    Регистрация:
    13 мар 2009
    Сообщения:
    625
    Симпатии:
    2
    м.б. notesDXLImporter.DocumentImportOption ?
     
  3. Constantin A Chervonenko

    Constantin A Chervonenko Well-Known Member

    Регистрация:
    30 май 2006
    Сообщения:
    1.288
    Симпатии:
    0
    Эт я заметил! Попробовал DXLIMPORTOPTION_REPLACE_ELSE_IGNORE и DXLIMPORTOPTION_REPLACE_ELSE_CREATE.
    Однохренственно...

    А вот всяки свойства "created", "modified" etc импорту не противоречат? Я пробовал кое-что выкусить - не помогает
     
  4. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.074
    Симпатии:
    300
    нужно Serialize делать иначе изменения не отразятся (для DOM)
    а SAX - этож в поток, пайплайн делается?

    если всё не "налету", то посмотреть - может он новый док создаёт...
    ну и там - ошибки (посмотреть их)
     
  5. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    Где, в LS? О.о

    Constantin A Chervonenko ,
    опробуйте убить из импортируемого дока данные об униде. Права на создание и изменение конкретного документа есть (доступ к базе, к документу)?
     
  6. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.074
    Симпатии:
    300
    а что смущает?
    Добавлено:
    это какие - ведь надо обновить док...
     
  7. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    Не могу ответить, не знаю )) просто переспросил.
    Для проверки сработает ли импорт вообще.
    А разве импортер сработал бы без ошибки, если бы ему пустой поток передали бы?
     
  8. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.074
    Симпатии:
    300
    я не помню режимов его работы...
    куда ошибки пишет - надо хэлп смореть
     
  9. Constantin A Chervonenko

    Constantin A Chervonenko Well-Known Member

    Регистрация:
    30 май 2006
    Сообщения:
    1.288
    Симпатии:
    0
    Будет пайп, а пока - для отладки - во временное файлО пишу/читаю
    Эт понятно. Ошибки в importer.Log смотрю. Пока преобразование не отладил, они там были. Теперь: ошибок нет, но и док-та нет


    Добавлено:
    Прав - выше крыши.
    UNID - жалко. Док-т надо именно обновить. Для этого (судя по help) требуется совпадение replicaid и unid. Разве только для отладки?
    А noteid и sequence я выкусил
     
  10. Constantin A Chervonenko

    Constantin A Chervonenko Well-Known Member

    Регистрация:
    30 май 2006
    Сообщения:
    1.288
    Симпатии:
    0
    Ха! С опцией DXLIMPORTOPTION_REPLACE_ELSE_CREATE оно-таки создаёт новые док-ты - совсем с другим UNID-ом.

    For purposes of replacement, two documents match if:
    The replica ID of the output database matches the replica ID of the incoming DXL.
    The universal IDs of the two documents match.

    Разумеется, эти IDы я не трогал. Тем не менее, железяка считает, что оно NOT match :)
    М.б. какая-то фигня, типа разделители ( : ) в replicaid-е?
     
  11. turumbay

    Регистрация:
    13 мар 2009
    Сообщения:
    625
    Симпатии:
    2
    Может ей мешает док in-memory? Если разбить код на два куска(две кнопки): первый выгружает, изменяет и сохраняет на диск. второй - только импортирует файл.
     
  12. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.074
    Симпатии:
    300
    вот какую-то инфу трогать низя в ДХЛ (удалять), может она и пропала?
     
  13. VladSh

    VladSh начинающий
    Lotus team

    Регистрация:
    11 дек 2009
    Сообщения:
    1.251
    Симпатии:
    2
    У меня было: выгружаю док, потом импортирую его же, - создаётся новый док; выгружаю этот новый док, импортирую, - импортируется, т.е. обновляется! Что за хрень тогда не разобрался, т.к. особо не надо было.. подозреваю, что что-то в обычном доке может быть "лишнее"...
     
  14. Constantin A Chervonenko

    Constantin A Chervonenko Well-Known Member

    Регистрация:
    30 май 2006
    Сообщения:
    1.288
    Симпатии:
    0
    Тоже так подумал. Перед импортом делаю delete doc. - те же яйца...


    Добавлено:
    Гм...
    Задачка-то бытовая: почикать аттачи и картинки из письма.
    Т.е. <item name='$FILE'> + из <richtext> выкусить <attachmentref> и просто <picture>. Всё делается на 1-2-3. Кроме импорта.

    Если-б знать все folder-ы, где письмо лежит, workaround сделал-бы. Впрочем, и тут засада: как в общем случае найти свежесозданный док-т?
     
  15. turumbay

    Регистрация:
    13 мар 2009
    Сообщения:
    625
    Симпатии:
    2
    workaround: импортировать в отдельно стоящую пустую БД. сразу после импорта получать этот свежий док, писать (скриптом) поверх исходного и убивать
     
  16. VladSh

    VladSh начинающий
    Lotus team

    Регистрация:
    11 дек 2009
    Сообщения:
    1.251
    Симпатии:
    2
    Для этого есть совершенно гениальные методы, которые наконец-то стали работать с 8.5.1...:

    notesDXLExporter.OmitRichtextAttachments
    notesDXLExporter.OmitRichtextPictures
    а также:
    notesDXLExporter.OmitMiscFileObjects
    notesDXLExporter.OmitOLEObjects
     
  17. alik86

    alik86 Lotus team
    Lotus team

    Регистрация:
    20 ноя 2008
    Сообщения:
    465
    Симпатии:
    0
    Колупался с похожей задачкой. Вроде с DXLIMPORTOPTION_REPLACE_ELSE_IGNORE всё ОК работает:
    Код (Text):
    Sub Click(Source As Button)
    Dim Session As New NotesSession
    Dim Wsp As New NotesUIWorkspace
    Dim db As NotesDatabase
    Dim Stream As NotesStream
    Dim DXLImporter As NotesDXLImporter
    filename$ = "D:\Картинки\" + Wsp.Prompt(PROMPT_OKCANCELEDIT,_
    "Введите имя файла из которого импортировать DXL",_
    "D:\Картинки\", "Picture_надо.xml" )
    Set Db = Session.CurrentDatabase
    Set Stream = Session.CreateStream
    If Not Stream.Open(filename$) Then
    Messagebox "Невозможно открыть файл " & filename$,, "Ошибка"
    Exit Sub
    End If
    Set DXLImporter = Session.CreateDXLImporter(stream, Db)
    DXLImporter.DocumentImportOption = DXLIMPORTOPTION_REPLACE_ELSE_IGNORE
    DXLImporter.Process
    Msgbox "Готово! Документ " & filename$ & " импортирован."
    End Sub
    В данном примере использован исправленый файл, полученый ранее экспортом дока (Session.CreateDXLExporter(Doc, ...))
    P.S. В xml я не силен - я только учусь, так что не ругайте сильно, если чего-то недопонял и не то написал. ;)
     
  18. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.074
    Симпатии:
    300
    мобуть с этой опией поиграться setForceNoteFormat(false);
     
  19. Constantin A Chervonenko

    Constantin A Chervonenko Well-Known Member

    Регистрация:
    30 май 2006
    Сообщения:
    1.288
    Симпатии:
    0
    :ya_lamo:

    Какие очепятки допускают опытные программеры: в уме DocumentImportOption, а в коде - DesignImportOption

    Слава Богу, тут просто было.
    Воюю дальше - с кодировками: если пром.Stream-ы на файлах, всё Ok. А если "в уме" - не работает. Импортёр ругается на кодировку

    Пайпы с ходу не пошли: импортёру не нравится тип Output-а
     
  20. VladSh

    VladSh начинающий
    Lotus team

    Регистрация:
    11 дек 2009
    Сообщения:
    1.251
    Симпатии:
    2
    Да, это они отстойно сделали:
    Натыкался на это, когда надо было передавать данные в реляционку, но пока забросил, т.к. чудесным образом кодировка совпала. Да и есть там возможность перекодировки в LCField и LCStream.

    Если что-то получится, черкните пожалуйста пару строк...
     
Загрузка...

Поделиться этой страницей