Beiträge von oklink

    Hallo!


    Notes 8 protokolliert im Adressbuch die letzten Kontakte, wenn man dies nicht explizit ausschaltet. Das habe ich jetzt mal bei meinem Client gemacht gemacht und alle unter "Letzte Kontakte" eingetragenen Kontakte in meinem Adressbuch gelöscht.


    Jetzt scheint der Agent wieder sauber zu laufen.
    Zusätzlich habe ich aber noch eine Fehlerbehandlung eingebaut, die bei Problemen mit dem Mailversand eine Info an mich schickt.


    Fraglich ist jetzt nur noch, ob bzw. warum der Agent auf meine lokalen Einstellungen und mein Adressbuch zugegriffen hat.
    Ich habe den Agenten zwar geschrieben, aber der wurde dann von den Admins ja extra mit einem speziellen User signiert und dieser User stand auch im Absender der verschickten Mails.


    Naja, jedenfalls funktionieren die Agenten jetzt wieder.
    Vielen Dank für die Hilfe und schöne Feiertage!


    Oli

    Hallo Taurec,


    das mit dem Stopp nach der ersten Übereinstimmung war schon mal ein Treffer. Ich habe die Einstellung bei mir mal geändert und jetzt kommt da teilweise auch die Nachfrage. (Nicht bei allen Empfängern.)


    Aber bisher konnte der Agent die Mails ja auch verschicken. Kann man das für Agenten auch irgendwo einstellen, dass die die erste Übereinstimmung nehmen?


    Ich versuche jetzt mal rauszufinden, wo die doppelten Einträge herkommen. Die Agenten waren eigentlich mit einem speziellen User signiert, der nur dafür da ist. Da sollte es eigentlich keine Einträge im privaten Adressbuch geben. Und die Agenten werden normalerweise auch nicht manuell, sondern zeitgesteuert gestartet, so dass der Server auch nicht auf mein privates Adressbuch zugreifen sollte, oder?


    Viele Grüße,


    Oli

    Hallo!


    Ich bin's schon wieder. Mit einem (für mich zumindest) brandneuen Problem. :)


    Ich habe einige Agenten die Mails verschicken seit Jahren am laufen. Der Code sieht in etwa so aus:


    Code
    if (collection.Count > 0) Then	Set newsletter = New NotesNewsletter( collection )	newsletter.DoScore = False	newsletter.DoSubject = True	newsletter.SubjectItemName = "NLInfo"	Set info = newsletter.FormatMsgWithDoclinks( db )	info.Form = "Memo"	info.Subject = "Überfällige Aufgaben für " & station.SBezeichnung(0)	Call info.Send( False, station.SVerantwortlich(0) )End If


    info habe ich dabei außerhalb des gezeigten Code-Abschnitts als NotesDocument deklariert, aber kein Dokument mit new erstellt.
    In der Variablen station.SVerantwortlich(0) steht der vollständige Username in der Form "CN=Mein Name/OU=MA/O=Unsere-Firma/C=de" drin.


    Bisher lief das Script völlig fehlerfrei. Aber jetzt macht es auf einmal mucken und bringt den Fehler "Mail kann nicht gesendet werden, mehrere Entsprechungen in & Adressbüchern gefunden".
    Komisch finde ich das Ampersand in der Fehlermeldung. Und wenn ich mir den Wert der Variablen im Debug-Modus herauskopiere und damit eine neue Mail im NotesClient erstelle wird die auch problemlos verschickt, ohne das eine Nachfrage nach dem richtigen Empfänger kommt.


    Wenn ich an den Mail-Empfänger noch unsere Domain anhänge in der form:

    Code
    Call info.Send( False, station.SVerantwortlich(0) & "@unsereMailDomäne" )


    funktioniert der Mailversand. In der NotesDesigner-Hilfe ist es aber ohne diesen Zusatz angegeben und bisher hat ja auch alles funktioniert.


    Kann das mit der Umstellung der Server auf die Version 8.5 zu tun haben? Ist da irgendwas noch nicht richtig konfiguriert? Oder gibt es eine andere Ursache?
    Ich will eigentlich die Domain nicht fest reincodieren, weil die sich bei Fusionen ab und zu ändert. (Ok. Ich kann die bestimmt auch irgendwie auslesen und dann die Variable verwenden. Ist aber etwas umständlich und kostet auch Performance.)


    Viele Grüße,


    Oli

    Hallo Andreas!



    Die fehlende Berechtigung ist ja der Grund, warum die Replizierung abgeschaltet werden soll. Wegen der fehlenden Berechtigung wird hier nur Server- und Netzwerklast produziert, ohne das es was bringt.


    Die Admins können mir auch nicht sagen, woher diese Replizierung überhaupt kommt... Die Replik soll aber nicht gelöscht werden. Und auch das NotesReplicationEntry soll ich nicht löschen, solange die Replizierung noch aktiv ist.


    Deswegen die Idee mit dem Abschalten der Replizierung. Ich frage jetzt nicht, warum Notes zuerst prüft, ob es eine Replik auf dem Server gibt und es zum Zugriff berechtigt ist und es dann erst untersucht, ob die Replizierung vielleicht vorübergehend abgeschaltet ist und es gar nicht replizieren muss (vielleicht macht Notes das um möglichst zeitgenau auf die Deaktivierung reagieren zu können) ... ich kann mir aber durchaus vorstellen, dass Notes das so handhabt.


    Wenn wir also davon ausgehen, dass die von Dir beschriebene Reihenfolge korrekt ist, dann kann das temporäre Abschalten der Replizierung gar nichts bringen.
    Insofern bedanke ich mich für die Hilfestellung, die ich von allen hier gekriegt habe und schließe das Thema mal.


    Viele Grüße,


    Oli

    Hallo Andreas!


    Zitat


    ascabg schrieb:
    Der Replikator geht ueber alle Datenbanken und will diese auch replizieren.
    Nun hast Du in den Optionen die Replikation "voruebergehend", also nur zeitweise, quasi ausgeschaltet.
    Die merkt der Replikator auch, jedoch schreibt er ins das Log die Meldung, dass die Replikation der Db deaktiviert ist/wurde.


    Wenn das so wäre, dann wäre ich ja zufrieden.


    Du meinst doch das Replizier-Log der jeweiligen Datenbank, oder?
    Da stehen bei mir nur erfolgreiche Replizierungen. (Bei der betroffenen Datenbank im Beispiel eine Replizierung von 2006)


    Oder meinst Du die Spalte "Zusammenfassung" auf der Replizierseite? Da steht, dass ich nicht berechtigt bin, den Server zu benutzen. (Deswegen soll die Replizierung ja abgeschaltet werden.) Da steht aber nicht, dass die Replizierung vorübergehend deaktiviert ist.


    In der Konsole auf dem Server sieht man auch, dass der Replizierprozess versucht die Datenbank zu replizieren, was aber dann abgewiesen wird. Wenn ich im Client auf der Replizierseite manuell das Kreuzchen bei "Aktiviert" rausnehme taucht die Replizieranfrage auf dem Server nicht mehr auf. Aber das kann ich ja wieder nicht per Script erledigen.


    CU,


    Oli

    Hallo Andreas!


    Zitat


    ascabg schrieb:
    Dennoch bewegts Du Dich in beiden Faellen, wie Du den Optionen-Dialog aufgerufen hast auf Ebene der Datenbank und NICHT auf der Ebene der Replikator-Seite.


    Das ist mir schon klar.


    Zitat

    Die Replikator-Seite ist eine lokale Geschichte des Clients.
    Und hier, wie taurec bereits schrieb, hast Du mit Bordmitteln wenig Moeglichkeiten, diesen per Script auszuschalten bzw. zu loeschen.


    Auch das ist klar.


    Zitat

    Bei aktivierter lokaler periodischer Replikation prueft der Client die Replikator-Seite, welche Dbs sind hier aufgelistet und bei welchen ist der Haken gesetzt, dass eine Replikation durchgefuehrt werden soll.
    Da der Haken bei Deiner Db gesetzt ist, hat wie gesagt, NICHTS in den Optionen in der Db zu tun, wird eine Replikation versucht.


    Den Haken auf der Replizierseite kann ich per Script nicht verändern. Soweit habe ich das verstanden.
    Aber in den Datenbank-Optionen gibt es doch den Punkt "Replizierung dieser Replik vorübergehend deaktivieren".
    Und hier kann ich per Script einen Haken setzen.
    Nur: Was bewirkt diese Einstellung, wenn ich damit nicht die Replizierung für die Datenbank steuern kann?


    Hoffentlich kapiere ich das Ganze noch irgendwann,


    Oli

    Hallo RockWilder,


    sorry, da habe ich mich vielleicht missverständlich ausgedrückt.


    Ich bin auf die Replizierseite und dort dann in die "Anwendungsspezifische Optionen". Da komme ich dann auf eine Konfig-Seite und die sieht für mich genauso aus, als wenn ich in der Konfig-Seite eine Datenbank mit der rechten Maustaste anklicke und auf "Optionen..." gehe oder wenn ich direkt bei einer Datenbank auf "Replizierung" / "Optionen für diese Anwendung..." gehe.
    Die drei Wege sind doch identisch, oder?
    Und in diesen Optionen gibt es auf dem Reiter "Andere" den Punkt "Replizierung diesser Replik vorübergehend deaktivieren". Dort wirkt sich mein Script auf die Einstellung aus. In der Praxis zeigt dies aber leider keine Wirkung. Auf dem Server laufen weiterhin die Replizieranfragen auf und werden dort abgelehnt. Genau das soll verhindert werden.


    Bisher hatten wir Erfolg, wenn wir auf der Replizierseite direkt bei der betreffenden Datenbank den Haken bei "Aktiviert" manuell rausgenommen haben. Aber wenn ich taurec richtig verstanden habe ist das per Script nicht zu bewerkstelligen.


    Viele Grüße,


    Oli

    Zitat


    taurec schrieb:
    Wenn du lokal die Replizierung temporär deaktivierst, dann wird zwar versucht zu replizieren, aber der lokale Replikator erkennt bereits, daß es nicht erlaubt ist und baut damit gar keine Verbindung mehr zum Server auf ==> Also keine Netzwerklast.


    Hmm. Ich weiß nicht, ob wir vielleicht immer noch von verschiedenen Einstellungen reden.


    Also ich bin in meinem Client 8.5 auf die Replizierseite gegangen und habe dort unter dem Punkt "Andere" den oben erwähnten Punkt gefunden, mit dem man die Replizierung temporär deaktivieren kann. Und unter temporär verstehe ich jetzt, solange der Haken bei diesem Punkt gesetzt ist.


    Trotz gesetztem Haken wird aber der Replizierversuch in der Server-Konsole angezeigt. Und genau das sollte ja eigentlich nicht der Fall sein.


    Immerhin: Erfahrung kriegt man immer dann, wenn man nicht das kriegt, was man wollte. :-o



    CU,


    Oli

    Hallo taurec!


    Vielen Dank für Deine Antwort.
    Verwechselt ist nicht ganz richtig. Vielmehr war mir gar nicht klar, dass es da zwei verschiedene Punkte gibt.


    Ich habe mir die verschiedenen Optionen auf der Replizierseite noch mal durchgesehen und habe da jetzt einen Punkt "Replizierung dieser Replik vorübergehend deaktivieren" gefunden. Diesen Punkt scheint mein Script zu verändern. (Immerhin! :D ).
    In der Designer-Hilfe steht leider nichts davon, dass dies temporär sein soll bzw. nur eine bestimmte Replik betreffen soll.


    Irgendwie ist mir auch nicht klar, was diese Option bewirkt, denn anscheinend wird ja trotzdem weiterhin versucht zu replizieren.


    Unser Problem ist, dass für einige User das Replizieren des Adressbuches mit einem Server angelegt ist, auf den sie keinen Zugriff haben. (Frag mich nicht warum, ich bin hier nur der Programmierer und nicht der Admin.) Insofern bringt das Replizieren halt nichts außer Server- und Netzwerklast. Ich soll daher ein Script liefern, was das Replizieren der Datenbank abschaltet. Bei der Klasse NotesReplicationEntry gibt es die Methode remove, aber löschen soll ich die Replizierung nicht, solange sie noch aktiv ist. Und einen einzelnen NotesReplicationEntry kann ich anscheinend auch nicht deaktivieren.


    Wie kriege ich das Problem denn jetzt am besten gelöst? Anscheinend lässt sich die Replizierung ja doch nicht so einfach abschalten.


    Viele Grüße,


    Oli

    Hallo!


    Ich hätte da mal wieder ein kleines Problemchen.
    Und zwar versuche ich, per Script die Replizierung des persönlichen Adressbuches des aktuellen Users auszuschalten.


    Ich habe dazu ein Script gebastelt, dass ich per Mail mit Schaltfläche verschicken wollte.


    Code
    Sub Click(Source As Button)
    	Dim db As New NotesDatabase ("","names.nsf")
    	Dim rep As NotesReplication
    	Set rep = db.ReplicationInfo
    	Msgbox rep.Disabled
    	If Not rep.Disabled Then
    		rep.Disabled = True
    	End If
    	Call rep.Save()
    End Sub


    Soweit ich erkennen kann macht das Script auch was es soll. (Ist ja auch an ein Beispiel aus der Notes-Hilfe angelehnt.) Nur zeigt es keine Auswirkungen.


    Soll heißen: Der entsprechende Parameter im Objekt NotesReplication wird wie gewünscht geändert. Das kann man auch kontrollieren, wenn man das Script mehrfach aufruft. Ich habe das Script auch mal in einen Agenten gesetzt und den Debug-Modus verwendet. Da sieht man auch das der Parameter geändert und gespeichert wird.
    In der Replizier-Übersicht im Notes Client bleibt der Haken bei "aktiviert" aber drin. Auch ein Blick in die Serverkonsole zeigt, dass weiterhin repliziert wird.


    Hat jemand eine Idee, warum sich der Parameter nicht auswirkt?
    Und wie ich die Replizierung abschalten kann. Vielleicht gibt's ja auch noch eine bessere Idee, als jedem User eine Mail zu schicken.


    Vielen Dank schon mal!


    Oli

    Hallo!


    Ich kann Dir ein Beispiel liefern. Allerdings nicht in der Formelsprache, sondern in LotusScript. Ich habe das Script dabei nicht in einem Agenten, sondern direkt im QuerySave-Event der Maske:



    Hier habe ich sogar noch die Variante drin, dass Du über Rollen steuern kannst, wer die Mail bekommen soll. Du kannst aber natürlich auch einen festen Empfänger eintragen. "Kurzinfo" ist ein Feld im neu erstellten Dokument, dass dem Mailempfänger eine kurze Info zum Inhalt des Dokuments vermittelt.


    Vielleicht hilft Dir das ja weiter.
    Wenn gar nichts passiert kannst Du das Script auch mal mit dem Debugger prüfen und gucken, ob in den verschiedenen Variablen auch immer das drin steht, was drinstehen sollte. Das ist einer der Vorteile von LotusScript. ;)


    Viel Erfolg,


    Oli

    Sieht auf jeden Fall so aus, als ob das ein Rechte-Problem wäre. Mal sehen, woran es genau liegt.


    Vielen Dank auf jeden Fall für die Tipps!


    CU,


    Oli

    Hallo Taurec,


    das Abfragen von ODBC-Fehlern hat leider nicht viel gebracht.


    Ich habe testweise mal folgendes eingebaut:

    Code
    extendedMessage$ = con.GetExtendedErrorMessage
    extendedMessage$ = qry.GetExtendedErrorMessage
    extendedMessage$ = result.GetExtendedErrorMessage


    Das habe ich direkt vor und nach dem ersten result.Execute getestet und den Rückgabewert im Debugger verfolgt. Die ersten beiden Abfragen haben nichts geliefert. Die letzte lieferte "No Error".
    Ich habe auch mit GetError den Fehlercode abgefragt und damit dann die Fehlermeldung abgefragt. Der Fehlercode war aber immer 500 und das bedeutet wohl "No Error".


    Der SQL-Code ist ja auch korrekt. Der funktioniert ja, wenn ich ihn direkt an die Datenbank schicke. Und auch die Verbindung zur Datenbank ist ok. Ich kann ja problemlos Daten abfragen.


    Meine Vermutung ist, dass Notes (aus Sicherheitsgründen?) die Ausführung von StoredProcedures unterbindet.
    Ich hatte früher auch schon mal von Word Pro-Scripts aus auf Notes-DB zugegriffen. Aber dann hat unser Rechenzentrum einen Riegel vorgeschoben und es ging nicht mehr.


    Die Frage wäre halt, welche Einstellung das ist bzw. wo man das wieder rückgängig machen kann. Das RZ gibt da leider keine Auskunft bzw. man kommt da an die Leute nicht ran, die sich auskennen. Im Prinzip können wir auf unserem Server schon einstellen was wir wollen, aber manchmal kommt das RZ halt auf die glorreiche Idee bestimmte Standardeinstellungen auf die Server zu verteilen. Die passen sicher für die meisten Kunden, weil die keine eigene Notes-Entwicklung machen, aber wir haben dann eben manchmal ein Problem.


    CU,


    Oli

    Hallo!


    Ich sehe gerade, dass ich hier noch gar nicht geantwortet habe. Komisch. Ich dachte eigentlich, das hätte ich.


    Also, ich habe mir verschiedene versteckte Ansichten gebastelt, die jeweils die Daten für eine Dialogliste enthalten. Im QueryOpen-Event habe ich jeweils ein Script drin, das eine MySQL-Datenbank abfragt und für jeden Treffer ein Dokument erzeugt. Die Auswahl der Dokumente für die jeweilige Ansicht erfolgt über die verschiedenen Masken-Namen, die ich in die erzeugten Dokumente schreibe.
    Performance-technisch ist das nicht besonders toll, so oft wird das aber auch nicht benötigt.


    Der Vorschlag von Taurec mit dem versteckten Feld ist auch nicht schlecht und sicher deutlich performanter. Dafür habe ich bei meiner Lösung mit den Ansichten die Möglichkeit, auch mehrere Felder pro Option anzuzeigen und dem Benutzer auch ein Sortieren nach verschiedenen Kriterien zu ermöglichen.


    So sieht der Anfang meines Codes aus:


    Entscheidend sind die beiden SQLs am Ende. Mit dem ersten sollen die Daten über die aufgerufene StoredProcedure aufbereitet und in eine temporäre Tabelle kopiert werden. Mit dem zweiten SQL wird diese temporäre Tabelle dann abgefragt.


    Beide Befehle sind korrekt und funktionieren, wenn ich sie direkt in MySQL eingebe. Ich meine, sie hätten auch in Notes funktioniert, aber vermutlich hat mir jetzt das Rechenzentrum den Saft abgedeht und ich kann von Notes aus die StoredProcedure nicht mehr aufrufen. Der direkte Zugriff auf eine Tabelle wie im zweiten SQL-Befehl funktioniert aber. Beim Aufruf der StoredProcedure aus Notes passiert dagegen gar nichts. Auch keine Fehlermeldung. :-?


    Naja, vielleicht finde ich ja das Problem noch.


    Viele Grüße,


    Oli

    Keiner eine Idee?


    Sehr schade. Dann wird's wohl keine Lösung für das Problem geben. :cry:


    Weiß jemand, ob dieses Problem in Notes 8 gelöst wird?



    CU,


    Oli

    Hallo!


    Ich hätte mal wieder ein blödes Notes-Problem.


    Ich will die Punkte einer Dialogliste basierend auf einer Datenbank aufbauen. Allerdings ist kein direkter Zugriff auf eine Daten-Tabelle möglich, sondern die Daten müssen erst über eine StoredProcedure aufbereitet und in einer temporären Tabelle bereitgestellt werden.


    Eigentlich wollte ich folgenden Code verwenden. Notes mag aber nicht, wie es soll.


    Code
    @DbCommand("ODBC"; "Datenbank"; "Benutzer"; "Passwort"; "call getValid('Titel','2008-11-05 000:00:00',0); SELECT Titel FROM TempTable":"");


    Wenn ich nur einen SELECT auf eine bestehende Tabelle in den Befehl einbaue, dann funktioniert die Abfrage. Die Datenbankverbindung ist also ok.


    In LotusScript kriege ich die Befehle sauber abgearbeitet, indem ich zwei Queries mit den beiden SQL-Befehlen hintereinander ausführe. In der Macro-Sprache funktioniert aber auch das nicht. Möglicherweise, weil der erste SQL-Befehl kein Ergebnis zurückliefert? Als Fehlermeldung kriege ich "could not execute db-function".


    Alternativ könnte ich die Abfragen über Lotus Script ausführen.
    Da ist mir aber bisher kein Weg eingefallen, die Werte dann in die Dialogliste zu schreiben. Außer für jeden Datenbank-Eintrag ein Notes-Dokument zu erstellen und dann in der Dialogliste eine spezielle Ansicht mit diesen Dokumenten aufzurufen. Aber das will ich eigentlich vermeiden, weil die Werte sich eben bei jedem Aufruf ändern können.


    Vielleicht hat ja jemand eine tolle Idee.


    Viele Grüße


    Oli

    Hallo!


    Unser Admin hat inzwischen (schon vor ein paar Tagen) einen Administrationsserver eingetragen und die Aktion "Alle Leser- und Autorenfelder ändern" eingestellt. Das Sachbearbeiter-Feld ist ein Autorenfeld. Da steht aber immer noch der alte Name drin.


    Liegt das nun daran, dass diese Namensänderung für den AdminP schon als erledigt gilt und er deswegen keinen Handlungsbedarf sieht? Sprich: Der AdminP greift erst bei künftigen Änderungen? Oder hat der AdminP ein Problem? Der Server selbst, als auch die Gruppe LocalDomainServers haben Manager-Rechte auf die Datenbank.


    CU,


    Oli

    Zitat

    Natürlich kann das nicht gehen, denn bei einer Selektionsformel kannst du keinen Lookup machen, da die Werte da ja noch nicht belegt sind.


    Hmm. Diese Logik will sich mir noch nicht ganz erschließen. An den Werten in den Adressbüchern ändert sich doch nichts und Felder aus den zu selektierenden Dokumenten (in diesem Fall "Sachbearbeiter") kann ich doch in anderen Ansichtsauswahl-Formeln auch verwenden.
    Aber bei Notes hat mich die Logik schon öfters verlassen. :hammer:


    Zitat

    Wenn bei euch der AdminP richtig läuft und die Sachbearbeiter Felder Namensfelder sind, dann sollte der AdminP beim Umbenennen von Usern diese Felder ebenfalls mitändern.


    Aha! Wunderbar. Dann kläre ich das mit dem Admin, dass da ein Admin-Server eingetragen wird und dann sollte die Selektion über einen Vergleich mit @Username wieder funktionieren, richtig?


    Zitat

    Auf die Art und Weise wirst du es auf jeden Fall nicht hinbekommen.


    Das habe ich gemerkt ... :roll:



    Vielen Dank für die schnelle Hilfe.
    Werde das gleich versuchen ...


    Oli

    Hallo!


    Mir raucht mal wieder der Kopf wegen Notes. :-?


    Ich stehe vor dem Problem, dass ich dem Benutzer in einer Ansicht nur die Dokumente anzeigen will, für die er als Sachbearbeiter eingetragen ist. Dafür steht sein Name als CN im Feld Sachbearbeiter.


    Die Ansicht ist eine öffentliche Ansicht, die bei der ersten Benutzung privat wird. Bisher hatte ich einfach den Username mit dem Feld Sachbearbeiter verglichen. Das hat auch funktioniert. Jetzt gab's aber Namensänderungen durch Heirat und dann passt der Username auf einmal nicht mehr mit dem gespeicherten Sachbearbeiter zusammen.


    Ich habe mir daher folgende Formel gebastelt:
    @IsMember(@UserName; @NameLookup([Exhaustive]; Sachbearbeiter; "Fullname"))


    In meiner Test-Maske funktioniert die wie gewünscht und liefert mir 0 oder 1, je nach dem, ob der Sachbearbeiter dem aktuellen Benutzer entspricht. Auch wenn ich einen "alten Namen" im Feld Sachbearbeiter verwende.
    Stelle ich jedoch ein SELECT davor und verwende die Formel in der Ansichtsauswahl tut sich gar nichts. :wuet:


    IsMember und UserName funktionieren auf jeden Fall im Kontext der Ansichtsauswahl. Das habe ich auch schon mit anderen Formeln getestet. Bei NameLookup steht zumindest in der Online-Hilfe nicht, dass es bei der Ansichtsauswahl nicht tut.


    Hat jemand eine Ahnung, wo mein Fehler (oder der von Notes) liegt oder hat jemand eine Idee, wie man das Problem eleganter lösen könnte?


    Vielen Dank schon mal,


    Oli