Получить Objectid аттача

Тема в разделе "Lotus - Программирование", создана пользователем D!m@n, 12 авг 2009.

  1. D!m@n

    D!m@n Гость

    Добрый день, уважаемые участники!

    Есть ли какой-нибудь способ программно получить ObjectID файлового вложения в документе?
    У NotesEmbeddedObject такого свойства нет. Экспорт документа (и даже всей базы с потрохами) в DXL не помогает.

    Заранее спасибо!
     

    Вложения:

    • objectid.png
      objectid.png
      Размер файла:
      6,7 КБ
      Просмотров:
      203
  2. K-Fire

    K-Fire Гость

  3. lmike

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

    Регистрация:
    27 авг 2008
    Сообщения:
    6.082
    Симпатии:
    300
    а он вам зачем? (просто интересно)
     
  4. D!m@n

    D!m@n Гость

    Можно, конечно, попробовать... Но пока я не нашел ни одной функции, возвращающей Object Id, кроме NSFDbAllocObject(), но это не то, что мне нужно...
    Есть такая проблемка известная - "Attachment found in more than one document". Возникает, если не ошибаюсь, когда вследствие ошибки в базе создается два аттача с одинаковыми Object Id. У меня такая проблемка возникла с одной юзерской почтовой базой. Fixup и compact не помогли. Можно, конечно, еще реплику создать, но этот вариант я приберегаю на потом, т.к. он слишком простой, скучный и не дает понимания проблемы.
    А хочется найти пару проблемных документов и разобраться с ними в индивидуальном порядке :)
     
  5. ToxaRat

    ToxaRat Чёрный маг
    Lotus team

    Регистрация:
    6 ноя 2007
    Сообщения:
    3.047
    Симпатии:
    18
    о, такой же любитель извращений :)
    тоесть у вас получается в одном доке два аттача с одни и тем же именем? :(
     
  6. morpheus

    morpheus скриптописец

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
    ToxaRat
    бывает и такое...
     
  7. D!m@n

    D!m@n Гость

    Да речь же не про имя аттача, а про идентификатор объекта аттача (который по идее должен быть уникален не в пределах документа, а в пределах базы)... :)
     
  8. ToxaRat

    ToxaRat Чёрный маг
    Lotus team

    Регистрация:
    6 ноя 2007
    Сообщения:
    3.047
    Симпатии:
    18
    а object.Source от ембедеда не оно?
     
  9. D!m@n

    D!m@n Гость

    Не, не оно :)
     
  10. TIA

    TIA :-)
    Lotus team

    Регистрация:
    15 май 2009
    Сообщения:
    790
    Симпатии:
    0
    Пример на С.
    [codebox] OBJECT_DESCRIPTOR objDescr;
    unsigned char* pMyValue;
    STATUS error;
    WORD value_datatype;
    BLOCKID value_blockid;
    BLOCKID item_blockid;
    BLOCKID prev_item_blockid;
    DWORD value_len;
    unsigned char* pNValue;
    unsigned char* pValue = NULL;


    error = NSFItemInfo(hNote,ITEM_NAME_ATTACHMENT, strlen(ITEM_NAME_ATTACHMENT),
    &(item_blockid), &value_datatype, &value_blockid, &value_len);

    while (NOERROR == error)
    {
    if (TYPE_OBJECT == value_datatype)
    {
    pMyValue = new unsigned char[value_len];
    pNValue = (unsigned char *)OSLockBlock(char,value_blockid);
    pNValue += sizeof(WORD);
    value_len -= sizeof(WORD);
    memcpy(pMyValue, pNValue, value_len);
    OSUnlockBlock(value_blockid);

    ODSReadMemory( &pMyValue, _OBJECT_DESCRIPTOR, &objDescr, 1 );

    if (OBJECT_FILE == objDescr.ObjectType)
    {
    //Искомый RRV получен в objDescr.RRV
    ...
    }
    delete pMyValue;
    }

    prev_item_blockid = item_blockid;
    error = NSFItemInfoNext(hNote,
    prev_item_blockid,
    ITEM_NAME_ATTACHMENT,
    strlen(ITEM_NAME_ATTACHMENT),
    &item_blockid,
    &value_datatype,
    &value_blockid,
    &value_len);
    }[/codebox]
     
  11. D!m@n

    D!m@n Гость

    TIA, спасибо за помощь!
    Вернусь из отпуска - буду ковырять, как Ваш исходник использовать! :)
    (свою проблему вынужден был решить созданием реплики... но инфа все равно пригодится :))
     
  12. maliy

    maliy Well-Known Member

    Регистрация:
    20 мар 2007
    Сообщения:
    135
    Симпатии:
    1
    to D!m@n , у Вас получилось получить программно доступ к свойствам аттачмента? Если да , не могли бы подсказать как ?
     
  13. maliy

    maliy Well-Known Member

    Регистрация:
    20 мар 2007
    Сообщения:
    135
    Симпатии:
    1
    to TIA, а нет примера на С полного , или примера базы на лотусе с использованием С API чтоб более наглядно можно было разобраться?
     
  14. TIA

    TIA :-)
    Lotus team

    Регистрация:
    15 май 2009
    Сообщения:
    790
    Симпатии:
    0
    Про вызов dll из LS погугли книги
    EntwickerCamp2007-Calling-The-C-API-From-LotusScript.pdf
    ls2capi-ebook-to.pdf
     
  15. maliy

    maliy Well-Known Member

    Регистрация:
    20 мар 2007
    Сообщения:
    135
    Симпатии:
    1
    ок, это я просмотрю , но я имел ввиду код , или пример как получить Objectid аттача , тобой код приведен , но я так понял он не полный вот может где-то завалялся примерчик неплохо было бы...
     
  16. TIA

    TIA :-)
    Lotus team

    Регистрация:
    15 май 2009
    Сообщения:
    790
    Симпатии:
    0
    Куда полнее то? Там есть всё необходимое. Разве что константа ITEM_NAME_ATTACHMENT имеет значение "$FILE". Ты скажи что не понятно, в чём по твоему неполнота, может смогу ответить.
     
  17. Klido

    Klido Гость

  18. maliy

    maliy Well-Known Member

    Регистрация:
    20 мар 2007
    Сообщения:
    135
    Симпатии:
    1
    to TIA про неполный код я имел ввиду
    if (OBJECT_FILE == objDescr.ObjectType)
    {
    //Искомый RRV получен в objDescr.RRV
    ...
    }
    То есть не понятно что тут должно обрабатываться....
    Я просто никогда не работал с Вызовом C API из лотуса, по этому вот примерчик был бы кстати , ну и к тому же стоит задача получить каким то образом приаттаченный файл.

    to Klido, спасибо за ссылки.
     
  19. TIA

    TIA :-)
    Lotus team

    Регистрация:
    15 май 2009
    Сообщения:
    790
    Симпатии:
    0
    maliy
    Задача стояла так:
    Искомый ObjectID это ни что иное как RRV. Если угодно:
    DWORD ObjectID = objDescr.RRV;

    Почему Вам не подходит получать приаттаченный файл через штатный EmbeddedObject, getAttachment, тоже "Attachment found in more than one document"?
     
  20. maliy

    maliy Well-Known Member

    Регистрация:
    20 мар 2007
    Сообщения:
    135
    Симпатии:
    1
    Вообщем хочу сделать чтобы зная, UNID документа , можно было бы иметь доступ к его аттачу из реляционной субд , пока не знаю как это сделать ...
    То есть - в лотус в базе в определенных документах имеются аттачи, и вот пользователь например скопировал в реляционку в поле UNID дока, а потом чтоб написать какую то функцую , которая по этому UNID из лотусовой базы перетягивала аттач в реляционку.
     
Загрузка...

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