Autor Thema: Richtextfeld kopieren ... ohjemine...  (Gelesen 4159 mal)

Offline Worn

  • Aktives Mitglied
  • ***
  • Beiträge: 171
  • Geschlecht: Männlich
Richtextfeld kopieren ... ohjemine...
« am: 29.04.09 - 14:41:56 »
Hallo zusammen,

vorweg: ich habe gesucht und auch gefunden und ausprobiert ohne Ende. ABER...

Problem:

Ich habe ein RT Feld. Dieses enthält ein eingebettetes Bild. (also kein Anhang)
Ich möchte im QueryClose des Dokuments dieses Bild aus dem RT Feld in ein zweites
RT Feld kopieren. Dieses Feld soll berechnet und später sichtbar sein.

Also:

Code

Sub Queryclose(Source As Notesuidocument, Continue As Variant)
	Dim doc As NotesDocument
	Dim ritem1 As Variant
	Dim ritem2 As NotesRichTextItem
	
	Set doc = source.Document
	
	Set ritem1 = doc.GetFirstItem("ri1")
	
	Set ritem2 = doc.GetFirstItem("ri2")
	
	Call ritem2.AppendRTItem(ritem1)
	
End Sub


In ri1 ist das Bild eigebettet. Das soll nun einfach in ri2 rein. Ich bin sicher, dass es hier im Forum schon 20 mal irgendwo steht ... nur die Beispiele die ich gefunden hab mit ähnlichem Code wie oben laufen alle nicht bei mir...

Man stoße mich mit der Nase drauf!

Ich danke euch..

Worn
Wer für alles offen ist der kann ja nich ganz dicht sein!

Offline jBubbleBoy

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.290
  • Geschlecht: Männlich
Re: Richtextfeld kopieren ... ohjemine...
« Antwort #1 am: 29.04.09 - 14:56:09 »
doc.save true, false

oder?
Gruss Erik :: Freelancer :: KI-Dev, Notes, Java, Web, VBA und DomNav 2.5 / NSE 0.16 / OLI 2.0

--
Nur ein toter Bug, ist ein guter Bug!

Offline ascabg

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.697
  • Geschlecht: Männlich
Re: Richtextfeld kopieren ... ohjemine...
« Antwort #2 am: 29.04.09 - 15:02:51 »
Schon mal

CopyItem der NotesDocumetnClass versucht

@jBubbleBoy
Wird das Dokument nicht sowieso gespeichert, da QuerySave-Event

EDIT
Sorry jBubbleBy. Lesefehler von meiner Seite. (QuerySave und QueryClose)


Andreas
« Letzte Änderung: 29.04.09 - 15:12:41 von ascabg »

Offline Worn

  • Aktives Mitglied
  • ***
  • Beiträge: 171
  • Geschlecht: Männlich
Re: Richtextfeld kopieren ... ohjemine...
« Antwort #3 am: 29.04.09 - 15:08:57 »
Hammer!

ich hab doch tatsächlich immer das doc.save vergessen... ich hatte sogar irgendwo gelesen dass man backend kram immer speichern muss....!

Ich hab wohl auch auf das queryclose und das Notes speichern gezählt... scheint so allein nicht zu reichen! Jetzt muss ich noch probieren, den Inhalt nicht zu appenden sondern zu replacen ;-)

Thumbs UP!
Wer für alles offen ist der kann ja nich ganz dicht sein!

Offline pram

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.170
  • Geschlecht: Männlich
    • Foconis Object Framework
Re: Richtextfeld kopieren ... ohjemine...
« Antwort #4 am: 29.04.09 - 15:12:45 »
Der Richtext ist im querySave noch nicht im Backend.

Ein "Source.refresh(true)" aktualisiert das RT-Item im Backend (zumindest meistens. Angeblich sollte diese Fkt hin und wieder Probleme machen, wenn ich selbst auch noch keine feststellen konnte)
Ein doc.save() erreicht zwas das Selbe, du erzeugst aber durch mehrfaches Speichern Replizierkonflikte.

Anschließend sollte dein Code das Item kopieren können.
Um das Item zu ersetzen, musst du es vorher löschen und dann appenden/kopieren (AFAIK gibt es Probleme wenn man mit copyItemToDocument ein vorhandenes überschreibt, da die Anhänge in den $FIELDs nicht richtig gelöscht werden)

Gruß
Roland
Roland Praml

IBM Certified Application Developer - Lotus Notes and Domino 8
Ich verwende das Foconis Object Framework

Offline Worn

  • Aktives Mitglied
  • ***
  • Beiträge: 171
  • Geschlecht: Männlich
Re: Richtextfeld kopieren ... ohjemine...
« Antwort #5 am: 29.04.09 - 15:48:00 »
Hey nochmal,

also ich hab es nun so:

Code

	Dim doc As NotesDocument
	Dim ritem1 As NotesRichTextItem
	Dim ritem2 As NotesRichTextItem
	
	Set doc = source.Document	
	Set ritem1 = doc.GetFirstItem("ri1")
	Call doc.RemoveItem("ri2")
	Set ritem2 = New NotesRichTextItem(doc,"ri2")
	Call ritem2.AppendRTItem(ritem1)
	Call doc.Save(True,False,False)


Ohne das ich das Item vorher lösche wird das append nämlich immer wieder durchgeführt und man hat nach ein paar mal öffnen ne ganze latte von den Bildern im berechneten Feld.

@pram:

Wo muss das source.refresh denn hin? Wenn ich doc.save damit ersetze dann bringt es nichts? Muss ich dazu den ganzen Code in Querysave packen... das lief auch nicht korrekt...? Vll. kannst du da noch genauer erläutern. Wäre super.

Danke nochmal an alle!

Worn
Wer für alles offen ist der kann ja nich ganz dicht sein!

Offline pram

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.170
  • Geschlecht: Männlich
    • Foconis Object Framework
Re: Richtextfeld kopieren ... ohjemine...
« Antwort #6 am: 29.04.09 - 17:17:58 »
Ich dachte so im QuerySave:

Code
Dim doc As NotesDocument
Dim ritem1 As NotesRichTextItem
Dim ritem2 As NotesRichTextItem

call source.refresh(true) ' alle RT-Inhalte ins Backend schieben	
Set doc = source.Document	
Set ritem1 = doc.GetFirstItem("ri1")
while doc.HasItem("ri2") 
  Call doc.RemoveItem("ri2")
wend
Set ritem2 = New NotesRichTextItem(doc,"ri2")
Call ritem2.AppendRTItem(ritem1)
Call ritem2.compact() ' schadet nicht

Ohne Gewähr! Aber das müsste meiner Meinung nach funktionieren. Jetzt könnte es aber sein dass es nicht funktioniert, weil "ri2" in der Maske vorhanden ist, bzw. nicht auf "berechnet" gestellt ist, und zwischen Query und Postsave wieder überschrieben wird.
(Der Inhalt in "ri2" erscheint auf Jeden Fall erst nach erneutem Öffnen der Maske)

Ein doc.save im QuerySave ist meiner Meinung nach ein absolutes "No-Go" weil da höchstwahrscheinlich Speicherkonflikte entstehen

Gruß
Roland
Roland Praml

IBM Certified Application Developer - Lotus Notes and Domino 8
Ich verwende das Foconis Object Framework

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Richtextfeld kopieren ... ohjemine...
« Antwort #7 am: 29.04.09 - 21:06:57 »
Das NotesUIDocument.Refresh nutzt GAR NICHTS. Bitte benutzt die Forumssuche - das Thema wurde hier schon bis zum Erbrechen durchgekaut.

Bernhard

Offline pram

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.170
  • Geschlecht: Männlich
    • Foconis Object Framework
Re: Richtextfeld kopieren ... ohjemine...
« Antwort #8 am: 29.04.09 - 22:25:39 »
Zitat
Das NotesUIDocument.Refresh nutzt GAR NICHTS.

Richtig, ich hab aber von

Zitat
call source.refresh(true) ' alle RT-Inhalte ins Backend schieben
geredet. Entscheidend ist hier der Parameter "true".

Ich kann mich auch noch an die Diskussion erinnern an der du AFAIK auch beteiligt warst und hier auch behauptet hast, dass es nicht zuverlässig funktioniert. Leider konnte mir keiner sagen WANN es nicht funktioniert. (also falls Du oder irgendwer hier einen Link hat in dem ich was nachlesen kann, schaue ich mir das gerne an) Ich verwende diese Methode um z.B. Teilmasken auszutauschen. Hier muss ich das Dokument auch neu öffnen und die eingegebenen Änderungen dürfen nicht verlorengehen.
Ähnlichen Code hab ich sogar bei IBM gefunden http://www-01.ibm.com/support/docview.wss?uid=swg21097112 (was aber nichts heißen muss  ;D)


Übrigens: Obiger Code funktioniert da ich es gerade eben ausprobiert habe! ABER: RI2 darf nicht als Feld in der Maske vorkommen, wie ich in meinem Posting auch angemerkt habe.  Das müsste man dann ggf. durch einen Würgaround im QueryOpen wieder gerade biegen, in dem man das RI2 nochmal in ein Temp-Feld kopiert.  ::)
Es stellt sich dann natürlich die Frage wie Sinnvoll die Rumkopiererei überhaupt ist.

Gruß
Roland
Roland Praml

IBM Certified Application Developer - Lotus Notes and Domino 8
Ich verwende das Foconis Object Framework

Offline Worn

  • Aktives Mitglied
  • ***
  • Beiträge: 171
  • Geschlecht: Männlich
Re: Richtextfeld kopieren ... ohjemine...
« Antwort #9 am: 30.04.09 - 10:27:19 »
Hi,

danke nochmal für die Hinweise. Ich probiere die Querysave Methode auch mal aus. Bei mir ist das Feld aber noch in der Makse enthalten... Mit den Hinweisen aus der Suche kommt man nun ganz gut klar was das Thema angeht..

Grüße
Worn
Wer für alles offen ist der kann ja nich ganz dicht sein!

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz