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

  • Автор темы nila
  • Дата начала
N

nila

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

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

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

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

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

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

Kee_Keekkenen

Well-known member
05.09.2006
639
4
#2
у меня тоже есть такое же некрасивое решение..
только поля удаляю на queryclose, если документ был сохранен.. удаляется иногда более 1500 полей за пару секунд..
я что-то сомневаюсь, что на querysave имеет смысл поля удалять, потому что это бессмысленно - удалил поля, затем выполняется save по форме и поля только что удаленные снова на месте.. илия ошибаюсь ?
 
N

nila

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

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

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

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

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

Kee_Keekkenen

Well-known member
05.09.2006
639
4
#4
если агент просто переносит значения полей, то ComputeWithForm не нужен..
для чего у тебя ComputeWithForm используется ?
 

Medevic

Что это ? :)
Lotus team
10.12.2004
3 346
1
#5
Удалять в QueryClose не самое лучшее решение. По идее документ успевает попасть в представления, а значит будет индексироваться целых 2 раза. Один раз после сохранения(со всеми полями), другой - после закрытия документа(с нужными полями). Это не говоря о том, что в момент закрытия(и сохранения) кто-то другой может редактировать документ и получится конфликт.
Если уж и удалять, то в QuerySave.
А лучше сделать агент, который ночью удаляет такие поля после n-месяцев неиспользования документа.
 
K

K-Fire

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

nila

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

Удалять в QueryClose не самое лучшее решение. По идее документ успевает попасть в представления, а значит будет индексироваться целых 2 раза. Один раз после сохранения(со всеми полями), другой - после закрытия документа(с нужными полями). Это не говоря о том, что в момент закрытия(и сохранения) кто-то другой может редактировать документ и получится конфликт.
Если уж и удалять, то в QuerySave.
А лучше сделать агент, который ночью удаляет такие поля после n-месяцев неиспользования документа.
Ага а в QuerySave можно ли Source.Document.Save (True, True) писать. так как после удаления надо что б оно сохранялось. Что б я знала...

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

nila

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

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

Medevic

Что это ? :)
Lotus team
10.12.2004
3 346
1
#10
Ага а в QuerySave можно ли Source.Document.Save (True, True) писать. так как после удаления надо что б оно сохранялось. Что б я знала...
Можно. Но тебе лучше проставить признак notesItem.SaveToDisk в цикле.


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

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

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

Omh

Lotus team
04.07.2007
2 210
1
#12
Как раз заполняй лучше в агенте, а ComputeWithForm в печЪ.
 
N
#13
а почему в печь
Он что голимо работает, да?
Вот поставила в ввиде кнопку и пробую. на малом кол-ве доков ок сработало.
Взяла 2 тысячи, вот сижу жду когда оно все отработает.
что то с ним не так, сталкивался?
 

Medevic

Что это ? :)
Lotus team
10.12.2004
3 346
1
#14
А почему в агенте зацикливается вот это. и агент никогда не заканчивается(
success = doc.ComputeWithForm( False, False )
Может просто слишком долго работает. И зацикливается в другом месте. Дебаггером пробовала?
 
K

K-Fire

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

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

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

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

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

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

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