Удаление не нужных полей

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

  1. nila

    nila Гость

    Документы я создаю агентом по форме.
    в Форме оч много полей (3*99) computed when composed. В этих полях мне нужны занчения. и беру их я с профайра. Они должны быть такие оставатся какие они были на момент создания.
    В профайле могут быть заполнены все поля, а может быть много не заполненных. и в этом случае хочу удалять эти поля.
    Но вот что получается.!

    1. Если я их удаляю в Аgente при создании. Делая таким образом
    Call newdoc.ComputeWithForm( False, False )
    a потом удаляю пустые поля.

    Может так и не льзя делать. Оно к стате очень долго работает, и никогда не заканчивает работать агент((. Почему не понятно.
    Но этот вариант все равно не подходит.

    2. Если я удаляю поля в QuerySave , это тоже мусор вопервых долго это будет. во вторых удалять каждый раз когда они сохраняют это наврено не красиво.

    Т. е. когда они редактируют поля снова инициализируются. Мне надо их прибить навсегда
    а то документы получаются по 7 358 bytes.

    Ребят! помогите разобраться
     
  2. Kee_Keekkenen

    Kee_Keekkenen Well-Known Member

    Регистрация:
    5 сен 2006
    Сообщения:
    616
    Симпатии:
    4
    у меня тоже есть такое же некрасивое решение..
    только поля удаляю на queryclose, если документ был сохранен.. удаляется иногда более 1500 полей за пару секунд..
    я что-то сомневаюсь, что на querysave имеет смысл поля удалять, потому что это бессмысленно - удалил поля, затем выполняется save по форме и поля только что удаленные снова на месте.. илия ошибаюсь ?
     
  3. nila

    nila Гость

    Да все правильно безумные эти поля!!!
    Да, точно! На QueryClose самое лучшее решение!

    Спасибо, тож буду так делать.

    Не знаешь почему Computedwhisform в агенте чето тормозит, то есть вообще агент не заканчивает работать.

    И база безумно огромная получается. вот документ 7 358 bytes это же совсем никуда не годится.

    Или я что то не так делаю, ну когда поудаляю поля поменьше станет но все равно.
     
  4. Kee_Keekkenen

    Kee_Keekkenen Well-Known Member

    Регистрация:
    5 сен 2006
    Сообщения:
    616
    Симпатии:
    4
    если агент просто переносит значения полей, то ComputeWithForm не нужен..
    для чего у тебя ComputeWithForm используется ?
     
  5. Medevic

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

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Удалять в QueryClose не самое лучшее решение. По идее документ успевает попасть в представления, а значит будет индексироваться целых 2 раза. Один раз после сохранения(со всеми полями), другой - после закрытия документа(с нужными полями). Это не говоря о том, что в момент закрытия(и сохранения) кто-то другой может редактировать документ и получится конфликт.
    Если уж и удалять, то в QuerySave.
    А лучше сделать агент, который ночью удаляет такие поля после n-месяцев неиспользования документа.
     
  6. K-Fire

    K-Fire Гость

    А сколько документов в базе? Для того чтобы база была безумно огромная, их должно быть явно больше 500к.
     
  7. nila

    nila Гость

    Агент создает документы. а поля которые в форме Computed when composed. В которых прописано брать значения с профайла. Вот эти поля мне и нужны чтоб они автоматически рефрешнулиьс спомошью ComputeWithForm. когда агент их создает.
    Чтоб потом когда человек открывал документ они уже были инициализированы. и больше не менялись.
    Вот
    и что с этим ComputeWithForm не так чего он циклится этот агент с ним.

    Ага а в QuerySave можно ли Source.Document.Save (True, True) писать. так как после удаления надо что б оно сохранялось. Что б я знала...

    Агент вообще наверное лучше всего! Так как при сохранении. это будет оч долго. и каждый раз оно инициализируется когда они редактируют и снова удаляется при сохранении.
     
  8. morpheus

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

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
    OMG вечный двигатель :huh:
     
  9. nila

    nila Гость

    Да документов будет 25 тысяч. хранится будет за два года, каждый месяц около тысячи доков создается.

    Меня волнует этот муссор. документы даже после удаления не нужных полей по 5 219 bytes. (это в лучшем случае).
     
  10. Medevic

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

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Можно. Но тебе лучше проставить признак notesItem.SaveToDisk в цикле.


    Ага.

    Неа. :huh:
     
  11. nila

    nila Гость

    А почему в агенте зацикливается вот это. и агент никогда не заканчивается(
    success = doc.ComputeWithForm( False, False )

    Мне нужно что б поля все инициализировались. Чтоб не заполнять поля в агенте. полей очень много.
     
  12. Omh

    Omh Lotus team
    Lotus team

    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    Как раз заполняй лучше в агенте, а ComputeWithForm в печЪ.
     
  13. nila

    nila Гость

    а почему в печь
    Он что голимо работает, да?
    Вот поставила в ввиде кнопку и пробую. на малом кол-ве доков ок сработало.
    Взяла 2 тысячи, вот сижу жду когда оно все отработает.
    что то с ним не так, сталкивался?
     
  14. Medevic

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

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Может просто слишком долго работает. И зацикливается в другом месте. Дебаггером пробовала?
     
  15. K-Fire

    K-Fire Гость


    Давайте начнем с самого начала. Вы в 1 сообщении пишете что хотите удалять поля потому что их слишком много (хотя 300 полей в форме это немного).
    На вопрос зачем вам вообще париться с удалением полей, если я правильно понял конечно, вы пишете что боитесь что база будет слишком большая.

    В результате выясняется что документов будет всего 25к. Берем оценку сверху, документ=10к, документов=50тыс. Получаем размер документов 500 мегабайт. Если с вьюшками не переборщить, индексы допустим, еще 500 мегабайт. Плюс 20% на всякие стабы, и остальную непонятную фигню что лотус хранит в базе, получаем общий размер базы максимум 1.5 гигабайта.

    На таких размерах ничего у вас тормозить не будет. Следовательно вашу задачу, которую вы пытаетесь уже какой день решать, решать просто не нужно.
     
  16. nila

    nila Гость

    Да просто начальник борится за место на диске. И все спрашивает чего такая база большая получается.
    Спасибо за советы ребята! Очень благодарна форуму. Вообщем так как начальство просит уменьшить базу. Теперь поля удаляю агентом, в том момент когд документы уже не активные.

    Я смотрю как то у людей не такие размеры баз получаются. Вот я и думала может я что то не то делаю и пложу муссор. Вообщем виды я так понимаю очень много дают на увеличения размера базы.
    Спасибо.

    Да Medevic, так я и не дождалась, когда оно отработает. а дебагером все нормально.
    Наверно все там нормально просто очень долгоа работает.)) непонятно, да ладно) в печь его этот Computewhisform! :)
     
Загрузка...

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