Autor Thema: Feldwerte und ein Bild in neues Dokument übernehmen  (Gelesen 4769 mal)

Offline smoky

  • Aktives Mitglied
  • ***
  • Beiträge: 107
  • Ich liebe dieses Forum!
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

Offline Tode

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 6.871
  • Geschlecht: Männlich
  • Geht nicht, gibt's (fast) nicht... *g*
Re: Feldwerte und ein Bild in neues Dokument übernehmen
« Antwort #1 am: 08.06.17 - 17:31:46 »
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...
Gruss
Torsten (Tode)

P.S.: Da mein Nickname immer mal wieder für Verwirrung sorgt: Tode hat NICHTS mit Tod zu tun. So klingt es einfach, wenn ein 2- Jähriger versucht "Torsten" zu sagen... das klingt dann so: "Tooode" (langes O, das r, s und n werden verschluckt, das t wird zum badischen d)

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Feldwerte und ein Bild in neues Dokument übernehmen
« Antwort #2 am: 08.06.17 - 18:54:32 »
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

Offline Tode

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 6.871
  • Geschlecht: Männlich
  • Geht nicht, gibt's (fast) nicht... *g*
Re: Feldwerte und ein Bild in neues Dokument übernehmen
« Antwort #3 am: 09.06.17 - 08:28:09 »
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" ) )

Oder so:
Code
varItems = Split( "Feld1,Feld2,Feld3,Feld4,Feld5" , "," )
Forall strItem in varItems
    Call doc.Replaceitemvalue( strItem, uidoc.document.GetItemValue( strItem ) )
End Forall

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 )

ersetzen, wo man vielleicht noch spezielles Handling oder spezielle Umsetzungen implementiert.
« Letzte Änderung: 09.06.17 - 08:29:59 von Tode »
Gruss
Torsten (Tode)

P.S.: Da mein Nickname immer mal wieder für Verwirrung sorgt: Tode hat NICHTS mit Tod zu tun. So klingt es einfach, wenn ein 2- Jähriger versucht "Torsten" zu sagen... das klingt dann so: "Tooode" (langes O, das r, s und n werden verschluckt, das t wird zum badischen d)

Offline Andrew Harder

  • Senior Mitglied
  • ****
  • Beiträge: 295
  • Geschlecht: Männlich
Re: Feldwerte und ein Bild in neues Dokument übernehmen
« Antwort #4 am: 09.06.17 - 11:25:06 »
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 )
könnte man nehmen
Code
Set doc = uidoc.document.CopyToDatabase( notesDatabase ) ( db )

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.
Andy

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Feldwerte und ein Bild in neues Dokument übernehmen
« Antwort #5 am: 09.06.17 - 23:36:17 »
Spielen wir uns ein bisschen die Bälle zu...

Torsten, Andrew: Prima, AtNotes-like und irgendwie nahe "genial". Hoffen wir, es nützt Christine. Aber die macht schon etwas daraus ;)

Danke,
Bernhard

Offline thkn777

  • Aktives Mitglied
  • ***
  • Beiträge: 176
Re: Feldwerte und ein Bild in neues Dokument übernehmen
« Antwort #6 am: 12.06.17 - 14:06:17 »
@smoky
Wie erstellst Du das Bild?

#1 - Zu Deinem ersten Ansatz:
- Ich habe hier zwei Masken Q und Z (Quelle und Ziel), in jeder ein RichText-Feld (jeweils gleicher Name "RichTextFeld").
- In der zweiten Maske Z steht im Vorgabewert dieses Feldes "@ThisValue".
- In der Maske Z ist "Formeln übernehmen Werte aus gewähltem Dokument" aktiviert.
 
Wenn ich jetzt in Maske Q in das RichTextFeld Text, ein Bild aus der Zwischenablage und ein Attachment einfüge und das Dokument speichere und dann in einer Ansicht auf dem Dokument stehe und ein Dokument mit Maske Z erzeuge, sind scheinbar alle Items korrekt übertragen worden, ABER wenn ich das Attachment versuche anzuzeigen, steht im Dialog Länge = 4 Byte und Kodierung 0Ä<schwarzes Quadrat> und das Öffnen geht schief mit Fehler "Element des Dokuments nicht gefunden". Das Inline-Bild dagegen wird ordentlich angezeigt.

--> also falls es "nur" ein Inline Bild sein soll, könnte das so gehen für Dich

#2 ReplaceItemValue ("Tode's Methode")
Überträgt bei mir (Notes R8.5.3) nur Text, keine Inline Bilder und keine Attachments. Kann in R9 natürlich anders sein, hab ich aber grad nicht da.

#4 doc.copyItemToDocument ("Deine Script Lösung")
Funktioniert bei mir. Du musst nur eben ALLE Items, die aus dem Quell-Dokument in's Ziel übertragen werden sollen, kopieren (Tip: einfach Tode's Lösung anpassen).

#4 doc.CopyToDatabase und doc.CopyAllItems
Wären andere Möglichkeiten. Es werden alle Elemente des RichTextFeldes übertragen, Attachments werden mit korrekter Länge angezeigt und können geöffnet werden. Ja, das ggf. nachträglich erforderliche Herauslöschen überflüssiger Items ist lästig, aber irgendwas ist ja immer ;)

Viel Erfolg,
Th.

Offline smoky

  • Aktives Mitglied
  • ***
  • Beiträge: 107
  • Ich liebe dieses Forum!
Re: Feldwerte und ein Bild in neues Dokument übernehmen
« Antwort #7 am: 12.06.17 - 17:42:23 »
Danke für die vielen Gedanken und Möglichkeiten - ich finde euch Spitze

Zuerst wollte ich alle benötigten Felder kopieren (wären weniger gewesen als alle kopieren und die nicht benötigten zu löschen).
Das neue Dokument wird als Mail weitergeschickt, das heißt ich brauche dort eigentlich sowieso alle Informationen gesammelt in einem Feld. Also habe ich mir nun den Haupttext der aus verschiedenen Feldinhalten und etwas erklärenden Text dazu bereits im Quell Dokument berechnen lassen - das heißt ich habe mir das berechnete Feld vom Zweit Dokument einfach ins Quell Dokument kopiert :-),  somit hatte ich nur mehr ein Feld zusätzlich zum Bild, Empfänger und zum Subject.

lg
Christine

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Feldwerte und ein Bild in neues Dokument übernehmen
« Antwort #8 am: 12.06.17 - 17:45:47 »
Aus unserer Bibliothek, doc ist das markierte Dokument, newdoc das mit Compose erstellte

Code
		If doc.HasItem ("$FILE") Then
			'Alle Items entfernen, die nicht $FILE oder Typ RICHTEXT sind. Das Dokument darf danach NICHT gespeichert werden!!!
			ForAll item In doc.Items
				If Not item Is Nothing Then
					If Not (item.Name = "$FILE" Or item.Type = RICHTEXT) Then
						'Beim Löschen von Richtextfeldern ab 5.0.10 werden die $Files mit gelöscht
						'deshalb müssen die Richtextfelder erhalten bleiben
						Call doc.RemoveItem (item.Name)
					End If
				End If
			End ForAll
			'$FILE-Items und RICHTEXT-Felder kopieren
			Call doc.CopyAllItems (newdoc)
		End If

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Feldwerte und ein Bild in neues Dokument übernehmen
« Antwort #9 am: 12.06.17 - 18:42:55 »
Das neue Dokument wird als Mail weitergeschickt, das heißt ich brauche dort eigentlich sowieso alle Informationen gesammelt in einem Feld.

Dann mach das doch - wenn es nicht auf dem Server laufen soll - über Copy & Paste im UI. Schlimmstenfalls flackert da beim Juhser mal kurz der Monitor, sonst kriegt der da nix mit.

Bernhard

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz