Das Notes Forum

Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: adminnaddel am 07.10.04 - 09:08:21

Titel: %Include "xyz" in der Script-Bibliothek
Beitrag von: adminnaddel am 07.10.04 - 09:08:21
Hallo liebe Gemeinde,

ich habe eine tolle Funktion im Gateway von Pavone entdeckt! Nicht das ich dieses abkupfern möchte, um dem Pavone Team zu schädigen, aber die Funktionalität interessiert mich sehr!

Über eine Installationsroutine wird eine Aktion und ein Agent in die vorhande eigene MailDb gepackt, welche bei Bedarf das ausgewählte MailDoc sich greift und in eine andere vorhandene Datenbank schießt!
Das Design der Datenbank ist offen, doch leider leider finde ich nichts anderes als:

%INCLUDE "PAVONE"

Das hilft mir nicht wirklich weiter!!!

In der OpenOffice Datenbank ist das Ganze anderesrum, hier habe ich die Möglichkeit aus der bestehende ProjektDb ein Dialogfenster zu öffnen, welches mir meine MailDb und somit meine Mails anzeigt und ich in der Lage bin, ein Doc auszuwählen und als NEWDOC in die Db einzupflegen!

Fragen:
1) %INCLUDE "PAVONE" 'das bedeutet doch, das der Code ausgelagert ist! Ist dieser mit Mitteln zu greifen?
2) Die Funktionalität wie in der OpenOffice hat diese schon einer nachgebaut? Wenn ja, welchen Ansatz ist hier empfehlenswert?

Grüße

PS: Es geht hier nicht um hacken und nacken ... sondern lediglich um Verständis und dem Bedarf an einer eigenen ProjektDb mit Mutter und TochterDoc welches mir das einfache Anhängen einer Mail zb als Bericht erlaubt!
Titel: Re: %Include "xyz" in der Script-Bibliothek
Beitrag von: Glombi am 07.10.04 - 09:20:39
Das ist das übliche Vorgehen, seinen mühsam erarbeiteten Code zu verbergen, obwohl das Design der Datenbank offen ist.
Durch %Include bindet man eine ASCII Datei (lss) ein, in der der Script Code ist. Das wird dann sofort kompiliert und anschließend kann man die Datei löschen (was man natürlich nicht tun sollte  ;D)

Andreas
Titel: Re: %Include "xyz" in der Script-Bibliothek
Beitrag von: Axel am 07.10.04 - 09:47:44
Hi,

zu 2. Ich hab das versucht nachzubauen. So ganz bin ich noch nicht glücklich damit. Es ist noch ein bisschen Feinarbeit notwendig.


Hier mal ein Denkansatz
Code
...
Set dbCurrent = session.CurrentDatabase

'Zugriff auf Mail-DB des Users
Set dbMail = New NotesDatabase("","")
dbMail.OpenMail
If Not dbMail.IsOpen Then
	Messagebox "Die Mail-Datenbank kann nicht geöffnet werden." + Chr$(10) + "Es können keine Mails importiert werden.", 16, "Vorgänge - Fehler"
	Exit Sub
End If  'If Not dbMail.IsOpen Then

'Dialog zur Auswahl 
Set collection = workspace.PickListCollection(1, False, dbMail.Server, dbMail.FilePath, "($Inbox)","Eingangsbox", "Markieren Sie die gewünschten Mails.")
If collection.Count = 0 Then Exit Sub

'Abfrage ob Anhänge mit übernommen werden sollen
If Messagebox("Sollen eventuell vorhandene Dateianhänge mit übernommen werden?", 36, "Vorgänge") = 6 Then
	intAttachment = 1  'Anhänge werden übernommen
Else
	intAttachment = 0	'Anhäge werden nicht übernommen
End If  'If Messagebox("Sollen eventuell vorhandene Dateianhänge...

'Einfügen in Datenbank
Set docNew = docMail.CopyToDatabase(dbCurrent)
		
Call docNew.ComputeWithForm(False, False)
...
If intAttachment = 0 Then  'Wenn Dateianhänge nicht übernommen werden sollen, werden sie hier gelöscht
	If docNew.HasEmbedded Then
		Set rtitem = docNew.GetFirstItem("Body")    
		If rtitem.Type = RICHTEXT Then
			Forall objects In rtitem.EmbeddedObjects
				If objects.Type = EMBED_ATTACHMENT Then
					Call objects.Remove
				End If  'If objects.Type = EMBED_ATTACHMENT 
			End Forall  'Forall objects In rtitem.EmbeddedObjects
		End If  'If rtitem.Type = RICHTEXT 			
	End If   'If refdoc.HasEmbedded
End If  'If intAttachment = 0 Then

Call docNew.Save(True,False)
...

Wie gesagt es ist ein Denkansatz. Was hier noch fehlt ist die Verbandelung mit einem Adress- oder Projektdokument.

Axel

      


Titel: Re: %Include "xyz" in der Script-Bibliothek
Beitrag von: koehlerbv am 07.10.04 - 19:19:32
Axel, Du brauchst doch nur noch das ausgewählte Dokument (aus einer Ansicht oder das geöffnete Dokument selber) zu instantiieren und dann mit NotesDocument.MakeResponse mit dem docNew zu "verbandeln". Da fehlt ja nicht mehr viel  ;)

Ich würde allerdings davon abgehen, das ganze Mail-Dokument in die Zieldatenbank zu schiessen: Das setzt ja immer voraus, dass es dort auch eine Maske "Memo" gibt. Wenn Du den form name für das neue Dokument angibst und dann ein RenderToRTItem aus dem Mail-Dokument machst in das RTI Deines newDoc, bist Du viel unabhängiger.

Bernhard
Titel: Re: %Include "xyz" in der Script-Bibliothek
Beitrag von: Axel am 07.10.04 - 19:38:44
Hi,

das Ganze hab ich aus einem Agent rauskopiert. Ich hab mich auf das wesentliche beschränkt damit es klar wird wie man so was angehen kann.

In meinem Agent instanziere ich ein Dokument und "hänge" das Mail dann dran. In der Datenbank gibt es eine Maske, die die wichtigsten Felder des Mails enthält, also Body, Subject etc. Die weise ich dem Dokument auch zu. Ich hatte einiges getestet und bin im Moment bei dieser Methode hängengeblieben, weil alles andere hat nicht sauber funktioniert hat. Ich hatte die tollsten Ergebnisse. Ziel ist es, dass auch die HTML-Mails so in der DB dargestellt werden, wie sie in der Mail-DB vorhanden sind. D.h. mit Grafiken, Links und allem was danoch so dazu gehört.

Es gibt sogar einen Thread (http://www.atnotes.de/index.php?topic=16653.0) dazu, bei dem hast auch du mitgewirkt.

Ob ich mit RenderToItem weiterkomme weiss ich nicht. Ich glaube ich hatte das mal probiert. Ich werde das Ganze aber noch mal angehen. Ich will damit auch mal unter 6.5 mein Glück versuchen.

Axel

 
Titel: Re: %Include "xyz" in der Script-Bibliothek
Beitrag von: -Michael- am 07.10.04 - 20:23:14
Hi,

ich habe übrigens festgestellt, dass man bei verschlüsselten Mails aufpassen muss, da ansonsten nicht jeder Zugriff hat, dies ist auch bei RenderToRTItem der Fall.

Bei RenderToRTItem habe ich mal folgenden Code getestet, der auch funktioniert (in ND6):

Script-Auszug (DocThis ist aktuelles Dokument, in das ein Mail, also docMail, reingerendert werden soll)

   Call docThis.RemoveItem(strRTName)
   Set rtitem = New NotesRichTextItem( docThis, strRTName )
   Call docMail.RenderToRTItem(rtitem)
   Call docThis.Save(False,False)   
   If docMail.IsEncrypted Then
      Forall itm In docThis.Items
         If itm.Name = "PublicEncryptionKeys" Then
            Call itm.Remove
         End If
      End Forall
   End If


Michael
Titel: Re: %Include "xyz" in der Script-Bibliothek
Beitrag von: Axel am 08.10.04 - 08:42:48
Hi,

danke für den Hinweis. Ich werde das bei der weiteren entwickluing berücksichtigen.


Axel
Titel: Re: %Include "xyz" in der Script-Bibliothek
Beitrag von: adminnaddel am 15.10.04 - 15:44:27
Hallo liebe Gemeinde,
vielleicht mal in der ruhigen Minute, komme nicht weiter! Das u.a. Script macht an der roten Stelle im debugger ein Meldefenster auf und haut mir auf die Finger!
Danke

Sub Click(Source As Button)
   Dim session As New NotesSession
   Dim ws As New NotesUIWorkspace
   Dim uidoc As NotesUIDocument
   Dim rtitem As NotesRichtextItem
   Dim currdoc As NotesDocument   
   Dim doc As NotesDocument
   Dim docNew As NotesDocument
   Dim db As NotesDatabase
   Dim col As NotesDocumentCollection
   
   Set dbCurrent = session.CurrentDatabase
   
'Zugriff auf Mail-DB des Users
   Set dbMail = New NotesDatabase("","")
   dbMail.OpenMail
   If Not dbMail.IsOpen Then
      Messagebox "Die Mail-Datenbank kann nicht geöffnet werden." + Chr$(10) + "Es können keine Mails importiert werden.", 16, "Vorgänge - Fehler"
      Exit Sub
   End If  'If Not dbMail.IsOpen Then
   
'Dialog zur Auswahl
   Set col = ws.PickListCollection(1, False, dbMail.Server, dbMail.FilePath, "($Inbox)","Eingangsbox", "Markieren Sie die gewünschten Mails.")
   If col.Count = 0 Then Exit Sub
   
'Abfrage ob Anhänge mit übernommen werden sollen
   If Messagebox("Sollen eventuell vorhandene Dateianhänge mit übernommen werden?", 36, "Vorgänge") = 6 Then
      intAttachment = 1  'Anhänge werden übernommen
   Else
      intAttachment = 0 'Anhäge werden nicht übernommen
   End If  'If Messagebox("Sollen eventuell vorhandene Dateianhänge...
   
'Einfügen in Datenbank
   Set docNew = docMail.CopyToDatabase(dbCurrent) ----> Meldung = Variant does not contain an object
   
   Call docNew.ComputeWithForm(False, False)
   
   If intAttachment = 0 Then  'Wenn Dateianhänge nicht übernommen werden sollen, werden sie hier gelöscht
      If docNew.HasEmbedded Then
         Set rtitem = docNew.GetFirstItem("Body")   
         If rtitem.Type = RICHTEXT Then
            Forall objects In rtitem.EmbeddedObjects
               If objects.Type = EMBED_ATTACHMENT Then
                  Call objects.Remove
               End If  'If objects.Type = EMBED_ATTACHMENT
            End Forall  'Forall objects In rtitem.EmbeddedObjects
         End If  'If rtitem.Type = RICHTEXT
      End If   'If refdoc.HasEmbedded
   End If  'If intAttachment = 0 Then
   
   Call docNew.Save(True,False)
   
End Sub
Titel: Re: %Include "xyz" in der Script-Bibliothek
Beitrag von: Axel am 15.10.04 - 15:54:11
Hi,

hier dir fehlt die Initialisierung der Variable docMail. Füge mal die beider fettgedruckten Zeilen an den jeweiligen Stellen ein. Dann sollte das funktionieren.


Sub Click(Source As Button)
   Dim session As New NotesSession
   Dim ws As New NotesUIWorkspace
   Dim uidoc As NotesUIDocument
   Dim rtitem As NotesRichtextItem
   Dim currdoc As NotesDocument   
   Dim doc As NotesDocument
   Dim docNew As NotesDocument
   Dim docMail As NotesDocument
   Dim db As NotesDatabase
   Dim col As NotesDocumentCollection
   
   Set dbCurrent = session.CurrentDatabase
   
'Zugriff auf Mail-DB des Users
   Set dbMail = New NotesDatabase("","")
   dbMail.OpenMail
   If Not dbMail.IsOpen Then
      Messagebox "Die Mail-Datenbank kann nicht geöffnet werden." + Chr$(10) + "Es können keine Mails importiert werden.", 16, "Vorgänge - Fehler"
      Exit Sub
   End If  'If Not dbMail.IsOpen Then
   
'Dialog zur Auswahl
   Set col = ws.PickListCollection(1, False, dbMail.Server, dbMail.FilePath, "($Inbox)","Eingangsbox", "Markieren Sie die gewünschten Mails.")
   If col.Count = 0 Then Exit Sub
   
   Set docMail = col.GetFirstDocument  'Maildokument

'Abfrage ob Anhänge mit übernommen werden sollen
   If Messagebox("Sollen eventuell vorhandene Dateianhänge mit übernommen werden?", 36, "Vorgänge") = 6 Then
      intAttachment = 1  'Anhänge werden übernommen
   Else
      intAttachment = 0 'Anhäge werden nicht übernommen
   End If  'If Messagebox("Sollen eventuell vorhandene Dateianhänge...
   
'Einfügen in Datenbank
   Set docNew = docMail.CopyToDatabase(dbCurrent) ----> Meldung = Variant does not contain an object
   
   Call docNew.ComputeWithForm(False, False)
   
   If intAttachment = 0 Then  'Wenn Dateianhänge nicht übernommen werden sollen, werden sie hier gelöscht
      If docNew.HasEmbedded Then
         Set rtitem = docNew.GetFirstItem("Body")   
         If rtitem.Type = RICHTEXT Then
            Forall objects In rtitem.EmbeddedObjects
               If objects.Type = EMBED_ATTACHMENT Then
                  Call objects.Remove
               End If  'If objects.Type = EMBED_ATTACHMENT
            End Forall  'Forall objects In rtitem.EmbeddedObjects
         End If  'If rtitem.Type = RICHTEXT
      End If   'If refdoc.HasEmbedded
   End If  'If intAttachment = 0 Then
   
   Call docNew.Save(True,False)
   
End Sub

Axel
Titel: Re: %Include "xyz" in der Script-Bibliothek
Beitrag von: animate am 15.10.04 - 15:55:47
Tipp: Option Declare einschalten
Titel: Re: %Include "xyz" in der Script-Bibliothek
Beitrag von: adminnaddel am 15.10.04 - 16:13:10
Danke @Axel,

mir ist das natürlich hinterher auch aufgefallen :-)  .... aber leider funzt es noch immer net! Nun meckert er über diverse weitere gedimmse und variablen .... naja ... wird wohl ne lange Nacht!

Grüße
Titel: Re: %Include "xyz" in der Script-Bibliothek
Beitrag von: koehlerbv am 15.10.04 - 16:16:10
Zwei weitere Tipps:

1. Man soll keinen Code verwenden, den man nicht versteht.
2. Die NotesDocumentCollection sollte schon durchlaufen werden, nur das erste NotesDocument zu instantiieren, wird nicht das bringen, was der User nach "Anhakeln" mehrerer Docs erwartet.

HTH,
Bernhard
Titel: Re: %Include "xyz" in der Script-Bibliothek
Beitrag von: Axel am 15.10.04 - 16:20:31
2. Die NotesDocumentCollection sollte schon durchlaufen werden, nur das erste NotesDocument zu instantiieren, wird nicht das bringen, was der User nach "Anhakeln" mehrerer Docs erwartet.


Hi,

die Collection kann immer nur ein Dokument enthalten, denn in der Picklist ist keine Mehrfachauswahl zugelassen.


Axel
Titel: Re: %Include "xyz" in der Script-Bibliothek
Beitrag von: koehlerbv am 15.10.04 - 16:36:22
Jo, hast recht, Axel. Aber das macht es nur noch schlimmer ("Markieren Sie die gewünschten Mails.").

Ansonsten: Thomas Völk's Hinweis (eigentlich sollte das eine Forderung sein: Option Declare !!!) fördert das Nicht-Deklarieren der NotesDatabase-Objekte zutage. Das sollte dann ja nicht gerade eine lange Nacht bereiten  ;)

Bernhard
Titel: Re: %Include "xyz" in der Script-Bibliothek
Beitrag von: adminnaddel am 15.10.04 - 22:19:53
Okay, nun läuft es glatt durch den debugger .....

nur  ::)

erhalten ich in meiner Picklist keine Auswahlmöglichkeit! keine Mails zusehen:

'Zugriff auf Mail-DB des Users
   Set dbMail = New NotesDatabase("","")
   dbMail.OpenMail
   If Not dbMail.IsOpen Then
      Messagebox "Die Mail-Datenbank kann nicht geöffnet werden." + Chr$(10) + "Es können keine Mails importiert werden.", 16, "Vorgänge - Fehler"
      Exit Sub
   End If  'If Not dbMail.IsOpen Then

Im debugger ist zu erkennen, daß er meine MailDb nicht findet!!

Puh .. noch ein kleiner Tipp .. bidddde :-)

Grüße
Titel: Re: %Include "xyz" in der Script-Bibliothek
Beitrag von: Glombi am 15.10.04 - 22:36:00
Die Einstellungen zum Öffnen der Maildb nimmt Notes aus der Arbeitsumgebung. Kontrolliere mal. ob Mail-Server und Pfad stimmen.
Du kannst das im Client testen, indem Du in der Statuszeile unten rechts auf das Mail-Symbol klickst und dann Memo erstellen wählst.

Andreas
Titel: Re: %Include "xyz" in der Script-Bibliothek
Beitrag von: adminnaddel am 16.10.04 - 07:20:19
Warum auch immer ... hatte nichts geändert! ... aber jepp ... nun klappt es!
Habe noch die Lib übernommen und zusätzlich

docNew.Form = "Memo"

eingefügt!

Fertig ist die ProjektmanagementDb

Vielen Dank für die Zahlreichen Hilfen
 :-*

Grüße
Titel: Re: %Include "xyz" in der Script-Bibliothek
Beitrag von: adminnaddel am 16.10.04 - 12:22:54
... nun bin ich doch schon wieder am verzweifeln!

Versuche aus der ProjektmanagementDb vom selektiertem doc ein Feldwert auszulesen:

...
 Set uiview = ws.Currentview
 Set col = dbCurrent.AllDocuments
 Set doc = col.GetFirstDocument
 Call uiview.SelectDocument(doc)
 Call doc.FieldGetText( "test" )
...

aber der Wert bleibt NULL .. im debugger!
Jemand vielleicht einen kleinen Ansatz für mich?

Grüße
Titel: Re: %Include "xyz" in der Script-Bibliothek
Beitrag von: Semeaphoros am 16.10.04 - 15:08:59
Deine Variable Doc ist ein NotesDocument und die Methode FieldGetText ist eine Methode des NotesUIdocumentes, und da kommt logischerweise nichts zurück (weil LS das dann als Feldnamen interpretiert). Was Du suchst ist

doc.GetItemValue("test"), aber schau das doch bitte mal in der Hilfe nach.
Titel: Re: %Include "xyz" in der Script-Bibliothek
Beitrag von: adminnaddel am 16.10.04 - 15:27:55
Vielen .. vielen .. Dank ;D
Yepp .. das war es was ich sucht ....!!
Titel: Re: %Include "xyz" in der Script-Bibliothek
Beitrag von: Axel am 17.10.04 - 12:15:13
Jo, hast recht, Axel. Aber das macht es nur noch schlimmer ("Markieren Sie die gewünschten Mails.").

Hi,

ist mir inzwischen auch aufgefallen. Ist ein "Druckfehler" meinerseits. Das kommt noch aus der Zeit, in der in der Picklist die Mehrfachauswahl aktiv war. Die Mehrfachauswahl habe ich deaktiviert, aber den Text nicht geändert.  :-\

Allerdings befindet sich das Teil noch in der Testphase und war noch nie im Produktiveinsatz.

Axel
 
Titel: Re: %Include "xyz" in der Script-Bibliothek
Beitrag von: adminnaddel am 17.10.04 - 12:43:36
Ein Kapitel ohne Ende ::)
Warum nur kriege ich beim auslesen "Subject" -> type mismatch  ???
....
  Set dbCurrent = session.CurrentDatabase 
  Set uiview = ws.Currentview
  Set col = dbCurrent.AllDocuments
  Set doc = col.GetFirstDocument
  var = doc.FieldGetText( "Subject" )
....

Grüße
Titel: Re: %Include "xyz" in der Script-Bibliothek
Beitrag von: Semeaphoros am 17.10.04 - 12:49:22
Warum stellst Du die gleiche Frage zweimal im gleichen Fred? Weiter oben hab ich Dir schon gesagt, dass Doc ein NotesDocument und kein NotesUIDocument ist und NotesDocument kennt die Methode FieldGetText nicht. Siehe meinen vorhergehenden Beitrag in dieseem Fred
Titel: Re: %Include "xyz" in der Script-Bibliothek
Beitrag von: adminnaddel am 17.10.04 - 12:57:23
Weil heute Sonntag ist! Sorry :o
Titel: Re: %Include "xyz" in der Script-Bibliothek
Beitrag von: koehlerbv am 17.10.04 - 12:59:28
Was mir vollkommen unklar ist: Was machst Du eigentlich mit

Code
Set dbCurrent = session.CurrentDatabase  
  Set col = dbCurrent.AllDocuments
  Set doc = col.GetFirstDocument
  var = doc.Subject (0)
?? (Das Auslesen von Subject habe ich mal geändert  ;D )

Das col.GetFirstDocument aus einer Collection aller Dokumente einer Datenbank liefert Dir doch einen "Treffer", den Du absolut nicht vorhersehen kannst. Was willst Du damit ?

Bernhard
Titel: Re: %Include "xyz" in der Script-Bibliothek
Beitrag von: mibo11 am 17.10.04 - 13:02:11
Hallo adminnaddel,

ein kleiner Tip am Rande. Schau dir mal in der Designer Hilfe das Klaussenmodel an. Da speziell den Unterschied zwischen Frontend und Backend Klassen (in deinem speziellen Fall NotesDocument / NotesUIDDocument). Wenn du das dann einmal richtig verstanden hast, wird dir das Auslesen von Feldwerten keine Kopfschmerzen mehr bereiten.

Grüße Sascha
Titel: Re: %Include "xyz" in der Script-Bibliothek
Beitrag von: adminnaddel am 17.10.04 - 13:08:17
Ähm ... ich wollte damit das fokusierte Doc in der View ansprechen und einen bestimmten Feldwert auslesen ... damit ich ihn später im Script wieder verwenden kann!

Set dbCurrent = session.CurrentDatabase 
Set col = dbCurrent.AllDocuments
Set doc = col.GetFirstDocument
var = doc.Subject (0)
Titel: Re: %Include "xyz" in der Script-Bibliothek
Beitrag von: Semeaphoros am 17.10.04 - 13:21:26
Richtige Bemerkung, studiere mal das Klassenmodell.

Dann gibt es in er Designer-Hilfe mehrere Abschnitte, in denen steht, wie man ans aktuelle Dokument herankommt.

Die wichtigsten Info-Quellen: NotesUIWorkspache.CurrentDocument und NotesDatabase.UnprocessedDocuments
Titel: Re: %Include "xyz" in der Script-Bibliothek
Beitrag von: adminnaddel am 17.10.04 - 14:36:12
ja .. okay! verstanden ... ich melde mich mal erneut unter anderem Nickname im ATNOTES Forum an, so weiß dann niemand, was für dumme Fragen ich gestellt habe ;D

Danke