Autor Thema: Wieder nochmal: Abfrage RTF nach Enthalt eines Anhangs  (Gelesen 2034 mal)

Offline sja

  • Senior Mitglied
  • ****
  • Beiträge: 328
  • Geschlecht: Weiblich
  • Ich liebe dieses Forum!
Szenario

In einem Dokument gibt es zwei RTF „Kunden_Angebot“ und „Angebot_Abweichung“.
Feld „Kunden_Angebot“ enthält unbedingt einen Anhang, das Feld „Angebot_Abweichung“ kann das Anhang erhalten oder nicht.
Es gibt im Dokument einen Button beim Betätigung wird eine Email in der Email-Datei aktuelles User erstellt und in Body soll Anhang aus dem Feld „Angebot_Abweichung“ übernommen werden, wenn das Feld einen Anhang enthält. Wenn das Feld „Angebot_Abweichung“ keinen Anhang enthält, dann muss einen Anhang aus dem   RTF „Kunden_Angebot“ in das Feld Body der Maildokument übernommen werden.

Zwei Variant habe ich ausprobiert und beide funktionieren nicht. Die beide s. Code unten.
Unendliche Dank für jede Hilfe!


Dim ws As NotesUIWorkspace   
Dim s As NotesSession
Dim db As NotesDatabase
Dim dbMail As NotesDatabase
Dim uidb As NotesDatabase
Dim uiDocA As NotesUIDocument
Dim docA As NotesDocument
Dim uiDocM As NotesUIDocument

Dim rtitemA As NotesRichTextItem
Dim rtitemA1 As NotesRichTextItem
Dim object As NotesEmbeddedObject
Dim FileName As String
Dim flagAnhang As String

Sub Initialize
   
   Set s = New NotesSession
   Set ws = New NotesUIWorkspace
   Set uidb = s.CurrentDatabase      'aktuelle Anwendung "Workflow Angebot"
   Set uiDocA = ws.CurrentDocument   'aktuell geöffnete Anbebot-Dokument
   uiDocA.Editmode = True
   Call uiDocA.Refresh
   Call uiDocA.Save
   Set docA = uiDocA.Document

      Set rtitemA  = docA.GetFirstItem("Kunde_Angebot")
      Set rtitemA1  = docA.GetFirstItem("Angebot_Abweichung")
   
   Call Erstellen()
   
End Sub

Function Erstellen()
   Dim mailDb As NotesDatabase
   Dim uidoc As NotesUIDocument
   Dim docM As NotesDocument
   
   
   
   Set mailDb = New NotesDatabase( "", "" )
   Call mailDb.OpenMail

   Set docM = New NotesDocument( mailDb )
   docM.Form = "Memo"


'1. Variante
‘Funktioniert ohne Problem, wenn das FELD "Angebot_Abweichung" enthält einen Anhang
‘Wenn das FELD leer ist bekomme ich folgende Fehlermitteilungen:

s. Bilde: 1_Debug.gif, 1_Debug_Fehlermeldung.gif


   flagAnhang = "Angebot"
   If Not rtitemA1 Is Nothing Then
      If (rtitemA1.Type = RICHTEXT ) Then
         ForAll object In rtitemA1.EmbeddedObjects
            If ( object.Type = EMBED_ATTACHMENT ) Then
               Call rtitemA1.CopyItemToDocument( docM, "Body" )
               flagAnhang = "Abweichung"
               Exit ForAll
            End If
         End ForAll         
      End If   
   End If
   
   If flagAnhang = "Angebot" Then
      If Not rtitemA Is Nothing Then
         If (rtitemA.Type = RICHTEXT ) Then
            ForAll object In rtitemA1.EmbeddedObjects
               If ( object.Type = EMBED_ATTACHMENT ) Then
                  Call rtitemA.CopyItemToDocument( docM, "Body" )
                  Exit ForAll
               End If
            End ForAll         
         End If   
      End If
   End If
      
End Function
'2. Variante      
   If ( rtitemA1.Type = RICHTEXT ) Then
      FileName = rtitemA1.Values(0)
      Set object = rtitemA1.GetEmbeddedObject( FileName )
      If ( object Is Nothing ) Then   'Feld Angebot-Abweichung ist leer
         
         If ( rtitemA.Type = RICHTEXT ) Then
            FileName = rtitemA.Values(0)
            Set object = rtitemA.GetEmbeddedObject( FileName )
            If not( object Is Nothing ) Then
               Call rtitemA.CopyItemToDocument( docM, "Body" )
            End If
         End If
         
      Else
         Call rtitemA1.CopyItemToDocument( docM, "Body" )
      End If
   End If
Bekomme ich folgende Fehlermeldung, unabhängig davon, ob das FELD Angebot_Abweichung leer ist oder nicht.

s. Bilde: 2_Debug.gif, 2_Fehlermeldung.gif
« Letzte Änderung: 14.05.13 - 15:13:29 von sja »

Offline it898ur

  • Senior Mitglied
  • ****
  • Beiträge: 478
Re: Wieder nochmal: Abfrage RTF nach Enthalt eines Anhangs
« Antwort #1 am: 07.05.13 - 13:20:46 »
Hallo,

zwei Verbesserungsvorschläge:

1. Error-Handling einbauen, damit man sieht welche Zeile den Fehler wirft
2. rtitem.EmbeddedObjects auf Isempty abprüfen, bevor das Forall läuft

Gruß

André

Offline sja

  • Senior Mitglied
  • ****
  • Beiträge: 328
  • Geschlecht: Weiblich
  • Ich liebe dieses Forum!
Re: Wieder nochmal: Abfrage RTF nach Enthalt eines Anhangs
« Antwort #2 am: 07.05.13 - 14:04:27 »
Hallo André,

vielen Dank für deine Antwort
zu1.
in den Debug-Ausschnitten sind die Fehlerzeile markiert
zu 2.
wie ich das verstehe, Isempty überprüft Text, ich habe keinen Texct im Feld, bei mir soll Anhang überprüft werden

Sofia
« Letzte Änderung: 07.05.13 - 14:45:13 von sja »

Offline it898ur

  • Senior Mitglied
  • ****
  • Beiträge: 478
Re: Wieder nochmal: Abfrage RTF nach Enthalt eines Anhangs
« Antwort #3 am: 07.05.13 - 14:22:36 »
IsEmpty prüft auch manche Eigenschaften auf leer - hier die Frage, ob ein RT-Feld ein Array von eingebetteten Objekten besitzt !

Gruß

André

Offline dnotes

  • Aktives Mitglied
  • ***
  • Beiträge: 106
  • Geschlecht: Männlich
Re: Wieder nochmal: Abfrage RTF nach Enthalt eines Anhangs
« Antwort #4 am: 07.05.13 - 17:23:02 »
Vor dem 
              ForAll object In rtitemA1.EmbeddedObjects

bau noch
             If Not Isempty(rtitem.EmbeddedObjects) Then


 ein, dann meckert Notes bei einem anhanglosen RT-Item nimmer.

Offline sja

  • Senior Mitglied
  • ****
  • Beiträge: 328
  • Geschlecht: Weiblich
  • Ich liebe dieses Forum!
Re: Wieder nochmal: Abfrage RTF nach Enthalt eines Anhangs
« Antwort #5 am: 14.05.13 - 15:13:05 »
Hallo,

herzlichen Dank @dnotes und @it898ur!
sorry, dass so spät mit der Antwort, ich hatte Urlaub und bin  Heute 1. Tag am Arbeit

atnotes hilft wie immer! Alles funktioniert!

   flagAnhang = "Angebot"
   
   If Not rtitemA1 Is Nothing Then
      If (rtitemA1.Type = RICHTEXT ) Then
         If Not Isempty(rtitemA1.EmbeddedObjects) Then   
            ForAll object In rtitemA1.EmbeddedObjects
               If ( object.Type = EMBED_ATTACHMENT ) Then
                  Call rtitemA1.CopyItemToDocument( docM, "Body" )
                  flagAnhang = "Abweichung"
                  Exit ForAll
               End If
            End ForAll   
         End If      
      End If   
   End If
   
   If flagAnhang = "Angebot" Then
      If Not rtitemA Is Nothing Then
         If (rtitemA.Type = RICHTEXT ) Then
            If Not IsEmpty(rtitemA.EmbeddedObjects) Then
               ForAll object In rtitemA.EmbeddedObjects
                  If ( object.Type = EMBED_ATTACHMENT ) Then
                     Call rtitemA.CopyItemToDocument( docM, "Body" )
                     Exit ForAll
                  End If
               End ForAll
            End If         
         End If   
      End If
   End If

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz