Domino 9 und frühere Versionen > ND9: Entwicklung
Feldwerte und ein Bild in neues Dokument übernehmen
smoky:
Hallo,
Ich würde mal wieder gerne euren Input in Anspruch nehmen :-)
Von einem Dokument aus wird ein neues mit einer anderen Maske erstellt (Aktion mit Compose) und bestimmte Feldwerte übernommen (Formulas inherit values from selected document). Das funktioniert ohne Probleme wie es sollte.
Nun soll auch noch ein Bild aus einem Rich Text Feld übernommen werden. Und hier habe ich nun ein Problem. Das Bild klappt nicht auf diese Weise.
Und wenn ich das neue Dokument statt dessen damit erstelle
Set itemRT = uidoc.document.getfirstitem("Bild")
Set doc = New NotesDocument ( db )
doc.Form="Memo"
Call itemRT.copyitemtodocument(doc, "Bild")
Call doc.Save( True, True )
Call ws.EditDocument(True, doc)
habe ich zwar das Bild aber sonst keine Werte des "alten" Dokuments, muß ich jetzt im Script jeden Feld Inhalt mit kopieren oder sehe ich nur den Wald vor lauter Bäumen nicht?
lg
Christine
Tode:
Das Problem ist: Wenn das Dokument per Script erstellt wird, dann zieht die Einstellung für inherit nicht mehr, weil die nur für "neue" Dokumente zieht, und das Dokument ist nicht neu (@IsNewDoc wird falsch liefern, egal ob Du Dein doc.Save auskommentierst oder nicht)...
Also ja: Du wirst nicht drumrum kommen, die Felder ebenfalls per Script zu kopieren...
koehlerbv:
Christine, unter Umständen lohnt sich bei der Bestimmung des einzusetzenden Verfahrens der Itemübernahme auch eine "Volkszählung":
Ist es mehr Aufwand, jedes gewünschte Item einzeln in das Zieldokument zu übernehmen, oder ist es einfacher, ein CopyAllItems zu machen und anschliessend mit Remove die unerwünschten Items wieder aus dem Zieldokument zu kicken (Achtung: Bei RichTextItems musst Du dann ggf. mit einer Schleife arbeiten, da bei grossen Inhalten diese in mehre Items gleichen Namens verteilt werden).
Je nach Programmier-Aufwand nutze ich auch beide Verfahren.
Torstens Erklärung wegen des Versagens des Inherits bedarf selbstverständlich keiner Ergänzung.
HTH,
Bernhard
Tode:
Spielen wir uns ein bisschen die Bälle zu...
Man kann 5 Felder so übertragen:
--- Code: ---Call doc.ReplaceItemValue( "Feld1" , uidoc.document.Getitemvalue( "Feld1" ) )
Call doc.ReplaceItemValue( "Feld2" , uidoc.document.Getitemvalue( "Feld2" ) )
Call doc.ReplaceItemValue( "Feld3" , uidoc.document.Getitemvalue( "Feld3" ) )
Call doc.ReplaceItemValue( "Feld4" , uidoc.document.Getitemvalue( "Feld4" ) )
Call doc.ReplaceItemValue( "Feld5" , uidoc.document.Getitemvalue( "Feld5" ) )
--- Ende Code ---
Oder so:
--- Code: ---varItems = Split( "Feld1,Feld2,Feld3,Feld4,Feld5" , "," )
Forall strItem in varItems
Call doc.Replaceitemvalue( strItem, uidoc.document.GetItemValue( strItem ) )
End Forall
--- Ende Code ---
varItems kann man natürlich befüllen wie man will, ich mache das häufig so, wie im Beispiel, weil ich dann einfach per Komma neue Felder hinzufügen kann, und es "kurz" ist von der Schreibweise her.
Wie man sieht: Bei 4 Feldern ist der "BreakEven" an Anzahl Codezeilen erreicht....
Weiterer Vorteil der zweiten Methode: Man kann die Zeile einfach auch durch einen Funktionsaufruf ala
--- Code: ---Call CopyItem( doc, uidoc.document, strItem )
--- Ende Code ---
ersetzen, wo man vielleicht noch spezielles Handling oder spezielle Umsetzungen implementiert.
Andrew Harder:
Ich hätte da noch einen Ansatz, der das Problem genau von der anderen Seite aus aufgreift.
Dannach basiert das Ganze natürlich auf die Ideen der Vorposter.
Voraussetzungen die dafür gegeben sein sollten:
- uidoc ist kein neues Dokument
- das neue doc wird eh gespeichert, bevor es zum editieren kommt
- es sollte nicht störend sein, das alle rtitems mitkopiert werden
- die Itemanzahl der Items welche "zu viel" sind sollte nicht all zu zu hoch sein
Wenn das alles passt, dann könnte man folgendermassen vorgehen:
statt
--- Code: ---Set doc = New NotesDocument ( db )
--- Ende Code ---
könnte man nehmen
--- Code: ---Set doc = uidoc.document.CopyToDatabase( notesDatabase ) ( db )
--- Ende Code ---
Das neue Dokument ist damit eine Kopie der Version des uidoc das gespeichert ist.
Die Form überschreibst Du ja vor dem speichern, das würde soweit passen.
Wie Bernhard schon geschrieben hat, müssten die Items dann zu viel sind vor dem speichern dann gelöscht werden.
Dazu könnte man die Methode von Torsten nutzen, müsste man nur auf removeItem umstellen.
Kenne die Datenlage bei diesem Dokument nicht. Aber vielleicht passt es ja zu dem Fall.
Navigation
[0] Themen-Index
[#] Nächste Seite
Zur normalen Ansicht wechseln