Autor Thema: Dialogbox funktioniert under Notes 7 aber nicht mehr unter Notes 852  (Gelesen 4156 mal)

Offline Lancelot

  • Senior Mitglied
  • ****
  • Beiträge: 357
  • Geschlecht: Männlich
  • Tu was Du willst, aber schade keinem!
Hallo Leute,

ich habe eine Funktion, die mir eine Email zu einem Kundenauftrag in ein optisches Archiv packt.

Ablauf ist folgender.
Man klickt auf einen Button "Archivieren".
Gibt eine Kaufvertragsnummer ein und ich hole per ODBC die restlichen Daten zum Kaufvertrag von einer AS 400 zurück und zeige diese in der Dialogbox an.

Nach dem Speichern soll die Box die gesamten Werte in die Maske der Email schreiben und dann einen Index aufbauen und das Mail samt Anhänge in das Archiv schreiben.
Die Felder heißen alle gleich.

Das Email ist dabei in der Inbox nur markiert nicht geöffnet.

Bei den Usern mit Notes 7.0.3 funktioniert es seit Jahren ohne Probleme.
Bei Notes 8.5.2 User funktioniert es aber erst, wenn man das zweite mal auf den Knopf klickt.
Beim erstenmal werden die Daten nicht übergeben, denn die Felder der Dialogbox und der Emailmaske sind
zu diesem Zeitpunkt leer.

Hat jemand eine Idee woran das liegen kann?

Bin verzweifelt und für jede Idee dankbar.
Gruß Gerry (Lancelot)

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Was sollten wir denn dazu sagen, Gerry - so ohne Code?

Hast Du das Problem schon in die beiden wichtigen Teile zerlegt?
- Kommen beim ersten Click die Daten via ODBC auch wirklich im Speicher an?
- Oder passiert das Malheur erst bei der Übergabe der ausgelesenen Daten an die Maske, die Du für die DialogBox hernimmst?

Brich bitte Dein Problem herunter, sonst lohnt es sich für uns nicht einmal, über das Problem nachzudenken (zumindest die ohne Kristallkugel oder weisem Raben).

Bernhard

Offline Lancelot

  • Senior Mitglied
  • ****
  • Beiträge: 357
  • Geschlecht: Männlich
  • Tu was Du willst, aber schade keinem!
Hallo Bernhard,

Du hast recht ich bin schon lange genug im Forum um an den Code zu denken.

Sorry!!! :)

Das Probelm liegt schon gleich nach dem Aufruf der Dialogbox.
Die Werte werden nicht gleich an das untere Dokument übergeben.
Wenn ich mit dem Debug den Code durchlaufe, sind die Felder selbst wenn ich ein doc.Save den ich gleich nach der Dialogbox einbaue leer.
Ist die Verarbeitung aber beendet und ich schaue dann über die Eigenschaften rein, hat das Email die Daten, deswegen funktioniert es beim 2. Aufruf ohne Probleme.



Code teil eins

'----------------------------------------------------------------------------------------------------------------------------------------
   'Eingabe über Dialogbox "(Archiv_Dialog1)"
   Dim workspace As New NotesUIWorkspace
   
   Set db = session.CurrentDatabase
   Set col = db.UnprocessedDocuments
   Set doc = Col.GetFirstDocument()
   Set rtitem = doc.GetFirstItem( "Body" )
   
   'Ermittelt wieviel Anhänge im Email sind für das Array   
   anzahl_anhang = 0
   If doc.HasEmbedded Then
      anzahl_anhang = 0   
      Forall a In rtitem.EmbeddedObjects   
         
         anzahl_anhang = anzahl_anhang + 1
         
      End Forall
   End If
   
   'Prüfung ob mehrere Doc markeirt wurden
   If col.Count > 1 Then
      Msgbox  "Mehr als eine Email können Sie nicht zur gleichen Zeit archivieren!", MB_OK, "Archivierungsfehler"
      Exit Sub
   End If
   
   'Wenn das Feld leer ist rufe den dialog auf
   If doc.vkhs(0) = "" Then
      Test = workspace.DialogBox _
      ( "(Archiv_Dialog2)", True, True, True, False, False, False, "Auftragsdaten eingeben")
   Else
      varbox = Msgbox ("Soll dieses Email nochmal archiviert werden?", 20, "INFO")
      If  varbox = 6 Then
         Test = workspace.DialogBox _
         ( "(Archiv_Dialog2)", True, True, True, False, False, False, "Auftragsdaten eingeben")
      Else
         Exit Sub
      End If
   End If
   
   '**********************************************************
   If Test = "True" Then
      Goto Verarbeitung
   Else
      Exit Sub
   End If
   
Verarbeitung:   
   Const ErrFileNotFound = 53
   Const ErrCannotCreateFile = 4005
   
   On Error Goto ErrHandle
   On Error ErrFileNotFound Goto ErrHandle53
   On Error ErrCannotCreateFile Goto ErrHandle4005
   
   fnlen = Len( session.CurrentDatabase.FileName )
   fplen = Len( session.CurrentDatabase.FilePath )
   filepath = "\\qs44a0262\asroot\IMAGE_IMPORT\MAILFILER\"
   i = 0
   
   Call Mailexport

Code teil Zwei = Mailexport:

Set db = session.CurrentDatabase
   Set collection = db.UnprocessedDocuments
   Set view = db.GetView("($All)")
   Set doc = session.DocumentContext
   Set rtitem = doc.GetFirstItem( "Body" )
   Set senddate = doc.getfirstitem("PostedDate")
   Set sendfrom = doc.getfirstitem("From")
   Set maildoc = session.DocumentContext
   
   '******************************************************
   
   'Hier kommt es zum Abbruch weil das Feld noch leer ist
   If doc.Auftragsdatum(0) = "" Then
      End
   End If
Gruß Gerry (Lancelot)

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Und wo belegst Du das Item "Auftragsdatum"?
Welchen Typ hat dieses Item? "Datum" und der Vergleich auf einen Leerstring beissen sich irgendwie extrem ...

Bernhard

Offline Lancelot

  • Senior Mitglied
  • ****
  • Beiträge: 357
  • Geschlecht: Männlich
  • Tu was Du willst, aber schade keinem!
Ähmmmm,

dass Feld setzte ich bisher garnicht.
hat unter Notes 7 auch so funktioniert.

Die Felder sind alle vom Typ Text, denn von der AS 400 bekomme ich diese auch als Text übergeben.

Wo und wie setzte ich die Felder, denn in der Variabelen "TEST" steht nur "True" drin.
Gruß Gerry (Lancelot)

Offline pram

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.170
  • Geschlecht: Männlich
    • Foconis Object Framework
Ich hab da session.DocumentContext in Verdacht.  ???

Das machte bei mir mal Probleme in einem HTTP-Agenten. Siehe:
http://www-01.ibm.com/support/docview.wss?uid=swg1LO41061
(sollte aber eigentlich nun gefixed sein)

Sprich: Du bekommst in der Zeile:
 Set doc = session.DocumentContext
schlichtweg das falsche Dokument.
Lass dir mal die UNID von session.DocumentContext.UniversalID ganz am Anfang und an der Stelle an der du versuchst das Doc zu holen ausgeben.

Außerdem scheint mit der Aufruf der workspace.DialogBox irgendwie "suspekt", hier wird kein zu Grunde liegendes Dokument angegeben, das dann mit refreshParentNote aktualisiert werden kann.
Ich vermute, du greifst im Dialog auch auf session.documentContext zu und befüllst das Dokument mit den Werten.
Da IBM in 7.0.4 definitv irgendwas an der Methode gedreht hat geht es nun schief.


Gruß
Roland
Roland Praml

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

Offline Lancelot

  • Senior Mitglied
  • ****
  • Beiträge: 357
  • Geschlecht: Männlich
  • Tu was Du willst, aber schade keinem!
Hallo Roland,

ich habe mir die ID per msgbox gleich noch jedem setzten der Dokumente anzeigen lassen.
Sprich einmal im ersten Teil des Codes und dann kurz vor dem Abbruch und es war immer die gleiche ID.

Was ich aber festgestellt habe, ich habe mir eine Testmail geschickt und diese mehrmals kopiert.
Nachdem der Job gelaufen ist, hat aber nicht das markierte Doc welches archiviert werden sollte das Kennzeichen sondern eines was ich kopiert habe.
Die ID's der kopierten Docs sind aber alle andere.

Was kann ich anstatt des session.DocumentContext
noch verwenden? 
Gruß Gerry (Lancelot)

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Ich würde bei der Mailexport das Dokument als Parameter übergeben.

Du setzt innerhalb der Mailexport zwei Dokumente auf session.DocumentContext (doc und maildoc), wozu?

Offline Lancelot

  • Senior Mitglied
  • ****
  • Beiträge: 357
  • Geschlecht: Männlich
  • Tu was Du willst, aber schade keinem!
Hallo Peter,

ich stehe jetzt etwas auf dem Schlauch.
Wie meinst Du das Doc als Parameter übergeben.

Das Maildoc ist eingegdlich überlüssig geworden.
Denn da lese ich nur ein paar Felder für den INDEX zum Archivieren aus.

Das ist in 6 Jahen so gewachsen und ja ich könnte und werden es danach auf ein Doc beschrenken, aber das hat nichts mit dem Fehler zu tun.
Gruß Gerry (Lancelot)

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Ich wiederhole mal, was ich so verstanden habe:

Du holst Dir erst alle Dokumente über db.UnprocessedDocuments, erwartest aber zwingend nur eins (das ist auch ok so).

Dann hast Du das Dokument doc, mit dem Du irgendetwas machst (Routine Mailexport). In der Routine holst Du Dir das Dokument nochmal (wenn ich das alles richtig verstehe), allerdings dann über session.DocumentContext. Dieses Dokument ist doch das gleiche, dass Du Dir vorher schon geholt hast, oder? (Muss zugeben, dass ich das Script noch nicht wirklich vollständig geblickt habe). Falls es sich also um das gleiche Dokument handelt, kannst Du es als Parameter übergeben.

Sub Mailexport (doc As NotesDocument)
   ' doc verarbeiten
End Sub

In der aufrufenden Routine schreibst Du dann

Call Mailexport (doc)

Edit:

Zur Vollständigkeit: doc muss nicht zwingend gleich heißen, Du kannst auch
Sub Mailexport (uebergabedoc As NotesDocument)
  'uebergabedoc verarbeiten

und Call Mailexport (doc)

schreiben.
« Letzte Änderung: 14.10.10 - 09:30:02 von Peter Klett »

Offline pram

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.170
  • Geschlecht: Männlich
    • Foconis Object Framework
Ich habs auch so verstanden wie Peter und wenn ichs mir so recht überlege würde ich auf documentContext komplett verzichten und einfach das erste markierte Doc nehmen.

Ich durchblick das Script auch noch nicht ganz. Was genau macht der Dialog?
Soll der das aktuell ausgewählte Dokument mit Daten befüllten?
Wenn ja dann solltest du das Doc als 9. Parameter bei ws.dialogbox übergeben

Gruß
Roland

/Edit
das das erste Dokument von db.unprocessedDocuments das gleiche wie session.documentContext ist mag ja sein, aber ist es auch das SELBE Dokument?
Sprich: gibt es das Dokument als 2 getrennte Objekte im Speicher oder zeigen db.unprocessedDocuments und session.documentContext auf das selbe Objekt.
« Letzte Änderung: 14.10.10 - 09:50:49 von pram »
Roland Praml

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

Offline Lancelot

  • Senior Mitglied
  • ****
  • Beiträge: 357
  • Geschlecht: Männlich
  • Tu was Du willst, aber schade keinem!
@Roland und Peter

Ihr habe das Script schon richtig verstanden.

Die Dialogbox soll das in der Inbox markeirte Dokument mit Daten befüllen.
Danach nehme ich das markierte Doc mit den neuen Daten und schreibe es in das Archiv.

Ich habe rausgefunden, dass ich immer und zu jeder Zeit im Script das gleiche Doc im Zugriff habe, nur die Daten welche ich in der Dialogbox eintrage werden in Notes 852 nicht mehr in das markietre Doc zurück geschrieben.
Was bedeutet die Felder bleiben nach dem schließen der dialogbox über den Button ok einfach leer.
Gruß Gerry (Lancelot)

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Probier es mal mit dem 9. Parameter, wie Roland geschrieben hat
« Letzte Änderung: 14.10.10 - 10:30:09 von Peter Klett »

Offline Lancelot

  • Senior Mitglied
  • ****
  • Beiträge: 357
  • Geschlecht: Männlich
  • Tu was Du willst, aber schade keinem!
YES, YES, YES!!   ;D

Danke Euch allen, es funktioniert wieder ohne Problme.

Der 9. Parameter hat geholfen.

Und wieder mal bin ich froh mich damals in diesem Forum angemeldet zu haben  ;)

@Peter:
Jetzt mache ich auch das überflüssige Maildoc raus.   ;)
« Letzte Änderung: 14.10.10 - 10:43:37 von Lancelot »
Gruß Gerry (Lancelot)

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz