Удалить дубли документов

Тема в разделе "Lotus - Программирование", создана пользователем dimat, 20 июл 2010.

  1. dimat

    dimat Lotus team
    Lotus team

    Регистрация:
    31 июл 2008
    Сообщения:
    518
    Симпатии:
    0
    Всем привет, накосячил с агентом. Результат: продублировались все документы в базе, как это исправить, тоесть удалить все дубли?
     
  2. Medevic

    Medevic Что это ? :)
    Lotus team

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Легко вычислить по автору и дате создания.
     
  3. dimat

    dimat Lotus team
    Lotus team

    Регистрация:
    31 июл 2008
    Сообщения:
    518
    Симпатии:
    0
    Дубли создались методом NotesDocument.CopyToDatabase(NotesDatabase)
    Поэтому дата создания у них одинаковая
     
  4. Medevic

    Medevic Что это ? :)
    Lotus team

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Я про это и говорю. Поиском или через представление по дате создания легко найти все дубли.
     
  5. dimat

    dimat Lotus team
    Lotus team

    Регистрация:
    31 июл 2008
    Сообщения:
    518
    Симпатии:
    0
    Что то не могу догнать как это?
     
  6. alik86

    alik86 Lotus team
    Lotus team

    Регистрация:
    20 ноя 2008
    Сообщения:
    465
    Симпатии:
    0
    Created, Modified, Modified by...
    Добавлено: GetModifiedDocuments method, @Created, @Modified и др.
     
  7. dimat

    dimat Lotus team
    Lotus team

    Регистрация:
    31 июл 2008
    Сообщения:
    518
    Симпатии:
    0
    Сделал вью по всем документам с категоризированой колонкой @text(@Created)+" - "+@DocChildren.
    Получилось на некоторые даты-время по несколько десятов документов причем разных форм.
     
  8. Medevic

    Medevic Что это ? :)
    Lotus team

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Даты могут отличаться на секунды/минуты.
    Надо брать документы за период.
    SELECT (@Created > [Дата - 5мин]) & (@Created < [Дата + 5мин])
     
  9. alik86

    alik86 Lotus team
    Lotus team

    Регистрация:
    20 ноя 2008
    Сообщения:
    465
    Симпатии:
    0
    Ну так может по несколько десятов документов и было создано. А нужную форму укажите в формуле отбора вида.
     
  10. dimat

    dimat Lotus team
    Lotus team

    Регистрация:
    31 июл 2008
    Сообщения:
    518
    Симпатии:
    0
    11212.png
    Код (Text):
    Set dc=dbd.AllDocuments
    Call dbd.CreateCopy("",DirPath(0)+dbd.FileName)
    Set doc=dc.GetFirstDocument    
    While Not doc Is Nothing
    Call doc.CopyToDatabase(dbd)
    Set doc=dc.GetNextDocument(doc)
    Wend
    Для каждого документа по 1 копии
     
  11. dimat

    dimat Lotus team
    Lotus team

    Регистрация:
    31 июл 2008
    Сообщения:
    518
    Симпатии:
    0
    Может как то в цикле все документы сравнивать?
    Цикл по всем дкументам текущий сравниваем со следущими, если находится идентичный то удаляем его.
    ТОлько вот как сравнивать?

    UPD: По размеру?

    Код (Text):
    Set dc=db.AllDocuments

    Set docc=dc.GetFirstDocument
    While Not docc Is Nothing
    Set docs=dc.GetNextDocument(docc)      
    While Not docs Is Nothing
    If docc.Size=docs.Size Then
    set tmpdoc=dc.GetPreDocument(docs)
    Call docs.remove(true)
    set docs=tmpdoc
    End If
    Set docs=dc.GetNextDocument(docs)
    Wend
    Set docc=dc.GetNextDocument(docc)
    Wend
    Получится так сделать?
     
  12. alik86

    alik86 Lotus team
    Lotus team

    Регистрация:
    20 ноя 2008
    Сообщения:
    465
    Симпатии:
    0
    Что-то я так и не понял, чем не покатил поиск по created, modified?
    В принципе у документов-копий created и modified должны совпадать до секунды - можно поплясать от этого.
     
  13. dimat

    dimat Lotus team
    Lotus team

    Регистрация:
    31 июл 2008
    Сообщения:
    518
    Симпатии:
    0
    Тоесть искать дубли точно также как я написал выше по размеру, только по дате создания и изменения?
     
  14. alik86

    alik86 Lotus team
    Lotus team

    Регистрация:
    20 ноя 2008
    Сообщения:
    465
    Симпатии:
    0
    Создайте вид с формулой отбора SELECT ((Form = "Forma") & (@Created = @Modified)), он выдаст вам документы по нужной форме, которые были скопированы программно.
    В общем случае при создании документа "ручками" created - это момент создания, а modified - момент сохранения, т.е. "modified - created = время заполнения полей документа". При программном копировании для документа эти моменты совпадают. Как-то так.
    P.S. Только не забывайте про "7 раз отмерь - один раз отрежь" - перепроверьте, ибо я выдал лишь своё предположение. :ya_lamo:
     
  15. dimat

    dimat Lotus team
    Lotus team

    Регистрация:
    31 июл 2008
    Сообщения:
    518
    Симпатии:
    0
    Проверил, не то, всего в бд было около 30000 документов, сейчас около 60000. тоесть ровно в 2 раза больше.
    Сделал представление по указанной выше формуле, по этой форме было примерно 1300 доков сейчас по ней 2600, отображается только 20, какие еще есть варианты?


    Юзеры скоро загрызут.... :ya_lamo:
     
  16. Darker

    Darker Гость

    Отсортируй представление по общему параметру, и удаляй каждый первый(второй) документ
     
  17. dimat

    dimat Lotus team
    Lotus team

    Регистрация:
    31 июл 2008
    Сообщения:
    518
    Симпатии:
    0
     
  18. Darker

    Darker Гость

    Код (Text):
    lead=true
    set doc=view.getfirstdocument
    while not doc is nothing
    lead=not lead
    if lead then doc.ToRemove="1":call doc.save(true,False)
    set doc=view.getnextdocument(doc)
    wend

    set col=db.Search({ToRemove="1"},Nothing,0)
    col.RemoveAll(1)
     
  19. alik86

    alik86 Lotus team
    Lotus team

    Регистрация:
    20 ноя 2008
    Сообщения:
    465
    Симпатии:
    0
    Зато наверняка усвоите, что НЕЛЬЗЯ экспериментировать на рабочей базе!
    Высказывание: Последовательность "эксперимент -> *цензура*..ц -> чтение документации" даже из толковых админов/программеров тяжело выбить.
     
  20. dimat

    dimat Lotus team
    Lotus team

    Регистрация:
    31 июл 2008
    Сообщения:
    518
    Симпатии:
    0
    Полностью согласен, что тяжело выбить:), сколько раз уже зарекался не экспериментировать на раб базе
     
Загрузка...

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