Das Notes Forum
Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: matzge am 28.07.03 - 08:16:11
-
Hallo!
Bei meiner Bibliotheksdatenbank habe ich folgendes Problem.
Es wird jedem Buch (d.h. jedem Dokument) der Wert "Location" zugeordnet.
Ich möchte nun, dass der Benutzer Bücher von einer bestimmten Location in eine andere buchen kann.
D.h. es müsste in allen Dokumenten die einen bestimmten Locationwert besitzen die neue Location eingetragen werden.
Habt ihr vielleicht eine Idee wie ich dieses Problem (ohne Programmieren in LotusScript) lösen könnte.
Grüße und Danke
Roland
-
Hi,
wenn es denn unbedingt mit der @Formelsprache sein muss, könnte es so gehen:
Erstelle einen "Einmal ausführen" Agenten. Dort ruft Du eine @Promptbox auf, die die Lokationen anzeigt. Der User wählt eine aus.
Der Wert wird in die NOTES.INI geschreiben (bspw "EnvAlteLokation").
Dann in einer weiteren Promptbox die neue Lokation auswählen und auch in NOTES.INI schreiben.
Oder alternativ Auswahl der alten und neuen per Dialogbox.
Dann einen zweiten Agenten aufrufen:
Dieser läuft über alle Dokumente der Datenbank (oder der Ansicht)
Erste Zeile im Agenten
SELECT Lokation = @Environment("EnvAlteLokation");
FIELD Lokation := @Environment("EnvNeueLokation");
Für sowas ist aber Script deutlich besser geeignet.
Andreas
-
Hallo Andreas!
Das ganze sieht ja relativ kompliziert aus.
Da ich ein Anfänger in Lotus Notes bin habe ich mich noch nicht mit LotusScript
auseinandergesetzt.
Vielleicht könntest du mir in Script etwas schreiben (falls es nicht zuviel Aufwand für dich ist.
Ansonsten: Ich kenne nur die Function @Prompt und finde auch die @Promptbox Function nicht. Könntest du mir erklären wie die Sache mit der Promtbox dann funktionieren kann? V.a. wie ich ein einer Promtbox ein Auswahlfeld bekomme das alle Locations anzeigt.
Grüße und Danke
Roalnd
-
vielleict wäre es dann angebracht mal die Designer-Hilfe zu lesen, wer nämlich einige Zeilen weiterliest, der findet
@Prompt([OkCancelEdit];
und da haben wirs auch schon, damit kann ich Eingaben vom User entgegen nehmen und wenn man sich die Beispiele anschaut, findet man auch schon Teile der Lösung...
-
Hi,
hier ein ausführlicherer Ansatz:
Du musst eine Ansicht erstellen, die in der 1. Spalte nach dem Feld Lokation sortiert (oder kategorisiert) ist.
Erstelle eine Teilmaske DialogLokation. In diese Teilmaske baust Du 2 Felder:
Alte Lokation - Feldname LokationAlt
Neue Lokation - Feldname LokationNeu
Die Felder werden jeweils mit @DbColumn als Schlüsselwortliste berechnet.
@Trim(@Unique(@DbColumn("","";"Name der Ansicht mit Lokationen",1)))
Der User wählt also hier aus.
Mit Script sähe das dann so aus - Formel als Agent, Einmal ausführen
dim ws as NotesUIWorkspace
dim session as NotesSession
dim db as NotesDatabase
dim view as NotesView
dim dc as NotesDocumentCollection
dim doc as NotesDocument
dim dialogdoc as NotesDocument
dim ret as Integer
set ws = New NotesUIWorkspace
set session = New NotesSession
set db = session.CurrentDatabase
set view = db.GetView("Name der Ansicht mit Lokationen")
'Rufe Dialogbox auf
set dialogdoc = db.CreateDocument
ret = ws.Dialogbox("Name der Teilmaske",true,true,false,false,false,false,"Lokation wechseln",dialogdoc)
if not ret then exit sub 'Abbruch, falls Abbrechen gewählt wurde
'Bilde Collection aller Dokument mit der alten Lokation
set dc = view.GetAllDocumentsbyKey(dialogdoc.LokationAlt(0), true )
'Iteriere über alle Dokumente und setze neue Lokation ein
set doc = dc.GetFirstDocument
while not (doc is Nothing)
doc.Lokation = dialogdoc.LokationNeu(0)
call doc.Save(false,true,true)
set doc = dc.GetNextDocument(doc)
wend
Andreas
-
Hallo Andreas!
Danke für das Script. Die Ansicht habe ich bereits erstellt und das Script verstehe ich auch so einigermaßen.
Nur noch eine Frage. Du sprichst von einer Teilmaske. Reicht es wenn ich eine Form mit den enprechenden Feldern erstelle?
Grüße und herzlichen Dank
Roland
-
Hallo Roland,
wenn ich eine Dialogmaske erstelle, nehme ich immer Teilmasken und nenne die dann "(DialogSinnUndZweck) | DialogSinnUndZweck".
Damit hat man eine saubere Trennung bei den Teilmasken. Du kannst aber auch eine "normale" Maske nehmen.
Andreas
-
... jau, geht auch.
-
DANKE!
Ich werde dann eher eine eigene Form nehmen
Nochmal herzlichen Dank an alle die mir geholfen haben
Grüße
Roland
-
Hallo Andreas!
Leider habe ich mich etwas zu früh gefreut.
Ich habe jetzt alles so erstellt wie du gesagt hast.
Das Script habe ich bei Initialize eingefügt. Das Dialogfeld wird ordnungsgemäß eingefügt. Wenn ich auf Ok klicke, dann wird das Programm (so scheint es zumindest) ausgeführt. Leider ändern sich die Lokationen der Bücher nicht.
(Ich habe die Ansicht refreshed)
Hast du eine Idee wo der Fehler liegen könnte.
Grüße und Danke
Roland
-
Hallo Roland,
poste Deinen Code bitte mal.
Und gib bitte an, wie die Felder in der Dialogmaske heißen.
Ich gehe davon aus, dass in der View alle Dokumente stehen, die geändert werden sollen.
Andreas
-
Hallo Andreas!
Also hier der Code:
Sub Initialize
Dim ws As NotesUIWorkspace
Dim session As NotesSession
Dim db As NotesDatabase
Dim view As NotesView
Dim dc As NotesDocumentCollection
Dim doc As NotesDocument
Dim dialogdoc As NotesDocument
Dim ret As Integer
Set ws = New NotesUIWorkspace
Set session = New NotesSession
Set db = session.CurrentDatabase
Set view = db.GetView("ExchangeView")
'Rufe Dialogbox auf
Set dialogdoc = db.CreateDocument
ret = ws.Dialogbox("DialogLokation",True,True,False,False,False,False,"Lokation wechseln",dialogdoc)
If Not ret Then Exit Sub 'Abbruch, falls Abbrechen gewählt wurde
'Bilde Collection aller Dokument mit der alten Lokation
Set dc = view.GetAllDocumentsbyKey(dialogdoc.LokationAlt(0), True )
'Iteriere über alle Dokumente und setze neue Lokation ein
Set doc = dc.GetFirstDocument
While Not (doc Is Nothing)
doc.Lokation = dialogdoc.LokationNeu(0)
Call doc.Save(False,True,True)
Set doc = dc.GetNextDocument(doc)
Wend
End Sub
Die Felder im Form (Name der Form: DialogLokation):LokationAlt, LokationNeu.
Wenn ich mir den View anzeigen lasse, so beinhaltet er alle Dokumente in der Datenbank. Eben geordnet nach der Lokation (nicht kategorisiert).
Grüße und Danke
Roland
-
... hat script die felder im doc geändert ?
lass mal den debugger mitlaufen, da kann man schön verfolgen, was sache ist.
-
Evtl. liegt es hier dran:
doc.Lokation = dialogdoc.LokationNeu(0)
Prüf mal ob der Feldname wirklich "Lokation" ist.
Andreas
-
Hätte hier
http://www.atnotes.de/index.php?board=9;action=display;threadid=3052;start=0
auch noch was anzubieten
-
Hallo!
Danke für die Hilfe!
Es lag tatsächlich an Feldnamen "Lokation". Sollte eigentlich "Location" heißen.
Jetzt funktioniert die Sache sehr gut.
Danke und viele Grüße
Roland