Domino 9 und frühere Versionen > ND8: Entwicklung

Feld wandelt seinen Typ

(1/2) > >>

Christian Kröll:
Guten Abend,

ich arbeite gerade an einer Maske, die ich für einen Dialog verwenden will. In einem virtuellen Dokument lege ich alle notwendigen Items an, rufe die die Maske dann als Dialogbox auf, gebe Werte ein und verarbeite die weiter. Alles soweit klar. Mich beschäftigt ein Feld, dass sein Typ wandelt:

Es ist ein Optionsfeld, dass in der Maske auch als Optionsfeld angelegt ist. Rufe ich die Maske über "Erstellen" im Client auf, ist das Feld auch tatsächlich ein Dialogfeld. Rufe ich die Maske aber via Script als Dialogmaske auf, ist das Feld ein Textfeld mit Wert "0"...

Ist vermutlich nicht relevant, aber hier der Code zum Aufruf der Dialogmaske (gekürzt):

--- Code: --- Dim dialog_doc As New Notesdocument(db)
Forall f In doc.Fields 'legt alle Items für Text-Values an
Set dialog_item = New NotesItem(dialog_doc,f,"")
End Forall
Forall f In doc.NumberFields 'legt alle Items für Zahlen-Values an
Set dialog_item = New NotesItem(dialog_doc,f,0)
End Forall
Set dialog_item = New NotesItem(dialog_doc,"art_Heissfolie","nein") 'belegt das Optionsfeld Heissfolie vor
Set dialog_item = New NotesItem(dialog_doc,"art_Schutzlack","nein") 'belegt das Optionsfeld Schutzlack vor

--- Ende Code ---

Was habe ich versucht?
Vorbelegung weggelassen, Feld gelöscht - und zwar auch richtig! - gespeichert, neu angelegt. Nochmals gelöscht via Ytria. Dokumente auf Basis der Maske gibt es nicht. Witzigerweise betrifft es nur das eine Feld, fünf andere Optionsfelder funktionieren tadellos, so auch das Feld art_Heissfolie.

Ich hoffe, dass Ihr auch zu diesem Problem  - wie so oft - einige Ideen oder Lösungen habt.

Viele Grüße

koehlerbv:
Irgendwie kommt mir das Ganze extrem schräg vor:

Du gehst Forall Fields in Document - und erzeugst ein neues Item? Wozu - wenn es dazu keine Pendants im DialogDoc gibt? Wozu, wenn es die dort doch gibt (danach gibt es sie ja doppelt)?

NotesDocument.NumberFields? Doku?

Wenn Du mehr zu diesen "Warums" schreibst, findet sich bestimmt auch leicht die nachvollziehbare Ursache Deines scheinabren Phänomens.

Bernhard

Peter Klett:
Doppelt können die Items eigentlich nicht sein, denn dialog_doc ist ja ein ganz neues, es sei denn, danach kommt ein Script, was noch ein Item mit gleichem Namen erzeugt. Vor allem erstaunt mich der Wert "0", wo kommt der denn her?

Dim dialog_doc As New Notesdocument(db)

Ich persönlich finde aber diese Set dialog_item-Nummer auch etwas komisch, obwohl das so bestimmt auch auch geht (wär mir viel zuviel Schreiberei, da bin ich echt zu faul zu).

Versuch doch mal

dialog_doc.art_Schutzlack = "nein"

So setze ich Werte in Items, auch wenn es die noch garnicht gibt. Und kopiere ich mir das versehentlich an andere Stelle nochmal (nur theorethisch), passiert nichts.

dialog_doc.art_Schutzlack = "nein"
dialog_doc.art_Schutzlack = "nein"

Erzeugt ein Item mit dem Wert nein, ist nur unnötiger Code.

Set dialog_item = New NotesItem(dialog_doc,"art_Schutzlack","nein")
Set dialog_item = New NotesItem(dialog_doc,"art_Schutzlack","nein")

erzeugt sicher 2 Items, eins zuviel. Das dürfte zwar die Darstellungsweise eines Optionsfeldes nicht verändern, aber vielleicht ist da noch was anderes schief.

pram:

--- Zitat ---Doppelt können die Items eigentlich nicht sein
--- Ende Zitat ---

Doch, wenn in doc.Fields und doc.NumberFields (beides Items im (vermutlich) Maskendokument)  ein Feld doppelt vorkommt.
Ich erzeuge Items meist mit dialog_doc.replaceItemValue(x,y)

dir geht es rein um das Anzeigeproblem? In der Tat sehr merkwürdig. kannst du das DialogDoc mal abspeichern und mit den Ytria-Tools untersuchen?
Im Dokument ist der Feldtyp ja nicht definiert, aber vielleicht kommt das zum Feld zugehörige Item doppelt oder mit falschem Typ vor
(Optionsfelder müssen normalerweise immer vom Typ Text sein)

Gruß
Roland

Christian Kröll:
Ihr wart wieder echt fleissig - einfach super!

Also: Die items für das temporäre Dokument sind in zwei Feldern definiert und daraus erstelle ich mir die Items für das temporäre Dokument. Die Maske, die den Dialog aufruft, hat keine korrespondierenden Felder. Mit der Trennung in Text und Zahl erleichtere ich mir die spätere Verarbeitung, da die Varianten in MultiValue_Items  gespeichert werden.

Nach dem zitierten Code kommt nur noch der Dialogaufruf rc = Dialogbox(....,dialog_doc). Die Dialogmaske selber bearbeitet das "kaputte" Feld nicht. Bislang ist da nicht ein Funken Code hinterlegt.

Ich werde es morgen mit Euren Vorschlägen versuchen und werde auch nochmals prüfen, ob die ItemNamen nicht doch noch in den beiden Definitionsfeldern stecken. Wenn es daran liegt, dann gibt bei der nächsten Wies'n für Euch eine Frei-Maß!

Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln