Репликация бд на локал

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

  1. susinmn

    susinmn Well-Known Member

    Регистрация:
    16 окт 2007
    Сообщения:
    530
    Симпатии:
    8
    Вот суть проблемы: есть база на сервере(архивируется, т.е. *согласованные* документы копирются в архивную бд, а в текущей удаляются)
    Так вот некоторый пользователь, скажем год назад, скопировал бд на локал и сегодня еще разок реплицировал) так вот докуенты, которые ушли в архив восстановились?
    Как бороться с *восстановлением* документов?))
     
  2. turumbay

    Регистрация:
    13 мар 2009
    Сообщения:
    625
    Симпатии:
    2
    Подкрутить время жизни стабов?
    цифра(кол-во дней) справа от "remove documents not modified ..." на второй закладке в настроках репликации.
     
  3. susinmn

    susinmn Well-Known Member

    Регистрация:
    16 окт 2007
    Сообщения:
    530
    Симпатии:
    8
    допустим поставить год...но нет уверенности, что пользователь реплику через год может запустить(
    если поставить цисло 10^n, n=много - это ни как не скажется на работе бд?

    И еще такой момент: как получить время добавления документа в бд(Added, на 1 закладке свойства документа)?
     
  4. hosm

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    Вариант через ж, но можно попробовать вычислить время из DXL документа, пример:
    <addedtofile><datetime>20090326T180410,39+02</datetime></addedtofile>
     
  5. TIA

    TIA :-)
    Lotus team

    Регистрация:
    15 май 2009
    Сообщения:
    790
    Симпатии:
    0
    Через Notes C API. На С++ выглядит это так.

    Код (Text):
    TIMEDATE Date;
    NSFNoteGetInfo(doc.Handle(), _NOTE_ADDED_TO_FILE, &Date);
     
  6. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    А если формулу репликации написать с учётом формулы отбора документов для архивирования? Т.е. запретить реплицировать документы, которые теоретически должны быть в архиве. Ну, это если архивирование не вручную, а агентом по расписанию.
     
  7. susinmn

    susinmn Well-Known Member

    Регистрация:
    16 окт 2007
    Сообщения:
    530
    Симпатии:
    8
    TIA, а чему равняется const _NOTE_ADDED_TO_FILE?)
     
  8. turumbay

    Регистрация:
    13 мар 2009
    Сообщения:
    625
    Симпатии:
    2
  9. susinmn

    susinmn Well-Known Member

    Регистрация:
    16 окт 2007
    Сообщения:
    530
    Симпатии:
    8
    скрипт вешаю на кнопку в документе
    в (Declarations) пишем

    Код (Text):
    Private Type timeDateTYPE
    innards(0 To 1) As Long
    End Type
    Declare Private Function W32NSFNoteGetInfo Lib "nnotes" Alias "NSFNoteGetInfo" ( _
    Byval hNote As Long, _
    Byval noteMember As Integer, _
    retValu As Any _
    ) As Integer
    Declare Private Function W32ConvertTIMEDATEToText Lib "nnotes" Alias "ConvertTIMEDATEToText" ( _
    Byval intlFmt As Long, _
    Byval txtFmt As Long, _
    timeDate As timeDateTYPE, _
    Byval retBuff As Lmbcs String, _
    Byval maxBuffLen As Integer, _
    actBuffLen As Integer _
    ) As Integer

    Const BUFF_LENGTH% = 32 * 3
    Const ERROR_MASK = &H3fff '// see globerr.h
    Const BUFFER_SIZE% = 255
    Const UNKOWN_ERR_DESC$ = "unknown error"
    Dim intLength As Integer
    на клик вешаем
    Код (Text):
    Sub Click(Source As Button)
    Dim ws As New NotesUIWorkSpace 
    Set uidoc = ws.CurrentDocument
    Set cdoc = uidoc.Document

    Dim tdStruct As timeDateTYPE
    Dim intStringLength As Integer
    Dim strErrTxt As String
    Dim strRetBuff As String * BUFF_LENGTH

    hNote& = cdoc.HANDLE
    intRetCode% = W32NSFNoteGetInfo(hNote& , 13, tdStruct) 
    intRetCode% = W32ConvertTIMEDATEToText(0&, 0&, tdStruct, strRetBuff$, BUFF_LENGTH, intStringLength%)   
    Set pndtAddedInThisFile = New NotesDateTime(Left$(strRetBuff$, intStringLength%))  
    End Sub
    Вопрос: можно ли без uidoc получать cdoc.HANDLE? Хочу в агенте получить коллекцию

    P.s.: Извиняюсь, туплю. Вопрос мой можно закрыть))
     
  10. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    susinmn
    Судя по коду
    Код (Text):
    Set cdoc = uidoc.Document
    ...
    hNote& = cdoc.HANDLE
    cdoc - NotesDocument. Его необязательно получать из uidoc'а. Можно так
    set cdoc = db.GetDocumentByUNID("YourUNID")
    Оговорюсь - сам не пробовал, свойство HANDLE у NotesDocument для меня новость.
     
  11. TIA

    TIA :-)
    Lotus team

    Регистрация:
    15 май 2009
    Сообщения:
    790
    Симпатии:
    0
    В агенте по выделенным документам, коллекцию выделенных галками получают через
    NotesSession.CurrentDatabase.UnprocessedDocuments

    Далее
    NotesDocumentCollection.GetFirstDocument и NotesDocumentCollection.GetNextDocument

    Получить текущий документ:

    NotesSession.DocumentContext
     
  12. lmike

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

    Регистрация:
    27 авг 2008
    Сообщения:
    6.081
    Симпатии:
    300
    воще, есть библиотека (Константин публиковал) - не совсем по теме...
    http://www.notesnet.ru/library/docid/A81F99
    там много чего интересного (в т.ч. - как писать кроссплатформенные вызовы)
     
Загрузка...

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