Запретить удаление правил

azat20

Well-Known Member
22.07.2008
244
0
31
Казань
#1
Добрый день! Все сталкивались с тем, что правила продолжают работать после их удаления во включенном состоянии. Я решил написать что-то вроде того, чтобы на Querydocumentdelete если правило включено (Enable=1), поле Enable сбрасывалось на 0, сохранялось, а далее правило удалялось. Но почему то в почтовом шаблоне написанные мною строки в данном методе не отрабатывают... Никто не знает, как можно решить описанную проблему?
 

nvyush

Well-Known Member
Lotus team
22.04.2009
2 317
0
48
Подмосковье
#2
КМК, лучше в данном случае выводить пользователю соответствующее сообщение и отменять удаление (Continue = False).
 

Akupaka

А че я?.. О.о
04.10.2007
3 360
2
34
Kiev, Ukraine
#3
Я не сталкивался...

Но почему то в почтовом шаблоне написанные мною строки в данном методе не отрабатывают
А ты этим шаблоном базу накрыл потом?
Открой в дизайнере накрытую базу и поищи свой код. Если есть, но не работает, то перезагрузи нотес, если все-равно не работает, попробуй убить файл cache.ndk.
Если все-равно не работает, то надо смотреть, может где-то не так написал...
 

VladSh

начинающий
Lotus team
11.12.2009
1 248
2
Киев (Русь)
#4
Azat
Багов, связанных с правилами, море. Особенно с удалением.
Всё дело в том, что правила-документы - это интерфейсная штука, на самом деле сами "правила" хранятся в специальном профайле.
С удалением были баги в том, что при удалении не пересчитывался порядок следования, для этого где-то на IBM гулял специальный агент, который это (и ещё некоторые траблы) корректировал.

Если Вы хотите запретить/изменить удаление, то попробуйте разобраться с этими профайлами и/или с QueryDocumentDelete почтовой базы.
 
K

Klido

Гость
#5
лучше в данном случае выводить пользователю соответствующее сообщение и отменять удаление (Continue = False).
:)
кнопка ВЫКЛ юзеру доступна - пусть делают все как надо...

при удалении не пересчитывался порядок следования
ну там на выключении/удалении можно посмотреть что происходит... если выключить и удалить - в целом все ОК
 

divankin

Senjor developer
13.08.2009
182
0
Москва
#6
Как уже правильно сказали, роутер работает не по тем правилам, которые в документах, а по тем, которые хранятся в профиле CalendarProfile.
В шестом дизайне ExtMailR6 версии 6.5.4 есть код, который обрабатывает удаление правила и удаляет его из профиля. Я думаю и в более поздних версиях почтового шаблона тоже есть.

Скорей всего проблема в другом. В профиле каждому правилу соответствует поле $FilterFormula_X, где X - номер правила в папке Rules. Этот номер хранится в поле OrderNum.
В библиотеке Rules есть функция CompactMailRules, которая делает следующее: удаляет все правила в профиле, выдает номера всем правилам в папке и копирует все активные правила в профиль.
Эта функция вызывается при создании правила, при изменении порядка, при копипасте. Номера выдаются начиная с 1.
Однако есть секретной правило, по которому оповещения попадают в MiniView. У этого правила номер 0. И по неизвестным мне причинам иногда обычное правило копируется на место правила номер 0.
В результате при выключении правила, оно фактически остается в профиле и продолжает действовать.

Как понять, что это ваш случай: поставить Ytria (погуглите), открыть в SkanEz почтовую базу, открыть CalendarProfile, посмотреть, что хранится в поле $FilterFormula_0. Если не пустота и нет слова $MiniView, то удаленное правило прописалось здесь.

Что делать? Можно в CompactMailRules добавить перерасчет правила номер 0. Можно научить тех.поддержку передергивать его. В последнем случае нужно просто открыть Сервис-Параметры и на вкладке Календарь и задачи->Вывод выключить и включить галочку "Помещать документы календаря и планирования в специальное мини-представление 'Новые извещения' для обработки". (В вашем шаблоне все может называться немного по-другому, ищете поле Use_CalendarRule
 

azat20

Well-Known Member
22.07.2008
244
0
31
Казань
#7
КМК, лучше в данном случае выводить пользователю соответствующее сообщение и отменять удаление (Continue = False).
я хочу выводить сообщение, и ждать ответа от пользователя, если говорит удалить, то отключить правило и удалить его. Дело в том, что в Querydocumentdelete даже это окно не отображается!

Код:
Set tempcol=source.Documents
Set tempdoc=tempcol.GetFirstDocument
If Not (tempdoc Is Nothing) Then
If tempdoc.GetFirstItem("form").text="Mailrule" Then
If tempdoc.GetFirstItem("Enable").text="1" Then
If 1=ws.Prompt(2,"Ошибка удаления правила","Невозможно удалить включенное правило. Отключить его, а затем удалить?") Then
'отключаем и удаляем
Call tempdoc.ReplaceItemValue("Enable","0")
Call tempdoc.Save(True,False)
Else
Exit Sub
End If
End If
End If
End If

Я не сталкивался...
Вам очень повезло значит. У нас пользователи никак данную фичу не могут запомнить...

А ты этим шаблоном базу накрыл потом?
Сорри, тут не шаблон. Я сразу изменения в своей почтовой базе, в которой дизайн не обновляется.

Всё дело в том, что правила-документы - это интерфейсная штука, на самом деле сами "правила" хранятся в специальном профайле.Если Вы хотите запретить/изменить удаление, то попробуйте разобраться с этими профайлами и/или с QueryDocumentDelete почтовой базы.
Но ведь сами правила в виде документов хранятся в почтовой базе. С querydocumentdelete я и хочу разобраться... В других базах все работает.
 

azat20

Well-Known Member
22.07.2008
244
0
31
Казань
#9
Всем спасибо за ответы! Второй раз уже сталкиваюсь с этой еще одной неприятной фичей... Код правильный, и работает верно, но так как дизайнер был запущен с это базой, querydocumentdelete не отрабатывался... Пора бы уж запомнить ;)