Das Notes Forum

Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: LUSBernd am 25.09.07 - 15:34:50

Titel: ReOpen wegen rtf-Feld
Beitrag von: LUSBernd am 25.09.07 - 15:34:50
Hallo,

ich steh grad irgendwie auf dem Schlauch. Ich will ein rtf-Feld überprüfen, ob die Dateianhänge auch nicht zu lang sind, da die DB sonst zu groß wird.

Ich habe im Querysafe eine Funktion geschrieben. Nun muss aber bei einem neu erstellten Dokument dieses erst abgespeichert werden, sonst bekomme ich in der Überprüfung einen Fehler. Ich habe inzwischen auch von ATA das reopen gefunden. Leider stehe ich grad aufm Schlauch wie ich es so einbinde, dass er mir das auch macht, wenn das Dokument neu ist. Also hier die Frage: Wie funzt das?   ???

Hier mein Querysafe:

Sub Querysave(Source As Notesuidocument, Continue As Variant)
   Dim s As New NotesSession
   Dim db As NotesDatabase
   Dim ws As New NotesUIWorkspace
   Dim uidoc As NotesUIDocument
   Dim doc As NotesDocument
   Dim rt As NotesRichTextItem
   Dim item As NotesItem
   Dim idx As Integer
   
   
   Set uidoc = ws.CurrentDocument
   Set doc = uidoc.Document
   Set rt = doc.GetFirstItem("bild")
   
   
   
   If Not doc.hasembedded Then
      Call source.FieldSetText("ok", "ok")
   Else
      
      idx = 0
      Forall o In rt.EmbeddedObjects
         Redim Preserve strdateiinfo(idx)
         strdateiinfo(idx) = Trim$(Str(o.filesize))
         If o.filesize > 515000 Then
            Msgbox ("Wie in der Schulung gelernt, müssen die Bilder verkleinert werden!")
            continue = False
            Exit Sub
         End If
         idx = idx + 1
      End Forall
      
      doc.fsize = strdateiinfo
      Call source.FieldSetText("ok", "ok")
      
   End If
   
   
   If source.FieldGetText("ok") = "" Then
      Call source.FieldSetText("ok","")
      continue = False
   Else
      Call source.FieldSetText("ok","")
   End If
End Sub

Titel: Re: ReOpen wegen rtf-Feld
Beitrag von: koehlerbv am 25.09.07 - 15:45:27
Warum machst Du die Prüfung nicht im QueryClose? Speichern musst Du ja so oder so ...

Bernhard
Titel: Re: ReOpen wegen rtf-Feld
Beitrag von: LUSBernd am 25.09.07 - 15:47:56
ganz einfach, da sind bereits hunderte Dokumente drin, deren Anhänge schon viel zu groß sind.

Und damit keine Meuterei nur beim Anzeigen dieser Dokumente ausbricht habe ich diesen Weg gewählt.

Philipp
Titel: Re: ReOpen wegen rtf-Feld
Beitrag von: koehlerbv am 25.09.07 - 15:55:44
Du brauchst doch nur den EditMode abfragen oder das LastModified ... Es gibt jedenfalls keinen Grund, warum man den Lesemodus nicht von der Prüfung ausnehmen kann.

Bernhard
Titel: Re: ReOpen wegen rtf-Feld
Beitrag von: LUSBernd am 25.09.07 - 16:00:56
Ok, ist richtig. an sowas denke ich einfach noch nicht. Bin halt noch kein Profi.   ;)
Das werde ich mal probieren.

Allerdings ist das noch nicht die Antwort auf meine Frage. Ich bin ja froh, dass ich ihn überhaupt schon dazu bewegen konnte das ganze erfolgreich zu prüfen!!!

Phil
Titel: Re: ReOpen wegen rtf-Feld
Beitrag von: koehlerbv am 25.09.07 - 16:06:13
Die Frage war ja falsch gestellt  ;) Ein ReOpen nützt Dir in diesem Zusammenhang nichts, da Du im Frontend herumturnst. Das ReOpen wird eingesetzt, wenn im Backend an einem RTI herumgeschraubt wird, damit dieses dann auch im Frontend sichtbar wird.

Bernhard
Titel: Re: ReOpen wegen rtf-Feld
Beitrag von: LUSBernd am 25.09.07 - 16:17:11
Sensationell, ich will eine Schulung!!!

Und was kann ich da jetzt am besten machen? Hatte das auch mal mit refresh und reload probiert, allerdings ohne Ergebnis.

Phil
Titel: Re: ReOpen wegen rtf-Feld
Beitrag von: koehlerbv am 25.09.07 - 16:28:29
Im QueryClose, und nur dann, wenn das Frontend-Dokument im EditMode ist und überhaupt geändert wurde (optional):
Code
	'We have to check only for documents in edit mode !
	If (uidocInventory.EditMode = False) Or (uidocInventory.ModifiedSinceSaved = False) Then
		Exit Sub
	End If

HTH,
Bernhard

PS: Refresh und Reload bringen in diesem Zusammenhang nichts. Dann wohl eher eine Schulung  ;)
Titel: Re: ReOpen wegen rtf-Feld
Beitrag von: LUSBernd am 04.10.07 - 15:47:46
Hallöle,

wie bereits eben angedroht gehts jetzt hier weiter!

Ich habe mich so gut es ging mit dem ganzen auseinandergesetzt, wie es eben nur ging. Nur sind hier die Bücher und die Hilfe wenig ergiebig. Die Standardproblematik hier im Forum ist auch irgendwie immer anders als ich es brauche.

Noch einmal kurz zur Anforderung:

Der User legt eine neues Dokument an, in dem sich aller Wahrscheinlichkeit ein oder mehrere Dateinanhänge befinden; i.d.R. Bilder. Ich möchte nun direkt abfragen, wie groß der jeweilige Dateianhang ist und ggf den User daruaf hinweisen, dass er zu groß ist.  Wenn das Dokument bereits existiert funzt das schon anstandslos. Aber genau hier verzeifel ich noch an der Eigenheit der RTF-Felder. (Erst speichern dann sichtbar!)

Wie bereits oben beschrieben habe ich mir hierfür die Funktion reopen von ata eingebaut, habe jedoch im Debugger festgestellt, das mir das uidoc gar nicht gefüllt wird!!!

Wie komme ich also beim abspeichern eines neuen Dokuments an die ANhänge dran um sie zu prüfen???

Gruß
Phil
Titel: Re: ReOpen wegen rtf-Feld
Beitrag von: Axel am 04.10.07 - 15:54:13
Wie sieht denn dein Code nun endgültig aus?

Axel
Titel: Re: ReOpen wegen rtf-Feld
Beitrag von: pete_bla am 04.10.07 - 15:56:19
Hi,

malwieder das mit den Anhängen und "nicht speichern"

mein Vorschlag wäre auch hier:
Code
@AttachmentLengths
Liefert Dir die grösse der Anhänge bereits nach dem Refresh ohne Speichern!,
z.B. in der Eingabe-Validierung des Feldes, im QuerySave oder sonst wo als "Formel" verwendbar.

-> in Desinger Hilfe steht mehr dazu.

Gruss, Pete(r)

Titel: Re: ReOpen wegen rtf-Feld
Beitrag von: LUSBernd am 04.10.07 - 16:09:23
@Axel:

Welcher Code den nu genau? Der der schon funtioniert, außer bei neuen Doks, oder der, den ich mir hier bis jetzt zusammengestopselt habe?

@pete_bla:

Ich schau es mir mal an

Gruß
Phil
Titel: Re: ReOpen wegen rtf-Feld
Beitrag von: Axel am 04.10.07 - 16:12:16
Den Code mit der ReOpen-Funktion, bei dem uidoc nicht gefüllt wird.


Axel
Titel: Re: ReOpen wegen rtf-Feld
Beitrag von: LUSBernd am 04.10.07 - 16:21:25
Das ist einfach. Den habe ich nämlich nur heir aus dem Forum "geklaut"!!! (Und ich stehe dazu  ;) )

Function ReOpen(doc As NotesDocument) As Integer
   Dim ws As New NotesUIWorkspace
   Dim uidoc As NotesUIDocument
   Dim dbThis As NotesDatabase
   Dim unid As String
   
   ReOpen = 0
   Set dbThis = doc.ParentDatabase
   Call doc.Save(True , True)
   unid = doc.UniversalID
   doc.SaveOptions = "0" ' # ... Speicherabfrage vermeiden
   Set uidoc = ws.CurrentDocument
   Call uidoc.Close
   Set doc = dbThis.GetDocumentByUNID(unid)
   Set uidoc = ws.EditDocument(True , doc)
   Set doc = uidoc.Document
   If doc.HasItem("SaveOptions") Then 
            ' # ... das Feld SaveOptions wieder entfernen...
      doc.RemoveItem("SaveOptions")
      Call doc.Save( True , True )
   End If
   ReOpen = 1
   Print "Das Dokument wurde erneut geöffnet"
End Function

Wie gesagt, der ist von hier bzw ata. Uidoc bleibt leer ???

Gruß
Phil


Titel: Re: ReOpen wegen rtf-Feld
Beitrag von: LUSBernd am 04.10.07 - 16:48:05
So. Jetzt füllt er mir auch wieder mein uidoc. Zum Glück.

Jetzt wäre nur noch schön, wenn ich an die Bilder irgendwie rankommen würde.

*Ich bin der König des Konjunktivs!!!*

PHil
Titel: Re: ReOpen wegen rtf-Feld
Beitrag von: pete_bla am 04.10.07 - 17:01:06
Hi,

@AttachmentLengths: schau mal BITTE hier, da hab ichs schonmal beschreiben:

http://atnotes.de/index.php?topic=37822.msg238256#msg238256 (http://atnotes.de/index.php?topic=37822.msg238256#msg238256)

ganz einfach:
Feld - Berechnet einbauen
-> Refresh (F9)
Grösse ist da.

ohne Purzelbaum und hinundher....  ;)

Gruss, Pete(r)
Titel: Re: ReOpen wegen rtf-Feld
Beitrag von: koehlerbv am 04.10.07 - 17:05:01
Ich verstehe immer noch nicht, warum in diesem Zusammenhang dieser Aufstand mit dem ReOpen gemacht wird. Das braucht man doch überhaupt nicht (hatte ich bereits geschrieben) ...

Bernhard
Titel: Re: ReOpen wegen rtf-Feld
Beitrag von: pete_bla am 04.10.07 - 17:23:25
Ich auch nicht.
Titel: Re: ReOpen wegen rtf-Feld
Beitrag von: LUSBernd am 05.10.07 - 10:18:08
Guten Morgen,

Ich habe jetzt die Lösung mit der Formel ausprobiert. Sie funktioniert wirklich ganz einfach. Vieldn Dank schon einmal dafür an dieser Stelle!!!

Ich habe dazu allerdings noch eine frage, wenn mehrere Werte in dem Feld stehen:

Im Feld steht ja dann "Zahl; Zahl"; mit Trim steht dann "Zahl, Zahl".

Aber wie bekomme ich die Zahlen einzeln zu fassen um mit ihnen zu arbeiten?

Gruß
Phil
Titel: Re: ReOpen wegen rtf-Feld
Beitrag von: Axel am 05.10.07 - 10:22:12
Was willst du mit den Zahlen machen?

Formel oder Script?


Axel
 
Titel: Re: ReOpen wegen rtf-Feld
Beitrag von: LUSBernd am 05.10.07 - 10:32:17
Ich will die Zahlen einzeln überprüfen auf ihr Größe. Soll heißen, wenn größer als irgendwas dann Meldung und Dokument nicht speichern. Speichern soll erst möglich sein, wenn die Anhänge eine bestimmte Größe nicht überschreiten.

Formel oder Script ist mir egal.

Gruß
PHil
Titel: Re: ReOpen wegen rtf-Feld
Beitrag von: Axel am 05.10.07 - 10:47:02
In der Formelsprache kannst du @For benutzen. In der Designerhilfe gibt's Beispiele dazu wie man auf den Feld Inhalt zugreifen kann.


In Script kann's ganz grob so aussehen:

For idx = 0 to Ubound(doc.Namedes Feldes)
  Msgbox doc.NamedesFeldes(idx)
Next


Axel
Titel: Re: ReOpen wegen rtf-Feld
Beitrag von: LUSBernd am 05.10.07 - 11:25:30
aah,

klasse. musste zwar ein bischen dran rumbauen, aber damit gehts jetzt!!!  ;D


Vielen vielen vielen tausend Dank !!!!!

Gruß
Phil

PS: Für alle die es interessiert werde ich hier später noch den Code posten.
Titel: Re: ReOpen wegen rtf-Feld
Beitrag von: Axel am 05.10.07 - 11:31:37
klasse. musste zwar ein bischen dran rumbauen, aber damit gehts jetzt!!!  ;D

Prima.

Fertige Lösungen wirst du hier nicht bekommen. Außerdem, nur durch das rumbauen lernt man mit den Anweisungen umzugehen und bekommt die notwendige Erfahrung für die Zukunft.


Axel


Titel: Re: ReOpen wegen rtf-Feld
Beitrag von: pete_bla am 05.10.07 - 14:47:24
Hi,

Summe:=@Sum(Zahl,Zahl) 
oder wenn zu rechnest kann die @Formeln die Listen Berücksichtigen
ListeGroesseKB := ListeGroesseB/1024

Auch ganz "einfach"  ;)
Spiel mal damit "herum" und schau mal unter @Funktionen in der Desinger-Help (F1)

und wenn Du sagst, wass du genau vorhast, wird Dir gerne geholfen.

Gruss, Pete(r)

Titel: Re: ReOpen wegen rtf-Feld
Beitrag von: Axel am 05.10.07 - 15:13:01
Hier war nicht die Summierung der Werte gefragt, sondern eine Prüfung der einzelnen Werte.

Axel
Titel: Re: ReOpen wegen rtf-Feld
Beitrag von: koehlerbv am 05.10.07 - 15:21:59
Wenn ich mir die Ausgangsfrage so anschaue ...  ;)

Ich will ein rtf-Feld überprüfen, ob die Dateianhänge auch nicht zu lang sind, da die DB sonst zu groß wird.

Bernhard
Titel: Re: ReOpen wegen rtf-Feld
Beitrag von: pete_bla am 05.10.07 - 15:36:56
Hi,

(sorry muss wohl bei mir was mit Proxy-Cache, dem Browsercache, oder gar nem Layer-8 Cache durcheinander gekommen sein. Ich hab die 2. Seite nicht bemerkt  :-[ )

also für @Formeln müsste:
Code
maxMB:= 1*1024*1024;
@IF(@AttachmentLengths > maxMB; "ein Ahang ist zu gross";"ok")
wohl schon reichen, wobei es "fast egal ist" dass @AttachmentLengths eine liste liefert.  :)

Soll ich noch mehr verraten?

Gruss, Pete(r)