Domino 9 und frühere Versionen > ND6: Entwicklung

Probleme bei AS400 Abfrage mittels ODBC auf Domino-Server (RunOnServer)

<< < (2/3) > >>

Basti07:
Danke Euch für den Tip, aber ich werde nicht ganz schlau wie ich das richtig anstellen soll.
Anbei mal der Code den ich aktuell für den Aufruf verwende und die Ausgabe im Domino-Log erfolgt.
Anstelle dieser Ausgabe soll alles (was unten im Code auskommentiert ist) an das derzeit geöffnete Dokument übergeben werden.
Ich bekomm's aber nicht gebacken, dem Agenten das aktuelle Dokument zu übermitteln.

Hier mal ein Teil des Codes:

Die Schaltfläche in dem Formular:


--- Code: ---Sub Click(Source As Button)
Dim workspace As New notesuiworkspace
Dim s As New NotesSession
Dim db As NotesDatabase
Dim doc As notesdocument
Dim uidoc As notesuidocument

Set uidoc = workspace.CurrentDocument
Set doc = uidoc.Document
Call uidoc.Save
Dim agent As NotesAgent
Set db = s.CurrentDatabase
Set Agent = db.GetAgent("MeinAgent")
Call Agent.RunOnServer()
Call uidoc.Reload
Call workspace.ViewRefresh
End Sub
--- Ende Code ---


Der Agent der per RunOnServer ausgeführt wird:


--- Code: ---Sub Initialize

Dim con As ODBCConnection
Dim dataSource As String
Dim userName As String
Dim password As String
Dim qry As New ODBCQuery
Set con = New ODBCConnection
Dim result As New ODBCResultSet

con.SilentMode = True

dataSource = "AS400"
userName   = "Username"
password    = "Passwort"

If Not con.ConnectTo(dataSource, userName, password) Then
'Call uidoc.FieldSetText("Status", "Verbindungsfehler")
MsgBox "Verbindungsfehler"
con.Disconnect
Exit Sub
End If

Set qry.Connection = con
Set result.Query = qry

qry.SQL ="SELECT Feld1, Feld2 FROM Tabelle1 WHERE Feld1 = 'Feld2'"

result.Execute

Error01 = "Result:"
Error02 = result.GetErrorMessage(result.Execute)
Error03 = result.GetExtendedErrorMessage(result.Execute)

'Call uidoc.FieldSetText("Status", Error01 & Chr(10) & Error02  & Chr(10) & Error03)
MsgBox "Error01 & Chr(10) & Error02 & Chr(10) & Error03

Do
result.NextRow

If Not result.IsResultSetAvailable Then
'Call uidoc.FieldSetText("Status", "Abfragefehler oder leeres Ergebnis!")
MsgBox "Abfragefehler oder leeres Ergebnis"
con.Disconnect
Exit Sub
End If

Feld1 = result.GetValue("Feld1")
Feld2 = result.GetValue("Feld2")

Loop Until result.IsEndOfData

'Call uidoc.FieldSetText("Formularfeld1", Feld1)
'Call uidoc.FieldSetText("Formularfeld2", Feld2)
MsgBox Feld1
MsgBox Feld2
con.Disconnect

End Sub
--- Ende Code ---

koehlerbv:
Warum übergibst Du dem Agent nicht die NoteID des betreffenden Dokuments?
Warum dealst Du auf einem serverbasierenden Agent mit Messagebox und wunderst Dich, dass das Zeug im Server-Log landet?

Empfehlung: R.T.F.M.!

Bernhard

Peter Klett:
In Deinem auskommentierten Script arbeitest Du im Frontend (uidoc), das kann kein periodisch laufender Agent (agent.RunOnServer ist ein periodischer Agent).

Du musst

Dein geöffnetes Dokument speichern (falls es das noch nicht ist)
Den Agenten auf dem Server starten und dabei das Dokument mitgeben (NoteID)
Das Dokument durch den Agenten im Backend (also NotesDocument, nicht NotesUIDocument) mit Daten befüllen
Das geöffnete Dokument aktualisieren

Auch eventuelle Fehlermeldungen solltest Du in ein entsprechendes Feld im Dokument eintragen, dann kann der Benutzer die nach Lauf des Agenten direkt sehen.

Basti07:
Das mit der NoteID hat funktioniert und ebenfalls auch das Befüllen des Backend-Dokumentes, danke dafür!

Jetzt hebt's nur noch an dem NotesUIDocument.Reload / NotesUIWorkspace.ViewRefresh.
Das Frontend-Dokument wird und wird nämlich - trotz der o.s. Befehle nicht aktualisiert. Erst wenn ich das Frontend-Dokument schließe und wieder öffne, kann ich die neuen Werte sehen, aber ich will natürlich dass die Werte für den Anwender sofort zu sehen sind.

Gruß
Basti

Peter Klett:
Mit dem Reload habe ich keine Erfahrung. Wenn es wirklich nicht ohne Schließen und Öffnen geht, würde ich das halt tun (natürlich automatisch), da flackert nur mal kurz der Schirm. Einziger sonstiger Nachteil: Bei großen Dokumenten, bei denen der Benutzer vielleicht einen Reiter geöffnet hat oder nach unten gescrollt hatte, springt das Dokument natürlich auf den Anfang zurück.

Aber vielleicht kennt jemand einen Trick, wie man ein Dokument, das im Backend von einem Agenten verändert wurde, aktualisieren kann, ohne es zu schließen. Ich erinnere mich nicht, sowas jemals gebaut zu haben.

Navigation

[0] Themen-Index

[#] Nächste Seite

[*] Vorherige Sete

Zur normalen Ansicht wechseln