Ok, jetzt weiss ich, dass DA ... Directory Assistance/ Verzeichnisverwaltung bedeutet... Hilft mir aber auch nicht wirklich weiter, da ich kein Domino Admin bin, sondern nur ein angehender Notesentwickler in der Ausbildung. Darum bitte ich euch etwas genauer zu sein. Die Hilfe von Notes hat mir dazu auch nicht wirklich viel gegeben ausser einen Glossareintrag und eine Methode, womit ich die DA setzen kann.
Beiträge von Angerfist
-
-
versuch mal:
doc.Save(True, False)und schau dir in der Hilfe die Beschreibung zu save, der klasse NotesDocument an.
-
Zitat
erstell dir eine DA und ein weiteres Adressbuch, in dem die User stehen.
Was meinst du mit DA? Habe meinen Kollegen schon gefragt was das bedeuten könnte, da kam nur: Dienstanweisung???... gibt in dem Zusammenhang aber keinen Sinn
Ein weiteres Adressbuch ist kein Problem. Mir fehlt jetzt nur die Schnittstelle zwischen dem neuen Adressbuch und der eigenen Login-Maske. War damit die DA gemeint? Und wie bekomme ich das hin?
Kannst du das bitte etwas mehr ausführen?
Danke schonmal für deine Hilfe.
-
Hallo,
bei einem Web-Zugriff auf eine Datenbank bekomme ich immer die standart Authentifizierung von Lotus Notes, welche auf die names.nsf zugreift. Ich würde aber gerne eine eigene Datenbank entwickeln, in der ich Benutzer anlegen kann (auch welche die nicht in der names.nsf stehen und keine Mail-Adresse haben, also externe) mit Passwort und Zugriffsrechten. Die Datenbank anlegen und verwalten sollte nicht das Problem sein. Ich weiss nur nicht, wie ich dem Server sage, dass er meine Loginmaske zu meiner DB benutzen soll. Und wie diese Maske dann letzendlich die Web-Session aufbaut. Wobei ich auf eine eigene Maske auch getrost verzichten kann, wenn ich der Standartmaske sagen könnte sie soll ausschliesslich nur meine DB abfragen und nicht die names.nsf.
Ich habe schon stundenrund geggooglet und auch das Forum durchsucht, doch ich finde einfach nichts. Vielleicht könnt ihr mir ja weiterhelfen.
Danke
-
Sry aber ich würde es nicht posten, wenn ich es nicht eben ausprobiert hätte. Bei mir hat es in einer stinknormalen Ansicht, die von jedem gesehn werden kann funktioniert.
Oder habe ich ihn jetzt komplett falsch verstanden?
-
-
-
Hab das selbe Problem!
Und ja, wir nutzen McAfee aber das es daran liegt kann ich schonmal ausschliesse, da ich das ganze mal im Abgesicherten-Modus mit Netzwerkunterstützung ausprobiert habe.
Habe mir auch schon das Log angeschaut, aber werde daraus nicht schlau.
Das LND-Tool habe ich mir auch installiert, da kommt aber genauso wenig bei raus.
Ich connecte mit dem 7er Client auf einen 6er Server. Aber das Problem tritt auch bei Kollegen auf, die den 6er Client haben. Seltsam ist auch, das es nicht immer passiert.
-
Warum machst du dir eine eigene ID?
Jedes Dokument bekommt doch automatisch eine ID. Und ich habe das eben getestet, wenn ich ein Dokument kopiere, dann hat die Kopie auch eine neue ID.
Die UniqueID eines Dokumentes kannst du dir über die Spaltenformel
in einer Ansicht anzeigen lassen. (Sie ist 32 Zeichen lang)
-
Hi,
kannst du mal den Code der Erzeugung des Dokumentes posten?
Hast du alle Felder (auch die versteckten - sowie z.B. das Form-Feld) entsprechend gesetzt?
Und zu b) schau dir mal
und
an. Damit kannst du ein Dokument eindeutig identifizieren.
-
Wie ist das Kalenderdokument denn aufgebaut? Ist es der Standart Noteskalender von IBM, ohne das er verändert wurde? Und wie sind die Zugriffsrechte vergeben? Mittels ACL oder mittels Autoren-/Leser-Feld. Ist der Kalender lokal oder liegt er auf dem Server. Alle solche Informationen wären nicht schlecht.
-
Also Problem gelöst?
-
Versuch es doch mal hiermit:
Code
Alles anzeigenanswer := @Prompt([YesNo];"Ticket wird abgeschickt";"Wenn Sie das Ticket jetzt abschicken, können Sie die Anforderung nicht mehr ändern." + @NewLine + "Sind Sie sicher?"); @If(answer = 1; @Do( @SetField("T_ab";1); @Command([FileSave]); @Command([FileCloseWindow]) ); "" )
Da du in dem 6 Forum gepostet hast, gehe ich davon aus, dass du auch eine Notes Version >=6. In dem Fall brauchst du FIELD T_ab := T_ab; garnicht mehr. Das benötigst du nur in Versionen <6.
Das Mit dem FIELD SaveOptions := "1"; würde ich auch ganz raus nehmen. Wenn du es nirgends auf "0" gestzt hast, ist es auch überflüssig, da es standartmässig sowieso auf "1" steht.
Und noch eine Frage:
Hast du in irgendeinem Event, welches nach dem Speichern ausgeführt wird einen Code stehen? Z.B. im Postsave oder im Queryclose?
-
Demnach ruft ein UIDoc.Close aber immer noch nicht das Querysave auf. Das Close sorgt nur dafür, dass abgefragt wird, ob gespeichert werden soll, wenn die Property ModifiedSinceSaved True ist. Wenn in dieser Abfrage "Ja" gewählt wird, liegt hinter dem "Ja" Button so etwas wie ein UIDoc.Save, welches dann das Querysave aufruft.
Sry, aber irgendwie haben wir aneinander vorbei geredet.
Gruß Gerrit
-
Hallo Bernhard,
erstmal bitte ich um Entschuldigung. Und möchte dir Danken, dass ich jetzt wieder etwas dazu gelernt habe.
Ich habe mir gleich mal schnell eine Testmaske gebaut um zu überprüfen, was du geschrieben hast und ja, nur das Save des Front-Ends (UIDoc.Save) ruft das Querysave auf. Das Back-End tut dies nicht!
Allerdings war meine Suche nach dem ModifiedSincedSaved nicht sehr erfolgreich. Somit konnte ich nicht überprüfen ob ein Close wirklich das Querysave aufruft, wenn ich kein Save des Front-End mache. Habe zum testen aber auch hier einmal das Close vom Front-End aufgerufen (UIDoc.Close). Da ich wie gesagt die Property ModifiedSincedSaved nicht finden konnte, hat er das Querysave an der stelle natürlich nicht ausgeführt. Es sei denn ich habe bei der Frage ob ich die Änderungen speichern möchte "Ja" Gewählt, wobei hinter dem "Ja"-Button aber auch eigendlich wieder nur ein UIDoc.Save liegt.
-
Hallo,
Habe das mal mit Mehrfachwerten gelöst.
Folgender maßen:Du Musst 12 Text-Felder erstellen, da du 4 Felder loggen willst.
Alle 12 Felder müssen MMehrfachwerte unterstützen. Die Felder sollten wie folgt heissen:Feld_1Neu | Feld_1Datum | Feld_1Autor
Feld_2Neu | Feld_2Datum | Feld_2Autor
Feld_3Neu | Feld_3Datum | Feld_3Autor
Feld_4Neu | Feld_4Datum | Feld_4AutorDann habe ich im Querysave folgenden Code dazu (Habe den schnell überflogen, da ich noch mehr im Querysave habe musste cih den Code abändern für dich. hoffe ich habe nichts übersehen):
Code
Alles anzeigen' Session ist bei jedem Programm erforderlich. ' Alle Daten der aktuallen Notesarbeitsistzung sind hier vorhanden. Dim session As New NotesSession ' Speicher für eine Datenbank Dim db As NotesDatabase ' Die Datenbank der aktuellen Session holen (*.nsf) Set db = session.CurrentDatabase ' Speicher für den aktuellen ungespeicherte Arbeitsplatz Dim workspace As New NotesUIWorkspace ' Speicher für das aktuelle temporäre Dokument Dim uidoc As NotesUIDocument ' Das aktuelle temporäre Dokument aus dem Arbeitsplatz hohlen Set uidoc = workspace.CurrentDocument ' Speicher für das aktuelle Stammdokument im System Dim doc As NotesDocument ' Das aktuelle Stammdokument aus dem uidoc holen und im doc Speicher ablegen Set doc = uidoc.Document ' Speicher für ein Feld Dim item As NotesItem ' Speicher für den aktuellen Benutzernamen Dim user As String ' Namensformat: „Vorname Nachname“ umgewandeln. FormatName = Set user = session.CreateName(session.UserName).Common() ' Speicher für das aktuelle Datum Dim datum As String ' Wandelt das aktuelle Datum in einen String um datum=Format(Now(),"dd/mm/yyyy hh:mm:ss") ' ################# START> Änderungen verfolgen und speichern ############## ' Die boolesche Variable changed dient dazu festzustellen, ' ob mindestens ein Eintrag geändert wurde Dim changed As Boolean changed=False ' Um den Ablauf zu automatisieren, Dim form As NotesForm Set form = db.GetForm("XXX") ' Name der Maske, wo sich die zu überprüfenden Felder befinden ' Eine Stringliste mit den Feldern, die auf Änderungen überprüft werden sollen Dim fieldnames(3) As String fieldnames(0)="Feld_1" fieldnames(1)="Feld_2" fieldnames(2)="Feld_3" fieldnames(3)="Feld_4" ' Die Änderungen werden in einem Feld als Mehrfachwerte gespeichert. ' Jedes mal wenn sich der Wert ändert, wird das Feld um den neuen Wert erweitert. Dim NeueWerte As Variant ' Speicher für den letzten eingetragenen Wert in dem Mehrfachwertefeld Dim lastNeuerWert As String ' Temporärer Integer-Speicher Dim temp As Integer ' Eine Schleife, die die Stringliste mit den oben angegebenen Feldnamen durchgeht. Forall fieldname In fieldnames ' Holen der aktuellen Werte des aktuellen Feldes, welches durch die Felderliste ' definiert ist NeueWerte=doc.GetItemValue(fieldname+"Neu") ' Holen des zuletzt eingetragenen Wertes aus dem Mehrfachwertefeld lastNeuerWert=NeueWerte(Ubound(NeueWerte)) ' Holen des aktuellen Feldes, welches durch die Felderliste definiert ist Set item=doc.GetFirstItem(fieldname) ' Holen des Typs des Feldes – Text, Number, etc. temp=item.Type ' Für den Typ Number wurde die Zahl 768 von den Notesentwicklern definiert. ' Dies muss hier abgefragt werden, da ein Number-Feld seinen Wert in einem Integer ' speichert und ein Text-Feld seinen Wert in einem String. ' Wenn dies hier nicht berücksichtig werden würde, ' so würde es ein Typemissmatch geben. ' Wenn es ein Number-Feld ist, ' so muss der zurück gelieferte Integer in einen String umgewandelt werden. If(temp=768) Then ' Holen des eingegebenen Wertes neuerWert=Str(doc.GetItemValue(fieldname)(0)) Else ' Holen des eingegebenen Wertes neuerWert=doc.GetItemValue(fieldname)(0) End If ' Wenn die Eingabe von dem zuletzt in der History eingetragenen Wert abweicht If(Not lastNeuerWert=neuerWert) Then ' Anfangs ist die History leer. ' Somit wird die neue Eingabe immer eine Änderung sein, welche es aber nicht ist. ' Dies wird hier abgefragt und dem entsprechend changed auf true gesetzt oder ' auf den Standartwert false gelassen. If(Not lastNeuerWert="") Then changed=True End If ' Holen des aktuellen Feldes aus der History, ' welches durch die Felderliste definiert ist Set item = doc.GetFirstItem( fieldname+"Neu" ) ' Die neue Eingabe wird dem entsprechenden Mehrfachwerte-Feld hinzugefügt item.AppendToTextList(neuerWert) ' Holen des aktuellen Feldes aus der History, ' welches durch die Felderliste definiert ist Set item = doc.GetFirstItem( fieldname+"Datum" ) ' Das Datum der Eingabe (Jetzt) wird dem entsprechenden Mehrfachwerte-Feld ' hinzugefügt item.AppendToTextList(datum) ' Holen des aktuellen Feldes aus der History, ' welches durch die Felderliste definiert ist Set item = doc.GetFirstItem( fieldname+"Autor" ) ' Der aktuelle User (der Bearbeiter) wird dem entsprechenden Mehrfachwerte-Feld ' hinzugefügt item.AppendToTextList(user) End If End Forall ' ################# ENDE> Änderungen verfolgen und speichern #########
-
Hallo,
ZitatBeim Close wird dann das Sub Querysave Event des Formulars ausgelöst.
Das ist mir neu xD
Also normalerweise wird Querysave beim versuch das Dokument zu speichern ausgelöst. Du machst doc.save(False,False), dann geht er in das Querysave und nachdem er mit dem Querysave durch ist, speichert er erst wirklich. Nach dem eigentlichen Speichern wird Postsave aufgerufen. Wenn du nicht speicherst gibt es auch kein Aufruf des Querysave's.
Dem nach denke ich hatte uwevino schon ganz recht mit seinem Code:
call doc.Save(True, False, True) ' Wobei ich als Parameter (False,False) übergeben würde.
doc.SaveOptions="0" -
Sicher, dass die Meldung nicht vom Agenten selbst kommt?
-
Hallo,
folgendes:
ZitatErgänzung: Das Feld SaveOptions führt wohl auch lediglich dazu, daß die Frage "Möchten Sie ihre Änderungen speichern?" nicht aufplöppt.
Im Endeffeckt führt es dazu. Aber man sollte auch wissen, warum! Wenn SaveOptions auf null gesetzt wird, dann wird auch nicht gespeichert. Das ist dann so als ob man beim "möchten Sie speichern?" "Nein" wählt.
Wenn SaveOptions auf eins gesetzt wird, dann passiert im Grunde nichts anderes als sonst auch, da eins der Defaultwert von SaveOptions ist. Also kannst du dir das setzen des Feldes auch sparen, wenn du es nicht an anderer Stelle auf null gesetzt hast.