Clear Recent Contacts в почте

Тема в разделе "Lotus - Программирование", создана пользователем R4z0R, 4 окт 2012.

  1. R4z0R

    R4z0R Well-Known Member

    Регистрация:
    6 авг 2009
    Сообщения:
    166
    Симпатии:
    0
    создаю письмо, в нем кнопку с кодом Lotus script:
    Код (Text):
    -------button code-----
    Sub Click(Source As Button)
    Dim nab As NotesDatabase
    Set nab = New notesdatabase("","names.nsf")
    Dim view As NotesView
    Set view = nab.GetView("(Recent Contacts)")
    Dim vc As Notesviewentrycollection
    Set vc = view.allentries
    Call vc.RemoveAll(True)
    Msgbox "Finished. Removed " & vc.Count & " temporary entries from your personal address book."
    End Sub
    '----- end code -----
    отправляю, юзер жмет, но выскакивает ошибка "Object variable not set". Я думаю что у юзера не хватает прав на запуск скрипта. У меня поле Sign or run restricted LotusScript/Java agents: */DOM/ORG
    Что нужно сделать, чтобы сработала кнопка?
     
  2. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.051
    Симпатии:
    146
    Код (LotusScript):
    Sub Click(Source As Button)
    On Error GoTo handler
    Const FuncName = {Click} ' имя агента

    ' Твой код кнопки

    Goto endh

    handler:
    Msgbox FuncName & ": " & Err &", в стр " & Erl & " " & Error$
    Resume endh
    endh:

    End Sub
    Узнаешь в какой строке ошибка.
    Если есть "Object variable not set" значит скрипт запуск сделал, но свалился.
     
  3. R4z0R

    R4z0R Well-Known Member

    Регистрация:
    6 авг 2009
    Сообщения:
    166
    Симпатии:
    0
    создал кнопку с именем 111 и код на ней:
    Код (Text):
    Sub Click(Source As Button)
    On Error Goto handler
    Const FuncName = 111
    Dim nab As NotesDatabase
    Set nab = New notesdatabase("","names.nsf")
    Dim view As NotesView
    Set view = nab.GetView("(Recent Contacts)")
    Dim vc As Notesviewentrycollection
    Set vc = view.allentries
    Call vc.RemoveAll(True)
    Msgbox "Finished. Removed " & vc.Count & " temporary entries from your personal address book."
    Goto endh
    handler:
    Msgbox FuncName & ": " & Err &", в стр " & Erl & " " & Error$
    Resume endh
    endh:
    End Sub
    ругается на строку
    Set vc = view.allentries
    самое интересное - если кнопку нажимет юзер из группы LocalDomainAdmins, то ошибка не появляется
     
  4. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.051
    Симпатии:
    146
    нет доступа к вьюшке "(Recent Contacts)" , поэтому не получил он ее.
     
  5. R4z0R

    R4z0R Well-Known Member

    Регистрация:
    6 авг 2009
    Сообщения:
    166
    Симпатии:
    0
    а как сделать, чтобы юзер нажал на эту кнопку и у него очистились все Недавние контакты? Или как получить доступ к вьюшке?

    Добавлено: есть ещё один скрипт:
    With the introduction of the Recent Contacts view in Lotus Notes 8.x, I've found both myself and fellow Domino administrators wishing that this view was not populated and the function disabled.

    Insert this LotusScript code into a button and email it to your users. Clicking on it will clear each user's Recent Contacts view and prevent repopulation.

    Note: Be sure to create a log database called ClearContactsLog.nsf on your Domino server. Doing this will allow you to keep track of users who clicked the button.
    Код (Text):
    Dim db As New NotesDatabase("","names.nsf")

    Dim logdb As New NotesDatabase("<server name>","ClearContactsLog.nsf")

    Dim view As NotesView

    Dim doc As NotesDocument

    Dim doc2 As NotesDocument

    Dim logdoc As NotesDocument

    Dim session As New NotesSession

    Dim stream As NotesStream

    Dim filename As String

    Dim Response As Integer

    Dim dateTime As New NotesDateTime( "" )

    Dim nam As NotesName

    Dim ErrorMsg As String

    Dim Status As String

    Dim item As NotesItem



    On Error Resume Next



    ' Store the name of the user running this

    Set nam = session.CreateName(session.UserName)



    ' Store the current date and time

    dateTime.LSLocalTime = Now



    ' Create the entry for the log

    Set logdoc = logdb.CreateDocument()

    locdoc.Form = "Log Entry"



    ' Set the view to clear for the local contacts

    Set view = db.GetView("(Recent Contacts)")

    If view.AllEntries.Count > 0 Then

    Set doc = view.GetFirstDocument

    Do While Not (doc Is Nothing)

    Set doc2 = doc

    Set doc = view.GetNextDocument(doc)

    Call doc2.RemovePermanently(True)

    Loop

    End If

    If view.AllEntries.Count > 0 Then

    Response = Msgbox("The view was not cleared successfully!" + Chr(10) + Chr(13) + "Click on OK to return to Notes then contact the Help Desk.",0 + 48,"Error During Clearing of Recent Contacts ")

    ' Store what is to be saved in the log

    ErrorMsg = "Error During Clearing of Recent Contacts "

    Status = "View not cleared"

    End If



    ' Now, add the parameter line to the NOTES.INI

    filename = Left(db.FilePath, Len(db.FilePath) - 14) + "NOTES.INI"

    Set stream = session.CreateStream

    ' Use name of text file as subject

    If Not stream.Open(filename, "ASCII") Then

    Response = Msgbox("The process was aborted!" + Chr(10) + Chr(13) + "Click on OK to return to Notes then contact the Help Desk.",0 + 48,"Error During Clearing of Recent Contacts ")

    ' Store what is to be saved in the log

    ErrorMsg = "Error During Clearing of Recent Contacts "

    Status = "Cannot open INI file"

    Exit Sub

    Else

    ' Write the correct line to the bottom of the NOTES.INI

    stream.WriteText "DisableDPABProcessing=1" + Chr(10) + Chr(13)

    Response = Msgbox("The process has completed." + Chr(10) + Chr(13) + "Click on OK to return to Notes then close Notes and re-open it.",0 + 64,"Clearing of Recent Contacts Completed")

    ' Store what is to be saved in the log

    Status = "Success"

    End If

    ' Write this information to the log file

    Call logdoc.AppendItemValue("A$LOGTIME",Cdat(dateTime.DateOnly + " " + dateTime.TimeOnly))

    Call logdoc.AppendItemValue("A$PROGNAME", "Clearing of Recent Contacts ")

    Call logdoc.AppendItemValue("A$USER", nam.Common)

    Call logdoc.AppendItemValue("A$ACTION", Status)

    If ErrorMsg <> "" Then

    Call logdoc.AppendItemValue("A$ERRMSG", ErrorMsg)

    End If

    Call logdoc.Save(True,False)
    но он тоже не отрабатывает, если жмет на кнопку обычный юзер - ошибка:
     
  6. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.051
    Симпатии:
    146
    А она хоть есть в его names.nsf ?
    И еще один глупый вопрос у него доступ какой к names.nsf ? он по умолчанию вроде manager должен быть.
    у меня 8.5.3 и твой первый код нормально отработал, так что проблема в доступе. Смотрите от него.
    Еще он мог не добавить твою подпись в ECL, поэтому и ошибка.
    Как вариант подписать код кем-то из группы LocalDomainAdmins.
     
  7. R4z0R

    R4z0R Well-Known Member

    Регистрация:
    6 авг 2009
    Сообщения:
    166
    Симпатии:
    0
    names.nsf локальная права на нее Манагер, вьюшка недавних контактов есть, доступ к почтовой базе по-умолчанию Editor, галки включены Create Documents, Delete Documents, Create personal folder/views, Create shared folders/views, Read public documents, Write public documents и Replicate or copy documents. Нет прав на Create private agents, Create LotusSciprt/Java agents.
    Я в группе LocalDomainsAdmins у которой права манагера, создаю кнопку вообще от имени Админа. В первом случае при нажатии ничего не происходит, только ошибку выдает, со вторым скриптом чуть лучше, появляется окно безопасности, в котором даже выбрав "Доверять автору всегда" нет доступа к записи в БД логов и ошибка "The view was not cleared successfully! Click on OK to return to Notes then contact the Help Desk."

    P.S. проверил - на локальную names.nsf у юзера группа LocalDomainAdmins вообще прав не имеет, она там отсутствует - может в этом дело? Добавил ЛокальныхАдминовДомена с правами Манагера - тот же результат
     
  8. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.051
    Симпатии:
    146
    Код (LotusScript):
    Sub Click(Source As Button)
    On Error Goto handler
    Const FuncName = "111"
    Dim nab As NotesDatabase
    Set nab = New notesdatabase("","names.nsf")
    if nab is nothing then Error 5001, "No names.nsf"
    if not nab.isopen then Error 5002, "Can't open names.nsf"
    Dim view As NotesView
    Set view = nab.GetView("(Recent Contacts)")
    if view is nothing then Error 5003, "No view"
    Dim vc As Notesviewentrycollection
    Set vc = view.allentries
    Call vc.RemoveAll(True)
    Msgbox "Finished. Removed " & vc.Count & " temporary entries from your personal address book."
    Goto endh
    handler:
    Msgbox FuncName & ": " & Err &", в стр " & Erl & " " & Error$
    Resume endh
    endh:
    End Sub
    Это должно работать, если проблем с доступом и правами у пользователя нет.
    во втором ("<server name>","ClearContactsLog.nsf") - эта база существует? Доступ у пользователя какой к ней?
    еще мега-кардино-костыльное решение решение: агент на сервере.
    Но что-то у вас там с доступом.
    Попробуйте еще ECL очистить все же. Пусть заново принимает.

    Проверте еще код на другом пользователе, только не на себе.
     
  9. R4z0R

    R4z0R Well-Known Member

    Регистрация:
    6 авг 2009
    Сообщения:
    166
    Симпатии:
    0
    проблема решилась и ответ был во втором посте:
    доступ то есть, но вьюшки самой нет. Не думал что в русском шаблоне вьюхи будут по-русски обзываться. Подправил строку
    Код (Text):
    Set view = nab.GetView("(Recent Contacts)")
    на
    Код (Text):
    Set view = nab.GetView("(Недавние контакты)")
    и сработал скрипт....хотя и выдал что удалено 0 записей (а удалил все).
    Теперь возникла проблема - у части пользователей английский шаблон, у части русский. Как сделать сначала проверку на наличие вьюхи "Recent Contacts" и если её нет, то очистить "Недавние контакты"?
     
  10. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.051
    Симпатии:
    146
    Код (LotusScript):
    Set view = nab.GetView("(Recent Contacts)")
    if view is nothing then
    Set view = nab.GetView("(Недавние контакты)")
    End if
    If view is nothing then Error 5005, "Не найдено представление с контактами."
     
  11. R4z0R

    R4z0R Well-Known Member

    Регистрация:
    6 авг 2009
    Сообщения:
    166
    Симпатии:
    0
    спасибо! Надо идти на курсы по LotusScript, чтобы народ не напрягать по мелочам.
    Тему можно закрыть
     
  12. R4z0R

    R4z0R Well-Known Member

    Регистрация:
    6 авг 2009
    Сообщения:
    166
    Симпатии:
    0
    Как показала практика - юзеры в большинстве случаев игнорируют нажатие кнопки, как с помощью агента принудительно очистить Recent Contacts при открытии юзером Лотуса?
     
  13. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    Воткните его в почтовый шаблон, вызывайте из PostOpen базы.
     
  14. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.051
    Симпатии:
    146
    Можно еще сделать агентом по расписанию и запускать в час ночи каждый день.
     
  15. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    На локальных базах?
     
  16. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.051
    Симпатии:
    146
    да, ты прав) туплю
     
  17. R4z0R

    R4z0R Well-Known Member

    Регистрация:
    6 авг 2009
    Сообщения:
    166
    Симпатии:
    0
    Прошу прощения, я не изучал LS, но жизнь прижала использовать такие методы. Как его воткнуть в почтовый шаблон и как "вызвать"?
     
  18. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.051
    Симпатии:
    146
    Открывай шаблон в дизайнере, ищи Code -> DataBase Script, там событие PostOpen.
    Код (LotusScript):
    Sub Postopen(Source As Notesuidatabase)
    Sub Postopen(Source As Notesuidatabase)
    Dim db As NotesDatabase
    Dim ag As NotesAgent
    Set db = Source.Database

    Set ag = db.Getagent(<имя агента>")
    If Not ag Is Nothing Then Call ag.Run()
    End Sub
    Для агента выстави Trigger : NONE

    Если я ничего не напутал
     
  19. R4z0R

    R4z0R Well-Known Member

    Регистрация:
    6 авг 2009
    Сообщения:
    166
    Симпатии:
    0
    т.е я создаю агент "Test"с кодом:
    Код (Text):
    Dim nab As NotesDatabase
    Set nab = New notesdatabase("","names.nsf")
    Dim view As NotesView
    Set view = nab.GetView("(Recent Contacts)")
    Dim vc As Notesviewentrycollection
    Set vc = view.allentries
    Call vc.RemoveAll(True)
    Msgbox "Finished. Removed " & vc.Count & " temporary entries from your personal address book."
    потом открываю шаблон, Code -> DataBase Script -> PostOpen и между Sub Postopen(Source As Notesuidatabase) и End Sub
    вставляю код
    Код (Text):
        Sub Postopen(Source As Notesuidatabase)
    Dim db As NotesDatabase
    Dim ag As NotesAgent
    Set db = Source.Database

    Set ag = db.Getagent(Test")
    If Not ag Is Nothing Then Call ag.Run()
    и у юзера при открытии очистятся Недавние контакты? Или все же надо делать редизайн всех ПЯ?
     
  20. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.051
    Симпатии:
    146
    По сути да, примерно так. Ты на себе проверь только сначала.
    Код (LotusScript):
    Msgbox "Finished. Removed " & vc.Count & " temporary entries from your personal address book."
    Думаю можно убрать, чтобы вообще пользователи не знали этого.
    Если хочешь всем такое, да, надо каждый ПЯ изменить.
     
Загрузка...
Похожие Темы - Clear Recent Contacts
  1. Cleric-Lviv
    Ответов:
    2
    Просмотров:
    1.885

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