Das Notes Forum
Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: Axel am 27.05.03 - 15:18:50
-
Hi,
ich will auch mal wieder ein Problem haben. :-\
Ich habe in einer Maske verschiedene Felder mit Aliaswerten. Bei einer Designanpassung wurden jetzt korrespondierende Felder eingefügt, d.h. in diesen Feldern sollen die Werte stehen, welche der User im Frontend sieht. Bei neuen Dokumenten ist das alles kein Problem Aber ich muß alle bestehenden Dokumente anpassen.
Gibt es eine Möglichkeit mit Backend-Funktionen an die Werte heranzukommen, die der User im Frontend sieht.
Axel
-
Hi Axel
geht das nicht ganz einfach mit einerm Agenten der in die neuen Felder die Werte aus den alten reinschreibt ?
Das was der user im frontend sieht liegt doch im ermessen des Designers oder ? *grummel ... *denk verstehe die Frage nicht so 100%
- vielleicht hilft es wenn du ein Beispiel gibst.
cu
-
Ich denke mal Axel meint sowas
Anzeige1 | 1
Anzeige2 | 2
Das ist jetzt eine gute Frage. Wenn du die Schlüsselwerte in externe Dokumente (Konfigurationsdokumente) ausgelagert hast, dann sollte das kein großes Problem darstellen. Einfach im Konfigurationsdokument das/die entsprechende(n) Feld(er) auslesen und parsen. Hast du das aber direkt in der Maske definiert, dann kannst du meiner Meinung nach nur noch über die Design Klassen da ran kommen. Die findest du ja in der Sandbox.
Thomas
-
Hi,
in der Datenbank gibt es eine Maske mit mehreren Schlüsselwortfeldern. Dort sind werte mit Aliasen hinterlegt.
z.B. Vorplanung | 2
Bei der Überarbeitung wurden jetzt Felder hinzugefügt, in denen der Text eingefügt werden soll, den der User in diesen Schlüsselwortfeldern im Frontend sieht, also hier im Beispiel Vorplanung.
Bei neuen Dokumenten ist das kein Problem. Es gibt im QuerySave-Event die entsprechenden Anweisungen:
doc.TextFeld = uidoc.FieldGetText("Schlüsselwortfeld")
In der DB sind aber bereits fast 2000 Doks enthalten. Die müssen angepasst werden. Manuell aufrufen und speichern ist bei der Menge indiskutabel. Per Agent stürtzt mir der Client nach ca. 5 Dokumenten mit einer Redbox ab.
Deshalb war meine Frage ob es möglich ist mit Backend-Funktionen an den Text "Vorplanung" ranzukommen.
Axel
-
Wenn du den Agent mit der Design Klasse aufbaust, das Design der DB holst und anschliesend die Form ausliest und dann das entsprechende Item des dadurch zur Verfügung gestellten Notes Dokumentes ausliest, hast du zumindest schon mal die potentiellen Werte.
Anschließend der Reihe nach deine Dokumente in Backend auslesen, Feld hinzufügen und abspeichern, dürfte eigentlich da alles im Backend läuft ohne Probleme vonstatten gehen.
Noch einfacher ist es natürlich (warum bin ich nicht gleich drauf gekommen), wenn du einfach mit Case abfragst und entsprechend direkt zuordnest. Du weist ja schließlich, welche Werte in den Schlüsselwörtern vorkommen können.
Warum stürzt dein Agent ab? Was hast du da versucht zu machen?
Thomas
-
also wenn das nicht schon Änderungen gemacht worden sind müsste es gehen weil du kennst den Wert und den Alias.
im Querysave ... wenn Feld1 = 2 dann setze den Feld1 = "Vorplanung"
- schwierig wird es wenn verschiedene Werte im Design drinstanden mit dem gleichen Alias(verschiedene Designänderungen), weil nur der Alias gespeichert wurde
Vorplanung | 2
Vorplanung Werk1 | 2
cu
-
Das mit den verschiedenen Werten ist nicht schwierig, das ist unmöglich, es sei denn du kannst das noch von anderen Faktoren in der Form abhängig machen.
Thomas
-
Hi,
die Werte liegen in externen Konfig-Dokumenten und haben sich nicht geändert.
Mir wird nichts anderes übrig bleiben, als die Dokumente per Agent anzupassen. Ich hab' gedacht es geht einfacher.
Axel
-
Hi,
sodale, die Tat ist vollbracht.
Ich habe, Gott sei dank alle Werte in Konfigurationsdokumenten stehen.
Ich hab mir eine Ansicht bebastelt in der in der ersten Spalte die entsprechenden Feldnamen stehen. Damit kann ich per GetDocumentByKey daraufzugreifen. Dann fülle ich damit eine Liste und anhand der Aliase aus dem Feld ermittle ich die entsprechenden Werte und schreibe sie in ein Array. Diese Array weise ich dann dem zweiten Feld zu. Fertig.
Ich weiß, klingt kompliziert, aber hier ist der entsprechende Code:
...
Set keydoc = view.GetDocumentByKey("HOAI_II", True )
For idx = 0 To Ubound(keydoc.Values)
HOAI_II_List(RightBack(keydoc.Values(idx), "| ")) = LeftBack(keydoc.Values(idx), " |")
Next 'For idx = 0 To Ubound(keydoc.Values)
...
...
Redim tmpArray(0)
If doc.HOAI_II(0) <> "" Then
For idx = 0 To Ubound(doc.HOAI_II)
If Iselement(HOAI_II_List(doc.HOAI_II(idx))) Then
Redim Preserve tmpArray(idx)
tmpArray(idx) = HOAI_II_List(doc.HOAI_II(idx))
End If
Next 'For idx = 0 To Ubound(doc.HOAI_II)
doc.HOAI_II_Text = tmparray
End If 'If doc.HOAI_II(0) <> "" Then
...
Ist vielleicht nicht unbedingt der beste Programmierstil, aber was soll's. Es musste, wie so oft, schnell gehen und es funktioniert.
Danke nochmals allen, die sich gedanken gemacht haben.
Axel