SetField(vField, vValue) Adresseintrag über API ändern

  • Ist die Dokumentation der DVAPI hinsichtlich des BeBefehls SetField für das
    AddreessItem korrekt?
    Ich kann mit dem GetField Befehl wunderbar mein
    komplettes Adressbuch mit allen Feldern auslesen. Ein Adressfeld mit dem
    SetField Befehl neu zu schreiben ist mir bisher nicht gelungen.
    Trotz
    stundenlangem experimentieren ist mir das schreiben eines Wertes in ein
    Adressfeld noch nicht gelungen.


    Sub SetField(vField, vValue)
    Hat vielecht jemand ein funktionierendes Code Beispiel für VB
    Danke und Gruß Michael

  • Hallo Michael,


    generell funktionieren die API Beispiele korrekt. Es hängt aber ein bisschen von der verwendeten Sprache ab, was wie funktioniert.
    Und natürlich von der verwendeten API bzw. David Version.


    Daher bitte immer Programmiersprache, David Version / API Version und am besten auch ein Codesnippet mit angeben.


    Was willst Du denn erreichen? Wenn es darum geht eine eigene ID zwecks Sync oder sowas zu hinterlegen, dann verwende ein Userfield oder Set Property aus dem MessageItem2.


    Gruß Jens

    Es wäre schön, Deinen Vornamen zu kennen. Bitte beachte unsere Forenregeln und die Netiquette.

    ----------

    Bitte teilen/weitersagen: STARFACE Module Databasewww.sfm-db.com


    STARFACE Excellence PartnerSTARFACE Module CreatorTobit.Software Authorized Partner (Mailserver/Unified Messaging)work4all! Solution Partner (CRM/ERP)Securepoint Professional Partner (Firewall/UTM)


    1 Qubit - J.Suingwww.1qubit.deSoftware - Service - Coding

  • Es geht mir um Davidfx und David Zehn.
    Ich lese meine Adressbücher in eine Excelliste, weil sich dort vieles einfacher korriegieren, importieren oder hinzufügen lässt.
    DAs funktioniert einwandfrei:
    Sub Get_address()
    Dim oApp As DvApi32.IApplication
    Dim oAcc As DvApi32.Account
    Dim oArchive As DvApi32.Archive
    Dim oAddressbook As DvApi32.AddressBook
    Dim oAddressItem As DvApi32.AddressItem
    Dim oAddress As DvApi32.Address
    Dim oFieldName
    Dim fso, txtfile
    ActiveSheet.Rows("4:65536").ClearContents
    Set oApp = CreateObject("DVOBJAPILib.DvISEAPI")
    Set oAcc = oApp.Logon("", "", "", "", "", "NOAUTH")
    Set oArchive = oAcc.GetSpecialArchive(DvApi32.DvArchiveTypes.DvArchivePersonalAddress)
    Set oAddressItem = oArchive.NewItem(DvApi32.DvItemTypes.DvAddressItem)
    Set oAddressbook = oAcc.GlobalAddressBook
    For x = 0 To oAddressbook.Count - 1
    Set oAddress = oAddressbook.Item(x)
    Set oAddressItem = oAddress.AddressItem
    For Z = 1 To 69
    oFieldName = Worksheets("Adressliste").Cells(3, Z).Value
    On Error Resume Next
    Worksheets("Adressliste").Cells(x + 4, Z).Value = oAddressItem.GetField(oFieldName)
    Next Z
    Next x
    End Sub



    Wenn ich aber die Liste zurück in's David Archiv schreiebn möchte habe ich Probleme die Felder zu belegen.
    Laut der Doku sollte es aber doch so funktionieren (der rotmarkierte Teil funktioniert nicht):
    Sub Write()
    Dim oApp As DvApi32.IApplication
    Dim oAcc As DvApi32.Account
    Dim oArchive As DvApi32.Archive
    Dim oAddressbook As DvApi32.AddressBook
    Dim oAddressItem As DvApi32.AddressItem
    Dim oAddress As DvApi32.Address
    Dim oFieldName, oFieldVal
    Set oApp = CreateObject("DVOBJAPILib.DvISEAPI")
    Set oAcc = oApp.Logon("", "", "", "", "", "NOAUTH")
    Set oArchive = oAcc.GetSpecialArchive(DvApi32.DvArchiveTypes.DvArchivePersonalAddress)
    '##############Neuen Kontakt im Adressbuch erzeugen (Index=0)####################
    Set oAddressItem = oArchive.NewItem(DvApi32.DvItemTypes.DvAddressItem)
    oAddressItem.DisplayName = "Test User"
    oAddressItem.AltEMail = "chef@firma.de"
    oAddressItem.AltFaxNumber = "555-333-555"
    oAddressItem.Category = "2"
    oAddressItem.City = " New York"
    oAddressItem.Company = "Firm"
    oAddressItem.Birthday = "15.06.1960"
    oAddressItem.Save
    '##############Kontrolle on Kontakt angelegt wurde############
    Set oAddressbook = oAcc.PersonalAddressBook
    Set oAddress = oAddressbook.Item(0)
    Set oAddressItem = oAddress.AddressItem
    MsgBox oAddressItem.DisplayName
    '##########################Felder im Kontakt ändern##########
    oFieldName = "Birthday"
    oFieldValue = "10.10.1963"
    oAddressItem.SetField(oFieldName,oFieldValue)
    oAddressItem.Save()

    End Sub

  • Hallo Michael,


    ne, SetField erzeugt ein benutzerdefiniertes Feld bzw. bietet den Zugriff darauf. Seit David.zehn! kann man ja eigene, zusätzliche Felder in den Adressen anlegen.

    Zitat

    Since David(R)zehn! are new extended Address Fields avalable,
    AddressItem allows access to seperate UserFields as properties of the object itself and fields can be addressed by their name.


    Habs jetzt nicht genau auf dem Schirm, aber normalerweise solltest Du einfach einen vorhanden Adresseintrag öffnen, die Daten genau wie beim neu erzeugten Item zuweisen und dann speichern. Mehr ist eigentlich nicht nötig.


    In Deinem Beispiel hast Du ja ein neues Item erzeugt und willst nach dem Save nochmal was ändern. Sollte also so in der Art möglich sein:


    Code
    oAddressItem.Birthday = "15.06.1960"
    oAddressItem.Save


    Gruß Jens

    Es wäre schön, Deinen Vornamen zu kennen. Bitte beachte unsere Forenregeln und die Netiquette.

    ----------

    Bitte teilen/weitersagen: STARFACE Module Databasewww.sfm-db.com


    STARFACE Excellence PartnerSTARFACE Module CreatorTobit.Software Authorized Partner (Mailserver/Unified Messaging)work4all! Solution Partner (CRM/ERP)Securepoint Professional Partner (Firewall/UTM)


    1 Qubit - J.Suingwww.1qubit.deSoftware - Service - Coding

  • Das funktioniert aber leider nicht mit allen zur Verfügung stehenden Felder im AddressItem, sonst wäre es kein Problem.
    Wie kann ich denn alle verfügabren Felder im AddressItem durchlaufen und mit Werten aus meiner Tabelle füllen. Wenn ich es richtig sehe muss ich dazu das MessageItem2 benutze. Ich bekomme die Syntax aber nicht auf die Reihe. Vielecht ist ja jemand so freundlich und hat einen Code zu Hand, der die nachfolgenden Felder belegt.



    DisplayName
    Salutation
    Title
    LastName
    FirstName
    MiddleInitial
    NameSuffix
    HomeStreet
    HomeZip
    HomeCity
    HomeState
    HomeCountry
    PhonePrivate
    PhonePrivate2
    AltFaxNumber
    PhoneMobile
    AltEMail
    IMA-Aol
    IMA-ICQ
    IMA-Msn
    IMA-Other
    IMA-Skype
    Company
    Department
    Office
    Street
    ZipCode
    City
    State
    Country
    PhoneCompany
    PhoneOffice
    PhoneOffice2
    FaxNumber
    PhoneCar
    EMail
    PreferredType
    WebSite
    Manager
    Assistant
    PhoneAssistant
    PersonalNumber
    Home2Street
    Home2Zip
    Home2City
    Home2State
    Home2Country
    eMail3
    FaxOther
    PhoneCallback
    PhoneISDN
    PhoneOther
    PhonePager
    PhonePrimary
    PhoneRadio
    SMSNumber
    Telex
    VoiceBox
    VoIPNumber
    VoIPAddress
    Nickname
    Profession
    JobTitle
    Birthday
    BirthDayDate
    AnniversaryDate
    LicensePlateNumber
    SpouseName
    Children
    Notes

  • Das sollte mit allen Feldern klappen, die im AdressItem zur Verfügung stehen. Es kann aber sein, dass im AdressItem Objekt nicht alle Felder zur Verfügung stehen, die eine Adresskarte hergibt. Beim MailItem ist es ähnlich. In solchen Fällen muss man, wie schon richtig bemerkt, über das MessageItem2 gehen.


    Wie Du die Fields im MessageItem2 grundlegend ansprechen kannst habe ich in folgendem Beitrag kürzlich gepostet anhand eines Beispieles (C#):


    Position in Archive.dat ermitteln?


    In der API Hilfe findest Du alle Fields und deren Namen aufgelistet, z.B.:



    Der zu verwendene Name ist immer der Teil hinter dem Unterstrich.


    Gruß Jens

    Es wäre schön, Deinen Vornamen zu kennen. Bitte beachte unsere Forenregeln und die Netiquette.

    ----------

    Bitte teilen/weitersagen: STARFACE Module Databasewww.sfm-db.com


    STARFACE Excellence PartnerSTARFACE Module CreatorTobit.Software Authorized Partner (Mailserver/Unified Messaging)work4all! Solution Partner (CRM/ERP)Securepoint Professional Partner (Firewall/UTM)


    1 Qubit - J.Suingwww.1qubit.deSoftware - Service - Coding

  • O.k. ich habe jetzt versucht mich mit der Sache auseinander zu setzen und folgender Code sollte mir schon mal zeigen was an Feldern verfvügbar ist. Komischerweise sind das noch nicht enmal die Hälfte der Felder die vorhanden sind. Ausserdem variert das Ergebnis der "Count" Anweisung von Abfrage zu Abfrage. Ich kann mir das nicht erklären??? ?(
    Sub Test2()
    Dim oApp As DvApi32.IApplication
    Dim oAccount As DvApi32.Account
    Dim oArchive As DvApi32.Archive
    Dim oAddress As DvApi32.MessageItem2
    Dim oUserFields As DvApi32.UserFields
    Dim oFieldDefinition As DvApi32.FieldDefinition
    Dim oFieldDefinitions As DvApi32.FieldDefinitions
    Dim oFields As DvApi32.Fields
    Dim oField As DvApi32.Field
    Dim i As Integer
    Set oApp = CreateObject("DVOBJAPILib.DvISEApi")
    Set oAccount = oApp.Logon("Pentium11", "", "", "", "", "AUTH")
    Set oArchive = oAccount.GlobalAddressBook.Archive
    '###################################### Hinzufügen eines Globalen Feldes ##############
    Set oFieldDefinitions = oArchive.FieldDefinitions()
    '##################################### Archive FieldDefinitions auslesen ##############
    For i = 0 To oFieldDefinitions.Count() - 1
    Set oFieldDefinition = oFieldDefinitions.Item(i)
    MsgBox ("Name: " & vbTab & (oFieldDefinition.Name()) & vbCrLf & _
    "Type: " & vbTab & (oFieldDefinition.Type))
    Next
    oAccount.Logoff
    End Sub


    Ergebnis:




    FeldnameFeldTYp
    Title0
    NameSuffix0
    HomeState0
    PreferredType0
    WebSite0
    PersonalNumber0
    PhoneOther0
    SMSNumber0
    VoIPNumber0
    VoIPAddress0
    JobTitle0
    Birthday0
    BirthDayDate0
    Angezeigter Name 20
    Notes0
    Account0
    Address0
    Attachments0
    Category0
    Fields0
    FormattedNotes0
    ID0
    Parent0
    PDACategory0
    Picture0
    Priority0
    StatusTime0
    Subject0
    Type0
    Nr0
    Wo ist der Rest(Adressen etc) der ja definitiv unter "Alle Felder" in Tobit vorhanden ist ??

  • folgender Code sollte mir schon mal zeigen was an Feldern verfvügbar ist.

    Öh, wieso sollte er das tun? Habe mit den FieldDefinitions noch nicht gearbeitet, aber die Beschreibung in der Hilfe sagt mir etwas anderes.
    Zumal Dein Beispielcode bei mir erst gar nicht in die Schleife springt, da keine FieldDefinitions existieren.


    Wo ist der Rest(Adressen etc) der ja definitiv unter "Alle Felder" in Tobit vorhanden ist ??


    Wenn ich es richtig im Kopf habe, dann stehen in der API nicht alle erweiterten Adressfelder zur Verfügung die es in David seit Version 10 gibt, sondern nur die Standardfelder aus Version 8 und davor. Auch die SQL Adressen sind z.B. darauf beschränkt.
    Sicher bin ich mir aber nicht bez. der API. Ich würde nach den Infos aus der Hilfe gehen - was dort steht, sollte auch verfügbar sein.


    Gruß Jens


    P.S.: Hier im Editor gibt es einen Button mit einem #-Zeichen, damit läßt sich Code formatieren. Bitte nutz den doch beim einfügen von CodeSnippets, danke.

    Es wäre schön, Deinen Vornamen zu kennen. Bitte beachte unsere Forenregeln und die Netiquette.

    ----------

    Bitte teilen/weitersagen: STARFACE Module Databasewww.sfm-db.com


    STARFACE Excellence PartnerSTARFACE Module CreatorTobit.Software Authorized Partner (Mailserver/Unified Messaging)work4all! Solution Partner (CRM/ERP)Securepoint Professional Partner (Firewall/UTM)


    1 Qubit - J.Suingwww.1qubit.deSoftware - Service - Coding

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!