Das Notes Forum

Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: matzge am 28.07.03 - 08:16:11

Titel: Wert eines Feldes bei mehreren Doks ändern
Beitrag 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
Titel: Re:Wert eines Feldes bei mehreren Doks ändern
Beitrag von: Glombi am 28.07.03 - 10:56:40
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
Titel: Re:Wert eines Feldes bei mehreren Doks ändern
Beitrag von: matzge am 28.07.03 - 11:21:52
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
Titel: Re:Wert eines Feldes bei mehreren Doks ändern
Beitrag von: Doc Torte am 28.07.03 - 11:33:27
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...

Titel: Re:Wert eines Feldes bei mehreren Doks ändern
Beitrag von: Glombi am 28.07.03 - 11:34:03
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
Titel: Re:Wert eines Feldes bei mehreren Doks ändern
Beitrag von: matzge am 28.07.03 - 11:50:36
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
Titel: Re:Wert eines Feldes bei mehreren Doks ändern
Beitrag von: Glombi am 28.07.03 - 11:58:26
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
Titel: Re:Wert eines Feldes bei mehreren Doks ändern
Beitrag von: klaussal am 28.07.03 - 11:59:10
... jau, geht auch.
Titel: Re:Wert eines Feldes bei mehreren Doks ändern
Beitrag von: matzge am 28.07.03 - 12:05:13
DANKE!

Ich werde dann eher eine eigene Form nehmen

Nochmal herzlichen Dank an alle die mir geholfen haben

Grüße

Roland
Titel: Re:Wert eines Feldes bei mehreren Doks ändern
Beitrag von: matzge am 28.07.03 - 14:10:00
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
Titel: Re:Wert eines Feldes bei mehreren Doks ändern
Beitrag von: Glombi am 28.07.03 - 14:18:05
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
Titel: Re:Wert eines Feldes bei mehreren Doks ändern
Beitrag von: matzge am 28.07.03 - 14:30:54
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
Titel: Re:Wert eines Feldes bei mehreren Doks ändern
Beitrag von: klaussal am 28.07.03 - 14:38:48
... hat script die felder im doc geändert ?
lass mal den debugger mitlaufen, da kann man schön verfolgen, was sache ist.
Titel: Re:Wert eines Feldes bei mehreren Doks ändern
Beitrag von: Glombi am 28.07.03 - 14:43:59
Evtl. liegt es hier dran:
doc.Lokation = dialogdoc.LokationNeu(0)

Prüf mal ob der Feldname wirklich "Lokation" ist.

Andreas
Titel: Re:Wert eines Feldes bei mehreren Doks ändern
Beitrag von: eknori am 28.07.03 - 14:46:44
Hätte hier
http://www.atnotes.de/index.php?board=9;action=display;threadid=3052;start=0

auch noch was anzubieten
Titel: Re:Wert eines Feldes bei mehreren Doks ändern
Beitrag von: matzge am 28.07.03 - 15:11:08
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