Das Notes Forum
Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: jens1979 am 09.12.03 - 13:18:03
-
Hallo mal wieder,
heute hab ich glaub ich 'ne ziehmliche Anfängerfrage. Ich habe eine kleine Produkt-DB geschrieben.
Mein Problem ist das ich eine Maske habe in die eich als erstes eine Artikelnummer eingebe und dazu einige Informationen.
Nun habe ich eine Ansicht in der ich die Produkte nach Artikelnummern sortiert aufgelistet habe. Wenn allerdings ein Artikel mit der Artikelnummer 1000 bereits vorhanden ist und ein neuer über die Maske eingepfliegt werden soll und dieser versehentlich wieder mit der 1000 abgespeichert wird, sind nun 2 Artikel in der Ansicht.
Das möchte ich unterbinden indem Notes den Datensatz des 2. Artikels gar nich speichert sondern zurückgibt das dieser bereits vorhanden ist.
Bzw. wäre die ideale Lösung das Notes anbietet entweder die Artikelnummer zu ändern oder den Artikel mit der eingegebenen zu öffnen und diesen zu bearbeiten.
Vorerst würde die erste Möglichkeit aber ausreichen.
Danke Jens
-
... auf die schnelle ....
Mit LS per view.GetDocumentByKey( "Artikelnummer" , True ) versuchen das Dokument mit dieser Artikelnummer zu finden. Wenn vorhanden, dann öffen, ansonsten abspeichern...
Dim ws As New NotesUIWorkspace
Dim session As New NotesSession
Dim db As NotesDatabase
Dim view As NotesView
Dim doc As NotesDocument
Set db = session.CurrentDatabase
Set view = db.getView("(ByArticel)") ' # 1. Spalte sortiert nach Artikelnummer
Set doc = view.GetDocumentByKey( "<deine Artikelnummer>" , True )
If doc Is Nothing Then
' # ... setzen der Feldwerte und abschließendes Speichern.
Else
Call ws.EditDocument( true , doc ) ' # öffnen zum Bearbeiten
End if
ata
-
Das funktioniert aber nur mit neuen Dokumenten - wird ein bereits vorhandenes editiert, dann heisst es: "In Ewigkeit - Amen !", sprach die Endlosschleife ;-)
Bernhard
-
... mit Fehlermeldung sieht das dann eben so aus...
If doc Is Nothing Then
' # ... setzen der Feldwerte und abschließendes Speichern.
Else
MsgBox "Es gibt bereits einen Artikel mit dieser Numer"
Exit Sub ' # oder Exit Function - je nachdem
End if
ata
-
Die Fehlermeldung behebt aber nicht das Problem. Wird ein bestehendes Dokument bearbeitet, gibt es immer einen Treffer mit GetDocumentByKey. Man kann nun einfach die UNIDs vergleichen, um festzustellen, ob es sich um das gerade aktuelle Dokument handelt oder um einen "Doppelgänger".
Bernhard
-
Oder auf IsNewDoc überprüfen
-
Dann muss man aber die Artikelnummer für bereits gespeicherte Docs unbearbeitet machen ;-)
-
Hi
erstmal danke für die schnelle Hilfe.
Unbearbeitbar ist die Artikelnummer für bereits gespeicherte Dokumente ... da sollten also eigentlich keine Probleme auftreten.
Ich werd das mit dem Script jetzt gleich mal probieren und dann ein Feedback geben .... Danke erstmal.
Jens
-
Du meinst unbearbeitbar? Oder dann auf Aenderungen angemessen reagieren.
Hat eigentlich jemand Erfahrungen mit der Vieh-Eigenschaft "Generate Unique Keys in Index (ODBX-Access)? Das ist doch im Grunde genommen dasselbe Problem, aber ich habs noch nie ausprobiert, was da geschieht.
-
Ok, hab grad selber mal nachgeschaut, offenbar wird da die Anzeige von Dupplikaten unterdrückt, ansonsten passiert nix, ist also nicht wirklich brauchbar -- meistens.
-
Hab mich jetzt mal an den Script probiert.
Allerdings bekomme ich immer wieder die Fehlermeldung "Object variable not set" , hab hier im Forum schon ein bissel rumgeschaut aber nicht wirlkich was passendes für mich gefunden ... die Erklärung in der Designer Hilfe sagt mir auch nicht so viel ... hab Ihr vieleicht noch ne Idee woran das liegen könnte?
Danke Jens
Achja ich hab den Script erstmal nur zum Testen hinter ne Schaltfläche gelegt (falls Ihr die Info benötigt)
-
Bei solchen Meldungen immer den Debugger bemühen.
Und den ganzen Code posten.
Als alter Kaffeesatzleser: Stimmt der Name der Ansicht ?
Bernhard
-
OK hier mal der Code
Sub Click(Source As Button)
Dim ws As New NotesUIWorkspace
Dim session As New NotesSession
Dim db As NotesDatabase
Dim view As NotesView
Dim doc As NotesDocument
Set db = session.CurrentDatabase
Set view = db.getView( "Artikelnummer" ) ' # 1. Spalte sortiert nach Artikelnummer
Set doc = view.GetDocumentByKey( "12345" , True )
If doc Is Nothing Then
Messagebox "nicht vorhanden"
Else
Messagebox "vorhanden"
End If
End Sub
Ich hoffe das hilft weiter
-
OK die fehlermeldung kommt jetzt net mehr.
Es lag wirklich am Ansichtsnamen, ich verstehs zwar nicht, weil die Ansicht "Artikelnummer" vorhanden ist, aber ich hab jetzt den Namen auf "all" geändert und der Fehler bleibt weg.
Jetzt hab ich allerdings das Problem das er mir immer sagt "nicht vorhanden" egal ob die Artikelnummer drin ist oder nicht.
Jens
-
Hallo nochmal,
mir ist da grad noch was aufgefallen, keine meiner Ansichten ist kategorisiert. Kann es damit zusammenhängen das ich immer das "nicht vorhanden" Feedback bekomme?
Wenn ja wie kategorisiere ich die Ansicht ... hat bis jetzt irgendwie nicht so einfach hingehauen ... d.h. ich bekomme immer wieder "nicht vorhanden".
Gruß Jens
-
Nochmals: Was sagt denn nun der Debugger ? Du stocherst ja sonst im Nebel - und wir mit !
Wenn Du eine Ansicht "all" hast und damit der Fehler "Object variable not set" nicht mehr auftritt, dann heisst das im Umkehrschluss, dass Deine Ansicht "Artikelnummer" eben doch nicht vorhanden ist.
Kategorisierung ist überhaupt nicht erforderlich in diesem Zusammenhang - nur Sortierung der 1. Spalte. Aber Du schreibst ja, dass dies der Fall ist.
Deine Ansicht "all": Hat die überhaupt die Artikelnummer als erste sortierte Spalte ?
Bernhard
-
in der Ansicht "all" hab ich nach der Artikelnummer sortiert.
Frage : Wie komme ich in den Script-Debugger (sorry das sind Grundlagen ich weiß aber ich fang grad mit LS an)
Jens
-
Menü: Datei - Extras - Debug Lotus Script...
-
OK hab den Debugger wieder .... das hat mich schon mal ne Stunde gekostet den zu finden ... sorry für die dämliche Frage ... geb gleich ein feedback
-
in der Ansicht "all" hab ich nach der Artikelnummer sortiert
Jens, versuche bitte, so genau wie möglich Deine Probleme zu beschreiben (das hilft Dir immer auch gleich selber), und lies unsere Postings ganz genau.
Du schreibst, Du hast "all" nach der Artikelnummer sortiert. Ist die Artikelnummer aber auch die 1. Spalte ?
Steht in der Spalte dann auch wirklich das, was Du erwartest ?
Wir finden des Pudels Kern schon noch ;-)
Bernhard
-
Also der Debugger gibt keinerlei Fehlermeldung.
Wenn ich mir die Variablen anschaue klappt das alles (für mein empfinden) gut bis zur stelle "Set doc = viewGetDocument..."
Die Variable bleibt leer ... das sollte ja eigentlich nicht sein ... oder ?
Dadurch führt er dann die 1. Anweisung der Schleife aus und nicht die zweite.
Heist also die Variable DOC bleibt leer
Jens
-
Hi Berhard,
in meiner Ansicht "all" gibts nur eine Spalte und zwar "Artikelnummer" (abgesehen von der Notesspalte wo die Symbole für Löschen und so hinkommen).
Die Spalte ist aufsteigend sortiert und ihr Typ ist Standart.
Jens
P.S. Danke für eure Geduld
-
Danke für eure Geduld
He, kein Problem !
Wenn doc nicht instantiiert wird, dann findet er Deinen Eintrag wirklich nicht in der Ansicht. Was nun wirklich sehr mystisch ist.
Bist Du sicher, dass in Deiner Ansicht wirklich das steht, was Du erwartest ? Suchst Du nach Artikelnummer = "4711", das Feld ist aber im Dokument (und damit in der Ansicht) vom Typ Zahl ?
Hast Du nach mehr als einem Deiner Artikelnummern bei Deinen Tests gesucht ?
Bernhard
-
Hi Bernhard,
ja meine Artikelnummer ist vom Typ Zahl! Ist das ein Problem, hab ich da was übersehen.
Jens
-
Okay danke Berhard ... es funktioniert ... ich hatte irgendwie beim basteln was mit "" versaut.
Ich danke euch erstmal allen.
Aber keine Sorge das was bestimmt net die letzte Frage ;)
THX Jens
-
Artikelnummern und ähnliches = Zahl: Das ist ein no-no. Auch wenn es momentan zu klappen scheint, kommt dann auf einmal eine Artikelnummer "00212" - als Zahl nicht abbildbar. Bei HR kommt jemand auf den Trichter, Azubis bei der Personalnummer mit "A" beginnen zu lassen etc. pp.
Nur normieren sollte man diese "Nummern", wenn machbar: Alle gleiche Stellenzahl.
HTH,
Bernhard
-
Mein Problem ist: Wenn ich die Artikelnummer zum Text mache werden die Einträge in meiner Ansicht nicht mehr sortiert
Jens
-
Dochdoch, das sortiert bestimmt, nur nicht mehr numerisch sondern alphabetisch, und das Sortverfahren ist nicht dasselbe. Aber für das Auslesen ist das nicht weiter von Bedeutung, GetDocumentByKey findet das richtige Dokument, wenn sortiert ist.
Genau deshalb hat Bernhard übrigens vorher gesagt, die Anzahl Stellen müssen immer gleich sein, dann spielt der Unterschied keine Rolle mehr.