Truncated Document

Тема в разделе "Lotus - Программирование", создана пользователем lmike, 30 мар 2012.

  1. lmike

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

    Регистрация:
    27 авг 2008
    Сообщения:
    6.073
    Симпатии:
    299
    В какой момент я словил эту хрень - не знаю
    доки произвольные, сервер 8.5.3 (недавно с семерки поднял), клиент 7.0.4
    на серваке появились такие доки (TRUNCATED), заметили случайно
    локальная реплика содержит копии полные (я не заметил разницы)
    причем пишет так (size) 37738 (bytes) + (truncated) в св-вах
    из чего заключаю - никакие они не транкейтед (т.к. кол-во недогруженного не указано)
    но интерфейсно этот док не полноценен (в режим редактирования не переходит), где и какой флаг покрутить - ума не приложу
    доп. полей в нём не замечено
    админских методов я не нашёл http://codeby.net/forum/threads/46309.html
    осталось применить ч-нить из программных, но вот чё - не знаю
     
  2. TIA

    TIA :-)
    Lotus team

    Регистрация:
    15 май 2009
    Сообщения:
    790
    Симпатии:
    0
    Скинуть флаг Trancated можно на Notes C API. Схема:

    member = NOTE_FLAGS
    NSFNoteGetInfo(
    NOTEHANDLE note_handle,
    WORD member,
    void far *value_ptr);

    noTruncated = value_ptr and not NOTE_FLAG_ABSTRACTED

    NSFNoteSetInfo(
    NOTEHANDLE note_handle,
    WORD member,
    noTruncated);
     
  3. lmike

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

    Регистрация:
    27 авг 2008
    Сообщения:
    6.073
    Симпатии:
    299
    спасибо, попробую
     
  4. Jansar

    Jansar Гость

    от кого-то слышал про это, возникает когда репликация идет по полям (Replication ettings - Advanced - Fields), получается документ не полностью реплицированный а только часть (truncated-урезанный)
     
  5. lmike

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

    Регистрация:
    27 авг 2008
    Сообщения:
    6.073
    Симпатии:
    299
    у мя ваще нет (да и не люблю эту фичу) селективной репликации
     
  6. lmike

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

    Регистрация:
    27 авг 2008
    Сообщения:
    6.073
    Симпатии:
    299
    TIA
    это прям так и писать?
    т.е. _NOTE_FLAGS =7
     
  7. TIA

    TIA :-)
    Lotus team

    Регистрация:
    15 май 2009
    Сообщения:
    790
    Симпатии:
    0
    >это прям так и писать?
    Да.
    NSFNoteGetInfo(hNote,7,flags)
     
  8. lmike

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

    Регистрация:
    27 авг 2008
    Сообщения:
    6.073
    Симпатии:
    299
    код получился такой
    Код (LotusScript):
    Function UnTruncate(db As NotesDatabase, doc As NotesDocument) As String
    Dim dbHandle As Long
    Dim status As Integer
    Dim Path As String * 256
    Dim NoteID As Long
    Dim NoteHandle As Long
    Dim NoteClass As Long

    On Error Goto ErrH
    ' Set handles to NULL (to help in error handling)
    dbHandle = 0
    NoteID = Clng("&H" & doc.NoteID)

    Call OSPathNetConstruct("", db.Server, db.FilePath, Path)
    If Path = "" Goto ErrH

    status = NSFDbOpen( Path, dbHandle)
    If status <> 0 Goto ErrH

    status = NSFNoteOpen(dbHandle, NoteID, 0&, NoteHandle)
    If status <> 0 Goto ErrH

    Const NOTE_FLAGS=7 
    status=NSFNoteGetInfo(NoteHandle, NOTE_FLAGS, NoteClass)
    If status <> 0 Goto ErrH
    Print {NoteClass> &H} & Hex(NoteClass)

    Dim noTruncated As Long
    noTruncated = NoteClass And Not NOTE_FLAG_ABSTRACTED
    Print {NOTE_FLAG_ABSTRACTED> &H} & Hex(NOTE_FLAG_ABSTRACTED)
    Print {noTruncated> &H} & Hex(noTruncated)

    status=NSFNoteSetInfo(NoteHandle, NOTE_FLAGS, noTruncated)
    If status <> 0 Goto ErrH
    status = NSFNoteUpdate(NoteHandle, 0)
    If (status <> 0) Goto ErrH

    Quit:
    If (NoteHandle <> 0) Then
    Call NSFNoteClose(NoteHandle)
    End If
    If (dbHandle <> 0) Then
    Call NSFDbClose(dbHandle)
    End If
    Exit Function
    ErrH:
    If Err Then
    Print Cstr(Err), Error$
    Resume Quit
    Else
    Print {status>} & Cstr(status)
    End If
    End Function
    но пущать на боевых доках боязно
    проверял на тесте..., снимает статус - да, но при каждом проходе увелич. кол-во байт
    я не считаю это криминальным (возможно меняются служебные поля), но хотелось бы услышать тех кто с СиАПИ более знаком
    значит и вопрос к TIA - исключая отсутствия обработки Сишных ошибок - это близко к правде (то что написано)?
     
  9. TIA

    TIA :-)
    Lotus team

    Регистрация:
    15 май 2009
    Сообщения:
    790
    Симпатии:
    0
    На правду похож, но за последствия  не отвечаю :), т.к. причина появления Truncated не выяснена. Для чистоты надо бы подправить типы.
    Dim noTruncated As INTEGER
    Dim NoteClass As INTEGER

    Код можно сильно сократить, если использовать недокументированный NotesDocument.Handle
    Количество байт, на которое увеличивается документ, сопоставимо с увеличением $UpdatedBy и $Revisions?

    Вспомнил один случай, когда появлялись truncated без ограниченной по размеру репликации. Если у документа есть НЕ-SUMMARY поля, а открыть документ в режиме получения только SUMMARY-полей, то после сохранения документа выставится trancated, т.е. NOTE_FLAG_ABSTRACTED. После сохранения у документа терялись НЕ_SUMMARY поля
     
  10. lmike

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

    Регистрация:
    27 авг 2008
    Сообщения:
    6.073
    Симпатии:
    299
    TIA спасибо за поправки
    а по ситуации - она мне неясна и инфы в тырнете мало (нашёл близких тока два варианта, ссылки вначале)
    НО доки полные (нет отличия от "небитых")
    единственно что заметил - на body (РТ поле) флаг SIGN SEAL (но это есть у тех, кот. небитые)
    откуда он появляется - не знаю, в коде тупо Call rtitem.EmbedObject( EMBED_ATTACHMENT,"" , fname, fnam(0))
    в св-вах поля тоже нет подписи, как и на форме - не взведён флаг

    Добавлено: Dim NoteClass As INTEGER - это точно? я брал код из разных источников...
    непример так
    Declare Sub NSFNoteGetInfo Lib "nnotes.dll" _
    Alias "NSFNoteGetInfo" ( _
    ByVal note_handle as Long, _
    ByVal note_member as Integer, _
    value_ptr as Long)
     
  11. lmike

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

    Регистрация:
    27 авг 2008
    Сообщения:
    6.073
    Симпатии:
    299
    SIGN SEAL есть и установлен у некоторых (закономерности не могу выявить)
     
  12. Мыш

    Мыш Lotus team
    Lotus team

    Регистрация:
    12 фев 2008
    Сообщения:
    1.019
    Симпатии:
    8
    lmike, дык это, наверное, у формы в свойствах поля Body стоит "Подписывать..."? Может, часть док-тов по др. форме создавалась?
    ЗЫ. Имею в виду - по одноименной форме, но в ней нет такого свойства у поля Body.
     
  13. lmike

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

    Регистрация:
    27 авг 2008
    Сообщения:
    6.073
    Симпатии:
    299
    Мыш ни у одной формы я не нашёл такой пымпочки (в дизайне)
     
  14. TIA

    TIA :-)
    Lotus team

    Регистрация:
    15 май 2009
    Сообщения:
    790
    Симпатии:
    0
    > Dim NoteClass As INTEGER - это точно? я брал код из разных источников...
    NSFNoteGetInfo используется для извлечения разной информации о документе. Какой именно указывается в параметре note_member.
    Размерность данных, на которые указывает value_ptr зависит от note_member. Для флагов это Integer. Выдержка из референса по Notes C API:

    The note flags WORD is one of the members of the note header data . The various bits of the note flags WORD identify different attributes of the note.

    Сишный WORD имеет туже размерность, что нотусовый Integer - 2 б.

    Поэтому декларировать надо:
    Declare Sub NSFNoteGetInfo Lib "nnotes.dll" _
    Alias "NSFNoteGetInfo" ( _
    ByVal note_handle as Long, _
    ByVal note_member as Integer, _
    value as integer)

    Т.к. value передатётся ByRef, в dll передастся указатель на value, что и требует сигнатура
     
  15. lmike

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

    Регистрация:
    27 авг 2008
    Сообщения:
    6.073
    Симпатии:
    299
    TIA еще раз спасибо
     
  16. Мыш

    Мыш Lotus team
    Lotus team

    Регистрация:
    12 фев 2008
    Сообщения:
    1.019
    Симпатии:
    8
    lmike, вот это странно. Мож косячным клиентом каким-то доки создавались? Спецом проверил в 8.5.3 FP1 - если у Body галки "Подписывать" и "Шифровать" не стоят, то Body без всяких SEAL создается... "Field Flags" ваще пустое...
     
  17. lmike

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

    Регистрация:
    27 авг 2008
    Сообщения:
    6.073
    Симпатии:
    299
    вот и меня это обстоятельство высаживает
     
  18. lmike

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

    Регистрация:
    27 авг 2008
    Сообщения:
    6.073
    Симпатии:
    299
    дополню...
    декларе:
    Код (LotusScript):
    Public Const NOTE_FLAG_ABSTRACTED = &H0002

    Declare Public Function NSFNoteSetInfo Lib APIModule Alias "NSFNoteSetInfo" _
    (Byval nHandle As Long, Byval member As Integer, V As Any) As Integer

    Declare Public Function NSFNoteGetInfo Lib APIModule Alias "NSFNoteGetInfo" _
    (Byval hNote As Long, Byval member As Integer, V As Any ) As Integer
    применение:
    Код (LotusScript):
        Dim wks As New NotesUIWorkspace
    Dim ses As New NotesSession
    Dim db As NotesDatabase
    Set db=ses.CurrentDatabase

    Dim doc As NotesDocument
    Set doc=wks.CurrentDocument.Document
    Dim uiview As NotesUIView
    Set uiview=wks.CurrentView
    If uiview Is Nothing Then
    If Not doc Is Nothing Then Call UnTruncate(db, doc)
    Exit Sub
    End If
    Dim NDC As NotesDocumentCollection
    Set NDC=uiview.Documents
    Set doc=NDC.GetFirstDocument
    Do While Not doc Is Nothing
    Call UnTruncate(db, doc)
    Set doc=NDC.GetNextDocument(doc)
    Loop
     
Загрузка...
Похожие Темы - Truncated Document
  1. lmike
    Ответов:
    8
    Просмотров:
    2.656
  2. solovievv
    Ответов:
    5
    Просмотров:
    157
  3. oshmianski
    Ответов:
    3
    Просмотров:
    208
  4. Cheburan
    Ответов:
    8
    Просмотров:
    523
  5. Kizarek86
    Ответов:
    11
    Просмотров:
    796

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