Доступ к адресной книге

  • Автор темы V
  • Дата начала
#1
Добрый день! Вот решил обратиться к Вам за советом.
Есть необходимость обратиться к данным в адресной книге в определенной базе, вот что я делаю:
Dim session As New NotesSession
Dim db As New NotesDatabase
session.initialize()
set db=session.GetDatabase("", "AK.nsf")
далее по идее есть свойство AddressBook у session, но вот только с типом Variant и как к нему обращаться не совсем понятно, либо же копать через db но вот только как? Вот в принципе сама проблема)
Заранее спасибо!
 

Medevic

Что это ? :)
Lotus team
10.12.2004
3 346
1
#2
Это не вариант, а Array of NotesDatabase. В хелпе всё написано.
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 583
269
#3
есть еще нюанецы :D
Код:
Dim dbNames() As String
Dim dbs() As NotesDatabase
Sub Initialize
Dim session As New NotesSession
Dim books As Variant
books = session.AddressBooks
i=0
server=""
Forall b In books
If ( b.IsPublicAddressBook ) And ( Not done ) Then
Redim Preserve dbNames(i)
Redim Preserve dbs(i)
Call b.Open( "", "" )
If i=0 Then
server=b.Server
End If
If b.Title="" Then
Call b.Open(server,b.fileName)
End If
dbNames(i)=b.Title
Set dbs(i)=b
i=i+1			
End If
End Forall
Print "Init Form"
End Sub
в PostOpen
Код:
	If Source.EditMode Then
Print "Open with Edit mode"
Call Source.Document.ReplaceItemValue("dbListNames",dbNames)
Call Source.Refresh(True)
End If

ну и на форме контролs (поля):
-компутед вен композе dbListNames
-компутед фор дисплэй list, с формулой dbListNames
-комбик в формулой списка list
 
#4
ага, сенкс - нашел и подключился именно к адресной книге, но где именно хранится необходимая информация?
Вот что в хелпе:
Dim session As New NotesSession
Dim books As Variant
Dim view As NotesView
Dim doc As NotesDocument
Dim done As Variant
Dim person As String
books = session.AddressBooks
done = False
person = Inputbox$ _
( "Enter the last name of the person: ", "Last name" )
Forall b In books
' check every Domino Directory,
' unless we're already done
If ( b.IsPublicAddressBook ) And ( Not done ) Then
Call b.Open( "", "" )
' look up person's last name
' in People view of address book
Set view = b.GetView( "People" )
Set doc = view.GetDocumentByKey( person )
' if person is found, display the phone number item
' from the Person document
If Not ( doc Is Nothing ) Then
Messagebox( "Phone for " + person _
+ " is " + doc.OfficePhoneNumber( 0 ) )
done = True
End If
End If
End Forall
' if done is still False, the person wasn't found
If Not done Then
Messagebox _
( "Sorry, unable to locate person's name." )
End If
End Sub

И если передавать фамилию существующего контакта объект не создается..и откуда взялось свойство OfficePhoneNumber?
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 583
269
#5
смотря где искать ключ ;)
есть служебные вьюшки (типа $Users) - там будет искать по фамилии
но могут быть траблы с альтернативными "именами"
 

Akupaka

А че я?.. О.о
04.10.2007
3 360
1
#6
но где именно хранится необходимая информация?
молодой человек, вы уж извините, но мы старые, и не всегда уже понимаем по двум словам, в чем суть задачи ;)

откуда взялось свойство OfficePhoneNumber?
любой итем в документе может быть прочтен и записан в т.з. кратком виде, т.е.
Код:
someVariable = doc.GetItemValue("someItem")(0)
call doc.ReplaceItemValue("someItem", someVariable)
аналогично
Код:
someVariable = doc.someItem(0)
doc.someItem = someVariable
но я бы рекомендовал использовать первый стиль, так более строго (и понятней ;))
 
#7
о-да, всем спасибо-получилось.
Akupaka , под необходимой информацией я имел ввиду все данные которые имеют отношение к контакту из адресной книги - именно их я и получил, спасибо за подсказку). И сразу возник следующий вопрос-нельзя ли получить сразу весь необходимый объект (тот же контакт из адресной книги) в формате xml? вроде, написано, что парсер есть для xml, но о выгрузке в xml ничего не написано...
 

Akupaka

А че я?.. О.о
04.10.2007
3 360
1
#9
нельзя ли получить сразу весь необходимый объект (тот же контакт из адресной книги)
Vаder, нельзя в разговоре с ООПшниками употр*цензура*ть слово объект без конкретного указания типа, иначе они впадут в вечный цикл, пытаясь привести типы ;)
данные о контакте можно получить в виде XML либо преобразовав весь документ, как указал Omh, либо можно сформировать XML самостоятельно, если все поля из документа не нужны, а их там не мало "лишних", либо используя классы NotesDXLxxx, либо самому в файлик писать как надо...