{"id":1837,"date":"2009-11-11T14:02:25","date_gmt":"2009-11-11T12:02:25","guid":{"rendered":"http:\/\/blog.starocotes.de\/?p=1837"},"modified":"2009-11-12T12:53:11","modified_gmt":"2009-11-12T10:53:11","slug":"personliches-adressbuch-inkl-offentlicher-eintrage-fur-blackberry-unter-domino","status":"publish","type":"post","link":"https:\/\/blog.starocotes.de\/index.php\/2009\/11\/11\/personliches-adressbuch-inkl-offentlicher-eintrage-fur-blackberry-unter-domino\/","title":{"rendered":"Pers\u00f6nliches Adressbuch inkl. \u00f6ffentlicher Eintr\u00e4ge f\u00fcr Blackberry unter Domino"},"content":{"rendered":"<p>Mir stellte sich ein interessantes Problem in Zusammenhang mit einem Blackberry und Notes. Einer unserer Mitarbeiter wollte gerne sowohl Zugriff auf das \u00f6ffentliche Notes Adressbuch haben aber auch seine eigenen, pers\u00f6nlichen Adressen verwalten. Da diese pers\u00f6nlichen Adressen nicht f\u00fcr jeden zug\u00e4nglich sein sollten und er zudem die Verwaltung auf auf dem Blackberry verf\u00fcgbar haben wollte kam die L\u00f6sung \u00fcber Directory Assistance nicht in Frage. Ich habe dann kurzerhand eine eher &#8222;Quick &#038; Dirty&#8220; L\u00f6sung gefunden. <\/p>\n<p>Hierf\u00fcr ist es zum Einen notwendig eine Kopie eines lokalen Adressbuches auf dem Server zu erstellen, von wo f\u00fcr den Blackberry erreichbar ist. Im Blackberry Manager auf dem BES stellt man nun dieses Adressbuch als das zust\u00e4ndige f\u00fcr das entsprechende Ger\u00e4t ein. Nun kann der Benutzer ein eigenes Adressbuch verwalten, was noch fehlt sind die Eintr\u00e4ge aus dem \u00f6ffentlichen Adressbuch, diese werden mit dem folgenden Agenten in regelm\u00e4\u00dfigen Abst\u00e4nden abgeglichen:<\/p>\n<p>[Update: Habe den Code noch etwas angepasst damit nicht alle Dokumente st\u00e4ndig aktualisiert werden, was den Trafik in die H\u00f6he treibt.]<\/p>\n<p>Der Code befindet sich jetzt im vollst\u00e4ndigen Artikel.<\/p>\n<p><!--more--><\/p>\n<pre>\r\n<code>\r\nSub Initialize\r\n\tDim sess As New NotesSession\t\r\n\tDim persdb As NotesDatabase\r\n\tDim perscol As NotesDocumentCollection\r\n\tDim persdoc As NotesDocument\r\n\tDim persdoc2 As NotesDocument\r\n\tDim adrdb As NotesDatabase\r\n\tDim adrcol As NotesDocumentCollection\t\r\n\tDim adrdoc As NotesDocument\r\n\tDim adritem As NotesItem\r\n\t\r\n\t'Aktuelle Datenbank setzten\r\n\tSet persdb = sess.CurrentDatabase\r\n\t\r\n\t'Allgemeines Adressbuch \u00f6ffnen\r\n\tSet adrdb = sess.GetDatabase(\"SERVER\",\"names.nsf\",False)\r\n\t\r\n\t'Alle Persondokumente holen\r\n\tSet adrcol = adrdb.search({Form = \"Person\"},Nothing,0)\r\n\t\r\n\tSet adrdoc = adrcol.GetFirstDocument\r\n\t\r\n\t'Print Start Agent\r\n\tPrint \"Start sync: \" & persdb.FileName & \" um \" & Format(Now())\r\n\t'Alle Personen aus \u00f6ffentlichem Adressbuch durchgehen\t\r\n\tWhile Not (adrdoc Is Nothing)\r\n\t\t'Nur pr\u00fcfen wo ein FullName vorhanden ist\r\n\t\tIf adrdoc.FullName(0) <> \"\" Then\r\n\t\t'Pr\u00fcfen ob Person in pers\u00f6\u00e4nlichen Adressbuch vorhanden\r\n\t\t\tSet perscol = persdb.Search({Form = \"Person\" & FullName = \"} & adrdoc.FullName(0) & {\"},Nothing,0)\r\n\t\t\t\r\n\t\t'Wenn ein oder mehrere Dokumente gefunden wurden diese eventuell updaten\r\n\t\t\tIf perscol.Count > 0 Then\r\n\t\t\t\tSet persdoc = perscol.GetFirstDocument\r\n\t\t\t\t\r\n\t\t\t'Alle gefundenen Dokumente pr\u00fcfen\t\t\t\r\n\t\t\t\tWhile Not (persdoc Is Nothing)\r\n\t\t\t\t'\u00c4nderung zun\u00e4chst aus setzten\r\n\t\t\t\t\tchange = False\r\n\t\t\t\t'Alle Items im Dokument pr\u00fcfen\r\n\t\t\t\t\tForall persitem In persdoc.Items\r\n\t\t\t\t\t'Internes Kennzeichen und Werte die keine Arrays (Bilder) sind sowie Systemfelder (z.B. beginnend mit $) ignorieren \t\t\t\t\t\r\n\t\t\t\t\t\tIf persitem.Name <> \"FromPublicAddressbook\" _\r\n\t\t\t\t\t\tAnd Isarray(persitem.values) _\r\n\t\t\t\t\t\tAnd Left(persitem.Name,1) <> \"$\" _\r\n\t\t\t\t\t\tAnd persitem.Name <> \"CIntDate\" Then\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t'Korrespondierendes Item aus \u00f6ffentlichen Adressbuch holen\r\n\t\t\t\t\t\t\tSet adritem = adrdoc.GetFirstItem(persitem.Name)\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t'Pr\u00fcfen ob Item gefunden wurde\r\n\t\t\t\t\t\t\tIf Not (adritem Is Nothing) Then\r\n\t\t\t\t\t\t'Nur pr\u00fcfen wenn Item ein Array ist\r\n\t\t\t\t\t\t\t\tIf Isarray(adritem.Values) Then\r\n\t\t\t\t\t\t\t\t'Felder ausschliessen\r\n\t\t\t\t\t\t\t\t\tIf adritem.Name <> \"CIntDate\" Then\r\n\t\t\t\t\t\t\t\t\t'Maximale Anzahl der Werte ermitteln\r\n\t\t\t\t\t\t\t\t\t\tmax = Ubound(adritem.Values)\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t'Wenn Anzahl der Werte schon unterschiedlich wurde das Dokument ge\u00e4ndert\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\tIf Ubound(persitem.values) <> max Then\r\n\t\t\t\t\t\t\t\t\t\t\tchange = True\r\n\t\t\t\t\t\t\t\t\t\t\tchgfield = persitem.name\r\n\t\t\t\t\t\t\t\t\t\tElse\r\n\t\t\t\t\t\t\t\t\t\t'Alle Werte durchgehen\r\n\t\t\t\t\t\t\t\t\t\t\tFor i = 0 To max\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\tIf (persitem.values(i) <> adritem.values(i)) Then\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tchange = True\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tchgfield = persitem.name\r\n\t\t\t\t\t\t\t\t\t\t\t\tEnd If\r\n\t\t\t\t\t\t\t\t\t\t\tNext\r\n\t\t\t\t\t\t\t\t\t\tEnd If\r\n\t\t\t\t\t\t\t\t\tEnd If\r\n\t\t\t\t\t\t\t\tEnd If\r\n\t\t\t\t\t\t\tEnd If\r\n\t\t\t\t\t\tEnd If\r\n\t\t\t\t\tEnd Forall\r\n\t\t\t\t\tIf change Then\r\n\t\t\t\t\t\tPrint \"Ge\u00e4ndert: \" & persdoc.Fullname(0) & \" wegen \" & chgfield\r\n\t\t\t\t\t\tCall adrdoc.CopyAllItems(persdoc,True)\r\n\t\t\t\t\t'als aus dem \u00f6ffentlichen Adressbuch markieren\r\n\t\t\t\t\t\tCall persdoc.AppendItemValue(\"FromPublicAddressbook\",\"1\")\r\n\t\t\t\t\t\tCall persdoc.Save(True,False)\r\n\t\t\t\t\tEnd If\r\n\t\t\t\t\tSet persdoc = perscol.GetNextDocument(persdoc)\r\n\t\t\t\tWend\t\t\t\r\n\t\t\tElse\r\n\t\t\t'Dokument in pers\u00f6nliches Adressbuch kopieren\r\n\t\t\t\tSet persdoc = adrdoc.CopyToDatabase(persdb)\t\t\r\n\t\t\t'als aus dem \u00f6ffentlichen Adressbuch markieren\r\n\t\t\t\tCall persdoc.AppendItemValue(\"FromPublicAddressbook\",\"1\")\r\n\t\t\t\tCall persdoc.Save(True,False)\r\n\t\t\tEnd If\r\n\t\tEnd If\r\n\t\t'N\u00e4chstes Dokument holen\t\t\r\n\t\tSet adrdoc = adrcol.GetNextDocument(adrdoc)\r\n\tWend\r\n\t\r\n\t\r\n\t'Pr\u00fcfen ob Person aus pers\u00f6nlichem Adressbuch gel\u00f6scht werden m\u00fcssen\r\n\tSet perscol = persdb.Search({Form = \"Person\" & FromPublicAddressbook = \"1\"},Nothing,0)\r\n\t\r\n\t'Wenn ein oder mehrere Dokumente gefunden wurden diese pr\u00fcfen\r\n\tIf perscol.Count > 0 Then\r\n\t\tSet persdoc = perscol.GetFirstDocument\r\n\t\t\r\n\t\tWhile Not (persdoc Is Nothing)\r\n\t\t\t\r\n\t\t\t'Pr\u00fcfen ob Person in \u00f6ffentlichem Adressbuch vorhanden\r\n\t\t\tSet adrcol = adrdb.Search({Form = \"Person\" & FullName = \"} & persdoc.FullName(0) & {\"},Nothing,0)\r\n\t\t\t\r\n\t\t\t'Wenn nicht vorhanden im pers\u00f6nlichen l\u00f6schen\r\n\t\t\tIf adrcol.Count = 0 Then\r\n\t\t\t\tSet persdoc2 = persdoc\r\n\t\t\t\tdel = True\t\t\t\t\r\n\t\t\tElse\r\n\t\t\t\tdel = False\r\n\t\t\tEnd If\t\t\t\r\n\t\t\t\r\n\t\t\tSet persdoc = perscol.GetNextDocument(persdoc)\r\n\t\t\t\r\n\t\t\tIf del Then\r\n\t\t\t\tCall persdoc2.Remove(True)\r\n\t\t\tEnd If\r\n\t\tWend\t\t\t\r\n\tEnd If\r\nEnd Sub<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Mir stellte sich ein interessantes Problem in Zusammenhang mit einem Blackberry und Notes. Einer unserer Mitarbeiter wollte gerne sowohl Zugriff [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[8],"tags":[181,178,180,179],"class_list":["post-1837","post","type-post","status-publish","format-standard","hentry","category-it","tag-adressbuch","tag-blackberry","tag-domino","tag-notes"],"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/blog.starocotes.de\/index.php\/wp-json\/wp\/v2\/posts\/1837","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.starocotes.de\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.starocotes.de\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.starocotes.de\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.starocotes.de\/index.php\/wp-json\/wp\/v2\/comments?post=1837"}],"version-history":[{"count":20,"href":"https:\/\/blog.starocotes.de\/index.php\/wp-json\/wp\/v2\/posts\/1837\/revisions"}],"predecessor-version":[{"id":1858,"href":"https:\/\/blog.starocotes.de\/index.php\/wp-json\/wp\/v2\/posts\/1837\/revisions\/1858"}],"wp:attachment":[{"href":"https:\/\/blog.starocotes.de\/index.php\/wp-json\/wp\/v2\/media?parent=1837"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.starocotes.de\/index.php\/wp-json\/wp\/v2\/categories?post=1837"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.starocotes.de\/index.php\/wp-json\/wp\/v2\/tags?post=1837"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}