Das Notes Forum

Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: Mich90 am 08.06.11 - 10:58:07

Titel: Textinhalt in anderes Dokument kopieren
Beitrag von: Mich90 am 08.06.11 - 10:58:07
Guten Morgen liebe Community,

ich möchte von einem Dokument den Inhalt eines Textfeldes in ein Textfeld eines anderen Dokuments kopieren. Dabei müssen allerdings die Ländernamen der beiden Dokumente übereinstimmen  ;)

Meines Erachtens müsste das folgendermaßen gehen:


Nun habe ich angefangen:
Code
Sub Click(Source As Button)
	Dim session As New NotesSession
	Dim ws As New NotesUIWorkspace
	Dim uidoc As NotesUIDocument
	Dim db As NotesDatabase
	Dim feldZuKopieren As NotesItem
	Dim land As NotesItem
	Dim feldZuKopierenInhalt  As String
	
	Set uidoc = ws.CurrentDocument
	Set db = session.CurrentDatabase
	Set doc = New NotesDocument ( db )
	
     'hole aus dem geöffneten Dokument den Inhalt des zu kopierenden Feldes
	Set feldZuKopieren = uidoc.Document.GetFirstItem("fldProd_Indications_User")
	Set feldZuKopierenInhalt = feldZuKopieren.Text
	Msgbox feldZuKopierenInhalt   'Ausgabe zum Test
	
	'Land-Feld speichern 
	Set land = uidoc.Document.GetFirstItem("fldCou_Name")
	Msgbox land.Text
	
	'hier werden alle Dokumente der Maske frmCatalog_Country durchlaufen
	Dim coll As NotesDocumentCollection
	Dim docAdmin As NotesDocument
	Set coll=db.search(|Form="frmCatalog_Country"|, Nothing, 0) 
	Set docAdmin=coll.getfirstdocument
	While Not docAdmin Is Nothing
		'prüfen, ob Land übereinstimmt
		If docAdmin.GetFirstItem("fldCou_Name") = land Then
			'Inhalt des Feldes ersetzen
			docAdmin.ReplaceItemValue("fldProd_Indications", feldZuKopierenInhalt) 'FEHLER
			'Dokument speichern und schließen
			Call docAdmin.Save(1,1)
		End If
		'nächstes Dokument
		Set docAdmin=coll.getnextdocument(docAdmin)
	Wend
	
	
	Call uidoc.Document.Save(1,1) 'aktuelles Dokument am Ende noch speichern
End Sub

Ist meine Logik im Quelltext korrekt? Ich bekomme in der Zeile mit
docAdmin.ReplaceItemValue("fldProd_Indications", feldZuKopierenInhalt)
einen Fehler "Illegal use of parentheses".
Woran liegt das? ???

Gruß,
Micha
Titel: Re: Textinhalt in anderes Dokument kopieren
Beitrag von: klaussal am 08.06.11 - 11:08:42
In der Designer-Hilfe steht die Lösung...    :o
Titel: Re: Textinhalt in anderes Dokument kopieren
Beitrag von: m3 am 08.06.11 - 11:11:41
Um den Tipp von Klauss etwas spezifischer zu machen:
Du willst ein Set oder Call vor dem Aufruf (ReplaceItemValue liefert ja was zurück).


Und noch ein Nota-Bene aus der Designer-Hilfe zu ReplaceItemValue:
Zitat
Do not use this method to replace the value of a rich text item (or MIME entity) unless you want to change it to a text item. To replace the contents of a rich text item, use NotesDocument.RemoveItem or NotesRichTextItem.Remove to delete the old item, NotesDocument.CreateRichTextItem to create a new one with the same name, and NotesRichTextItem.AppendText and other methods to provide the new content.
Titel: Re: Textinhalt in anderes Dokument kopieren
Beitrag von: marschul am 08.06.11 - 11:23:21
Alternative: Wenn Du kein Set oder Call verwendest, dann lass die Klammern für die Parameter weg - passend zur Fehlermeldung.
Titel: Re: Textinhalt in anderes Dokument kopieren
Beitrag von: klaussal am 08.06.11 - 11:23:42
Wenn das Dokument gefunden wurde, ist dann die Schleife nicht zu Ende ?
Titel: Re: Textinhalt in anderes Dokument kopieren
Beitrag von: marschul am 08.06.11 - 11:26:27
Noch'n Tipp: True ist in Script nicht 1, sondern -1 (i.G. zur Formelsprache).
Titel: Re: Textinhalt in anderes Dokument kopieren
Beitrag von: m3 am 08.06.11 - 11:29:07
Noch'n Tipp: True ist in Script nicht 1, sondern -1 (i.G. zur Formelsprache).
Wobei "True" bzw. "False" als Werte sowieso lesbarer sind.
Titel: Re: Textinhalt in anderes Dokument kopieren
Beitrag von: marschul am 08.06.11 - 11:35:39
Noch'n Tipp: True ist in Script nicht 1, sondern -1 (i.G. zur Formelsprache).
Wobei "True" bzw. "False" als Werte sowieso lesbarer sind.

Jupp, würde ich auch immer so schreiben - True/False liest sich einfach besser und eine Zahl kann ja auch eine andere Bedeutung in einer Parameterliste haben...
Titel: Re: Textinhalt in anderes Dokument kopieren
Beitrag von: Mich90 am 08.06.11 - 13:37:34
Hallo,

vielen Dank für die vielen Tipps.

Ich habe mein Skript nun folgendermaßen geändert:

Code
Sub Click(Source As Button)
	Dim session As New NotesSession
	Dim ws As New NotesUIWorkspace
	Dim uidoc As NotesUIDocument
	Dim db As NotesDatabase
	Dim land As NotesItem
	Dim feldZuKopierenIndication As NotesItem
	Dim feldZuKopierenInhaltIndication  As String
	Dim feldZuKopierenAI As NotesItem
	Dim feldZuKopierenInhaltAI  As String
	Dim feldZuKopierenBrand As NotesItem
	Dim feldZuKopierenInhaltBrand  As String
	Dim neu As String
	
	Set uidoc = ws.CurrentDocument
	Set db = session.CurrentDatabase
	Set doc = New NotesDocument ( db )
	
     'hole aus dem geöffneten Dokument den Inhalt des zu kopierenden Feldes
	Set feldZuKopierenIndication = uidoc.Document.GetFirstItem("fldProd_Indications_User")
	feldZuKopierenInhaltIndication = feldZuKopierenIndication.Text
		'Simikolons ersetzen
	feldZuKopierenInhaltIndication = Evaluate({@ReplaceSubstring("} & feldZuKopierenInhaltIndication & {";";Chr(10)}) 'FEHLER
	
	Msgbox feldZuKopierenInhaltIndication   'Ausgabe zum Test
	Set feldZuKopierenAI = uidoc.Document.GetFirstItem("fldProd_Products_User")
	feldZuKopierenInhaltAI = feldZuKopierenAI.Text
	Set feldZuKopierenBrand = uidoc.Document.GetFirstItem("fldProd_Brands_User")
	feldZuKopierenInhaltBrand = feldZuKopierenBrand.Text
	
	'Land-Feld speichern 
	Set land = uidoc.Document.GetFirstItem("fldCou_Name")
	Msgbox land.Text
	
	'hier werden alle Dokumente der Maske frmCatalog_Country durchlaufen
	Dim coll As NotesDocumentCollection
	Dim docAdmin As NotesDocument
	Dim itemCopy As NotesItem
	Set coll=db.search(|Form="frmCatalog_Country"|, Nothing, 0) 
	Set docAdmin=coll.getfirstdocument
	While Not docAdmin Is Nothing
		'prüfen, ob Land übereinstimmt
		If docAdmin.GetFirstItem("fldCou_Name").Text = land.Text Then
			'Inhalt des Feldes ersetzen
			docAdmin.fldProd_Indications = feldZuKopierenInhaltIndication
			docAdmin.fldProd_Products = feldZuKopierenInhaltAI
			docAdmin.fldProd_Brands = feldZuKopierenInhaltBrand
			'Dokument speichern und schließen
			'Call docAdmin.Save(True,True)
			Call ws.EditDocument(True,docAdmin)
		End If
		'nächstes Dokument
		Set docAdmin=coll.getnextdocument(docAdmin)
	Wend
	Call uidoc.Document.Save(True,True) 'aktuelles Dokument am Ende noch speichern
End Sub

Wie man sieht, möchte ich aus einem Feld (bzw. später aus mehreren) die ";" zu "Chr(10)", also einem Zeilenumbruch (Klick auf Enter) ändern. Hierbei handelt es sich um Felder mit Mehrfacheinträgen. Diese werden beim auslesen wohl mit einem ";" getrennt, was mein Einfügen natürlich wieder geändert werden müsste...

Das Ersetzen klappt allerdings nicht (siehe Kommentar : Fehler). Hier wird der Fehler:
Operation failed
ausgegeben. Das ist natürlich nicht wirklich aussagekräftig.
Kann mir an der Stelle jemand weiterhelfen?

Danke schön  ^-^
Titel: Re: Textinhalt in anderes Dokument kopieren
Beitrag von: Mitch am 08.06.11 - 14:16:51
Naja, du hast Fehler in der Formel die du ins Evaluate steckst.

Tipp: Schreibe die Formel erstmal auf, ohne da direkt deine dynamischen Parameter einzubauen. Das ist einfacher, da man mit den Anführungszeichen und Semikolons nicht so schnell durcheinander kommt:

@ReplaceSubstring("hieristtext"; ";"; @NewLine)

Danach kannst du deine Variable einbauen:

{@ReplaceSubstring("} & meinevariable$ & {"; ";" ; @NewLine)}

Und schon klappt's. ;)
Titel: Re: Textinhalt in anderes Dokument kopieren
Beitrag von: Mich90 am 08.06.11 - 14:39:26
Stimmt, da war ein Fehler drin.
Code
feldZuKopierenInhaltIndication = Evaluate({@ReplaceSubstring("} & feldZuKopierenInhaltIndication & {"; ";" ; @NewLine)})

ergibt aber leider ein "Type Mismatch"  ???
Das versteh ich nicht wirklich.
Titel: Re: Textinhalt in anderes Dokument kopieren
Beitrag von: koehlerbv am 08.06.11 - 14:42:03
Liest Du auch die Hilfe? Was gibt Evaluate zurück? Bestimmt keinen String ...

Bernhard
Titel: Re: Textinhalt in anderes Dokument kopieren
Beitrag von: Mich90 am 08.06.11 - 14:46:24
Liest Du auch die Hilfe? Was gibt Evaluate zurück? Bestimmt keinen String ...

Bernhard

Peinlich, danke  :)