Softdeletions и документы типа ответ

Тема в разделе "Lotus - Программирование", создана пользователем -, 26 ноя 2009.

  1. Гость

    При удалении документа ответ он не отображается в карзине вчем может быть причина?
     
  2. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    Если документ "жестко" удалить, он летит в тартарары мимо корзины. Какой код удаления?
     
  3. Гость

    Код (Text):
    Sub Querydocumentdelete(Source As Notesuidatabase, Continue As Variant)
    On Error Goto ERRORHANDLER
    Dim db As NotesDatabase
    Set db = Source.Database
    Dim strMsg As String
    Dim workspace As New NotesUIWorkspace
    Dim noteid As String
    Dim rc As NotesDocumentCollection
    Dim dc As NotesDocumentCollection
    Set dc = Source.Documents
    Dim doc As NotesDocument

    Dim g As Integer
    For g=1 To Source.Documents.Count
    Set doc = Source.Documents.GetNthDocument( g )
    If( doc.IsUIDocOpen ) Then
    noteid = doc.NoteID
    Delete doc
    Set doc = Source.Database.GetDocumentByID( noteid )
    End If
    Call doc.Remove( True )
    Next
    Continue = False
    Call workspace.ViewRefresh
    EXITSCRIPT:
    Exit Sub
    ERRORHANDLER:
    Call ErrorMessage("Database Script: QueryDocumentdelete")
    Resume EXITSCRIPT
    End Sub
    Добавлено: Все разобрался в свойствах View надо снять галочку Отбражать ответные документы ввиде иерархии
    <table valign="top" style='margin:0;width:100%;border:1px dashed red;'>[tr]<td align='middle' bgcolor='#ff6060' valign='top' width='1%'>
    <FONT color='#ffffff' size='+3'> ! </font>
    </td><td align="midle" valign='top' style='background:#fff;'>Не забываем про теги кода</td>[/tr]</table>
     
  4. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    Ник0лай
    Вместо
    Код (Text):
    For g=1 To Source.Documents.Count
    Set doc = Source.Documents.GetNthDocument( g )
    ...
    Next
    привыкайте пользовать
    Код (Text):
    Set doc = docs.GetFirstDocument
    Do Until doc Is Nothing
    ....
    Set doc = docs.GetNextDocument(doc)
    Loop
    (в контексте удаления документов в представлении, кмк, лучше их перебирать от конца к началу).
    Удаление родительских документов не означает автоматического удаления дочерних, нужно перебирать коллекцию респонсов, причем рекурсивно. Похоже, Вы удаляете родителей, а отклики болтаются в базе беспризорниками.

    P.S. Ещё одна мысль — событие Querydocumentdelete используют для отмены удаления (путём Continue = False - для всех, удаления из коллекции Source.Documents - выборочно) или для удаления связанных документов. У Вас же в коде присутствует doc.Remove(True) для удаляемого документа. Экспериментов не проводил, но по логике документ удаляется дважды, соответственно один раз в корзину, второй - из корзины, т.е. совсем.
     
  5. hosm

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    Я бы советовала получать сразу следующий документ коллекции:
    Код (Text):
    Dim nextDoc as NotesDocument
    Set doc = docs.GetFirstDocument
    Do Until doc Is Nothing
    Set nextDoc = docs.GetNextDocument(doc)
    ....
    Set doc = nextDoc
    Loop
     
  6. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    Ну, если нужно удалять документы из коллекции, то разумеется. Только я в Querydocumentdelete перебираю доки "снизу вверх", чтобы в иерархических вьюхах сперва обработать/удалить отклики, а потом родителей. Натыкался на грабли - удаляю док и его отклики и nextDoc указывает в пустоту.
    Код (Text):
    Dim prevDoc as NotesDocument
    Set doc = docs.GetLastDocument
    Do Until doc Is Nothing
    Set prevDoc = docs.GetPrevDocument(doc)
    ...
    Set doc = prevDoc
    Loop
     
Загрузка...

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