Изменить автоматически Location и Connection

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

Статус темы:
Закрыта.
  1. oleg7

    oleg7 Гость

    Мне необходимо отослать письмо группе пользователей, в этом письме должна быть кнопка, при нажатии на которую у пользователя должен изменитьсяв Location: Home/mail server и Domen, т.е. главный почтовый сервер и домен. А также в Connection создать новое подключение к серверу
    нашел на форуме, чуть добавил:
    Код (Text):
    Sub Click(Source As Button)
    ' System variables -> DO NOT CHANGE!!!!
    Const VIEW_LOCATION_NAME = "($Locations)"
    Const VIEW_CONNECTION_NAME = "($Connections)"

    'Application variables -> EDIT THESE ONES!!!!
    Const OLD_DOMAIN_NAME = "1"  ' This is the value of your old domain
    Const NEW_DOMAIN_NAME = "2" ' This is the value of your new domai  
    Dim session As New NotesSession
    Dim dbNab As NotesDatabase
    Dim view As NotesView
    Dim note As NotesDocument
    Dim sNamesLine As String
    Dim nPos As Integer
    Dim sDomainValue As String
    Dim bNeedsUpdate As Integer
    Dim bLocationModified As Integer

    On Error Resume Next

    ' first, get the local NAB
    sNamesLine = session.GetEnvironmentValue("names",True)

    nPos = Instr(sNamesLine, ",")
    If nPos > 0 Then
    sNamesLine = Left$(sNamesLine, nPos-1)
    Else
    sNamesLine = "names.nsf"
    End If

    Set dbNab = New NotesDatabase( "",sNamesLine )

    If Not(dbNab.isOpen) Then
    Messagebox("Не удалось найти Вашу Адресную книгу.")
    Exit Sub
    End If

    ' update all location documents
    Set view = dbNab.GetView(VIEW_LOCATION_NAME)
    If (view Is Nothing) Then
    Messagebox("Ваша Адресная книга отсутствует.")
    Exit Sub
    End If

    Set note = view.GetFirstDocument

    While Not(note Is Nothing)
    sDomainValue = note.Domain(0)
    If Lcase(sDomainValue) = Lcase(OLD_DOMAIN_NAME) Then
    note.Domain = NEW_DOMAIN_NAME
    note.MailServer="Новый сервер"
    Call note.save(True,False)
    bLocationModified = True             
    End If
    Set note = view.GetNextDocument(note)
    Wend

    If (bLocationModified) Then Messagebox("Вы должны переоткрыть Notes для того, чтобы изменения вступили в силу.")

    ' update all connection documents
    Set view = dbNab.GetView(VIEW_CONNECTION_NAME)
    If (view Is Nothing) Then
    Messagebox("Ваша Адресная книга отсутствует.")
    Exit Sub
    End If

    Set note = view.GetFirstDocument

    While Not(note Is Nothing)
    bNeedsUpdate = False         
    sDomainValue = note.SourceDomain(0)
    If Lcase(sDomainValue) = Lcase(OLD_DOMAIN_NAME) Then
    note.SourceDomain = NEW_DOMAIN_NAME
    note.MailServer="Новый сервер"
    bNeedsUpdate = True

    End If
    sDomainValue = note.DestinationDomain(0)
    If Lcase(sDomainValue) = Lcase(OLD_DOMAIN_NAME) Then
    note.SourceDomain = NEW_DOMAIN_NAME
    note.MailServer="Новый сервер"
    bNeedsUpdate = True
    End If
    If (bNeedsUpdate) Then Call note.save(True, False)
    Set note = view.GetNextDocument(note)
    Wend
    End Sub
    Location заполняется верно, а вот как создать новый Connection не могу понять. Помогите пожалуйста
     
  2. Medevic

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

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Это обычный документ. Создается так же.
     
  3. oleg7

    oleg7 Гость

    спасибо

    Добавлено:
    Код (Text):
                Dim ws As NotesUIWorkspace
    Set doc = db.CreateDocument
    note.form = "Connection"
    note.Destination="сервер"
    note.OptionalNetworkAddress="адрес"
    Call note.Save( True, True )
    не создается. Скажите, что делаю не так?
     
  4. hosm

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    doc, db, note. вы определитесь, что вам надо создавать, сохранять и изменять...
    И ws - зачем надо
     
  5. Medevic

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

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Type = "Connection"
    Посмотри значения полей в существующем документе и сделай такие же.
     
  6. oleg7

    oleg7 Гость

    Делаю так:
    Код (Text):
            Set note = db.CreateDocument
    note.form = "Connection"
    note.DisplayName="название"
    note.Destination="сервер"
    note.OptionalNetworkAddress="адрес"
    Call note.Save( True, True )
    но у меня вместо добавления нового документа, просто изменяется существующий. Что не так?
     
  7. Medevic

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

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Такого не может быть.

    Добавлено: Формула отбора в представлении - Type = "Connection".
    У тебя в коде нигде не проставляется. Поэтому созданные документы не видно.
     
  8. TIA

    TIA :-)
    Lotus team

    Регистрация:
    15 май 2009
    Сообщения:
    790
    Симпатии:
    0
    oleg7
    Вот код. А ты даже не посмотрел на значения полей в существующем Connection. В частности, поле Form другое.

    Код (Text):
    Sub AddOneConnection(namedb As NotesDatabase, Server As String, DNS As String )
    On Error Goto ErrHnd

    Static view As NotesView
    Dim doc As NotesDocument
    Dim ServerNN As NotesName

    If view Is Nothing Then
    Set view=namedb.GetView("Connections") 
    Else
    If namedb.ReplicaID <> view.Parent.ReplicaID Then Set view=namedb.GetView("Connections")
    End If 
    If view Is Nothing Then Error 1001, "Не найден вид 'Connections' в адресной книге '" & namedb.FilePath & "'"

    Set ServerNN = New NotesName( Server )

    '    *******проверяем на наличие и создаем подключение
    Set doc=view.GetDocumentByKey( ServerNN.Abbreviated )
    If Not doc Is Nothing Then
    'Подключение к серверу обнаружено. Производится модификация...
    Else
    'Подключение к серверу не обнаружено. Создание нового....
    Set doc = namedb.CreateDocument
    doc.Form="local"
    End If

    doc.ConnectionType="0"
    doc.OptionalNetworkAddress=DNS
    doc.LanportName="TCPIP"
    doc.Destination = ServerNN.Canonical
    doc.Source="*"
    Call doc.ComputeWithForm(True,False)
    call doc.Save(False, False)
    Exit Sub
    ErrHnd:
    On Error Goto 0
    Error Err, Error$ & Chr(10) & Getthreadinfo(1) & " (line " & Erl & ")"
    End Sub
     
  9. oleg7

    oleg7 Гость

    TIA
    спасибо
    в моем случае надо было просто вместо db использовать dbNab
    Вот только теперь не могу понять как сделать, чтобы искало не локальную просто names, а ту базу, которая указана в параметрах настройки?
     
  10. TIA

    TIA :-)
    Lotus team

    Регистрация:
    15 май 2009
    Сообщения:
    790
    Симпатии:
    0
    А чем то, что указано в notes.ini не устраивает. И что за настройка с параметрами?
     
  11. oleg7

    oleg7 Гость

    User Preferences , на русском клиенте Параметры настройки

    Добавлено: извеняюсь, наверное вопрос глупый, но не могу понять, как мне из notes.ini взять параметр NAMES?
     
  12. TIA

    TIA :-)
    Lotus team

    Регистрация:
    15 май 2009
    Сообщения:
    790
    Симпатии:
    0
    Так уже берёшь же. Или это не ты писал?
    Код (Text):
    ' first, get the local NAB
    sNamesLine = session.GetEnvironmentValue("names",True)
    Наверняка, то что в User Preferences и сохраняется в notes.ini. Попробуй :)
     
  13. oleg7

    oleg7 Гость

    Код (Text):
    ' first, get the local NAB
    sNamesLine = session.GetEnvironmentValue("names",True)
    если локальная база названа names.nsf - ищет и делает изменения, а если, например, new_names.nsf - пишет, что не найдена
     
  14. Klido

    Klido Гость

    oleg7
    опа... а зачем что-то искать/менять в левых АК???

    такое впечатление, что топикастера запутали :) начал он нормально с темы поменять настройки подключения клиента, а теперь ищет эти настройки во всех локальных адресных книгах :)
     
  15. oleg7

    oleg7 Гость

    просто у некоторых локальные АК называются ФИО_names.nsf

    Добавлено: в notes.ini в поле NAMES указывается название локальной базы. А как его оттуда именно в таком виде ФИО_names взять?
     
  16. Klido

    Klido Гость

    oleg7
    кто-то кого-то не понимает :)
    если Вы научились запущать клиента с иной от names.nsf книгой по-умолчанию - это прекрасно, но тогда она-то Вам и нужна!
    в общем не важно - для изменения настроек подключения надо всё сделать в той АК, которая в NAMES указана.....
    поэтому вид, в котором вы оттуда взять её хотите - не имеет никакого значения
     
  17. TIA

    TIA :-)
    Lotus team

    Регистрация:
    15 май 2009
    Сообщения:
    790
    Симпатии:
    0
    Тогда перебирайте notesSession.AddressBooks пока не найдёте NotesDatabase.IsPrivateAddressBook = True

    Добавлено:
    Так:
    sNamesLine = session.GetEnvironmentValue("ФИО_names",True)
     
  18. oleg7

    oleg7 Гость

    <div align='center'></div>:)
    наверное, конец дня... не доходит.... у меня не хочет и все тут искать АК... постоянно не найдена
    я ж не знаю какую базу писать... мне надо не для одного определенного пользователя
     
  19. Klido

    Klido Гость

    oleg7
    откуда Вы взяли ФИО_????? вообще забейте на инишник и тупо берите names.nsf из /notesdata клиента

    в инишнике нет никаких переменных ФИО_names, есть только NAMES - перечень локальных АК, в простейшем случае это ровно одна база names.nsf, в сложном - names.nsf+остальные, возможно и Ваша ФИО_, но никакие иные книги, кроме реально локальной АК Вам не нужны!

    или же подробнее раскажите как у Вас настроены клиенты, откуда у них взялись эти ФИО_... и зачем они нужны.
     
  20. oleg7

    oleg7 Гость

    это для меня останется загадкой, но еще несколько лет тому им зачем-то сделали локальные АК именно с этой приставкой ФИО...
     
Загрузка...
Статус темы:
Закрыта.

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