Das Notes Forum

Domino 9 und frühere Versionen => ND7: Entwicklung => Thema gestartet von: buzzy666 am 10.07.06 - 09:03:41

Titel: Ergebnis eines WebService-Aufrufs in einer DialogBox anzeigen?
Beitrag von: buzzy666 am 10.07.06 - 09:03:41
Hi zusammen,
nachdem ich's endlich geschafft habe, von Notes aus einen WebService anzusprechen (per Button, bzw. zeitgesteuert) würde ich gern einen Schritt weitergehen und eine DialogBox damit befüllen.
Sprich: ich habe zwei Parameter und will die zurückgelieferten Werte in einer DialogBox zur Anzeigen bringen. Hat jemand ne Idee, wie man sowas geschickt lösen kann?
Die einzige Möglichkeit, die mir einfallen würde wäre ein Button, der den WS aufruft, dieser erzeugt ein temp. Dokument mit den Rückgabewerten und ich lese es dann aus. Aber woher soll der Button dann wissen, welches Dokument?
Kann ich irgendwie anders aus einem Java-Agenten die Werte zurückgeben?

Danke & Gruß,
Buzzy
Titel: Re: Ergebnis eines WebService-Aufrufs in einer DialogBox anzeigen?
Beitrag von: m3 am 10.07.06 - 09:07:33
Ähhh. Webservices sind dafür gedacht, dem Aufrufer Daten zurück zu geben. Daher musst Du die Dialogbox auf der Aufrufer-Seite implementieren, nicht im Webservice.

Ansonsten gelten für ein Webservice die gleichen Regeln wie für einen periodischen Agenten, der auf dem Server läuft: Keine UI-Elemente, Messagebox et al werden ins Notes-Log umgeleitet.

Sag mal, was Du erreichen willst, ev. kann ich Dir dann helfen.
Titel: Re: Ergebnis eines WebService-Aufrufs in einer DialogBox anzeigen?
Beitrag von: buzzy666 am 10.07.06 - 10:01:39
Ok also schau her:
Ich hab ne Notes-App, in der Vertriebsaktionen geplant werden. Um Infos zu alten Aktionen anzeigen zu können, soll z.B. zu einer Aktionsnummer und einem Aktionsjahr alle vergangenen Aktionsbezeichnungen angezeigt werden. Dann werden aus dieser Liste wiederum einige ausgewählt, zu denen dann die Erfolgszahlen ermittelt werden.
Der User geht also in eine Maske, gibt eine Jahr ein und eine Nummer (also. z.B. 2005 und 12345678). Nun sollten in einer DialogBox alle Aktionsbezeichnungen aufgelistet werden, die es zu der Jahr/Nummern-Kombination gibt.
Meine bisherigen (manuellen) WebService-Aufrufe fanden bisher so statt:
in einem Dokument klick ich nen Button, der per LS einen Java-Agenten startet:

soapAgent.Run(thisdoc.NoteID)

Anhand des Parameters thisdoc.NoteID kann der Java-Agent die Parameter für den WebService auslesen, Werte ermitteln und nach thisdoc zurückschreiben.

Der Java-Agent macht im wesentlichen folgendes:

public static void main(String[] args) {

        VermittlerWacServiceLocator wsl = new VermittlerWacServiceLocator();

        int aktNr[] = new int[1];
        int jahr[] = new int[1];

        try {
            URL wsURL = new URL("http://orpheus.qv.de:7010/wek.ws/vermittlerWac");

            VermittlerWacServicePort wsp = wsl.getvermittlerWacServicePort(wsURL);

            aktNr[0] = 12345678;
            jahr[0] = 2005;
            VermittlerTarifDto[] vermittlerTarifDtoArray = wsp.getVermittlerTarife(aktNr, jahr);
            for (int i = 0; i < vermittlerTarifDtoArray.length; i++) {
                // mach was mit dem Ergebins
            }

        } catch (Throwable e) {
            e.printStackTrace();
        }

    }

Die ganze Geschichte basiert übrigens auf Axis, deswegen ist der Agent auch recht schlank.

Kam mein Anliegen halbwegs verständlich rüber  ???

Danke & Gruß,
Buzzy
Titel: Re: Ergebnis eines WebService-Aufrufs in einer DialogBox anzeigen?
Beitrag von: m3 am 10.07.06 - 10:10:21
Die Dialog-Box soll aber im Browser aufgehen, der über Axis mit HTML gefüttert wird, oder?
Also musst Du das im Browser implementieren (Javascript/AJAX), da kann Dir Domino/Webservices nicht helfen.
Titel: Re: Ergebnis eines WebService-Aufrufs in einer DialogBox anzeigen?
Beitrag von: buzzy666 am 10.07.06 - 10:19:53
Ähm nö!? Hat nichts mit dem Browser zu tun...
Oh Gott sag mir etz bitte nicht, dass man des vom Notes-Client aus eh ganz anders macht  :-\

Ich hab mir halt nen bestehenden WS vorgenommen, den ein IBMler mal bei uns implementiert hat...

Gruß,
Buzzy
Titel: Re: Ergebnis eines WebService-Aufrufs in einer DialogBox anzeigen?
Beitrag von: Thomas Schulte am 10.07.06 - 10:28:34
Also wenn das für Notes Clients ist, ja dann macht man das ganz anders.
Titel: Re: Ergebnis eines WebService-Aufrufs in einer DialogBox anzeigen?
Beitrag von: m3 am 10.07.06 - 10:29:13
Ah. Sorry. Ich bin ein bissl auf der Leitung gestanden (zu wenig Kaffee). Du rufst im Notes-Client ein externes WebService auf.

Wenn Du den Agent mit "AgentRun" startest, kannst Du Ihm eine DocID mitgeben. In das Doc kann er dann schreiben und Du weißt, wo Du nachschauen musst.
Titel: Re: Ergebnis eines WebService-Aufrufs in einer DialogBox anzeigen?
Beitrag von: buzzy666 am 10.07.06 - 10:49:10
Hm...is halt etwas unperformant, aber was solls - hätten sie's mich halt mit ODBC machen lassen  >:D

Danke & Gruß,
Buzzy
Titel: Re: Ergebnis eines WebService-Aufrufs in einer DialogBox anzeigen?
Beitrag von: buzzy666 am 10.07.06 - 12:44:33
Ah. Sorry. Ich bin ein bissl auf der Leitung gestanden (zu wenig Kaffee). Du rufst im Notes-Client ein externes WebService auf.

Wenn Du den Agent mit "AgentRun" startest, kannst Du Ihm eine DocID mitgeben. In das Doc kann er dann schreiben und Du weißt, wo Du nachschauen musst.

Hast Du ne Idee, wie ich das UIDoc refreshen muss, damit ich auf die Werte Zugreifen kann? Bisher komm ich nur dran, wenn ich das Dok schliesse und neu öffne  :-:

Danke nochmal!

Gruß,
Buzzy
Titel: Re: Ergebnis eines WebService-Aufrufs in einer DialogBox anzeigen?
Beitrag von: m3 am 10.07.06 - 12:48:30
Ja, so gehört sich das bei einem NotesUIDocument auch, wenn RichText Felder involviert sind. Ansonsten reicht ein Document.Refresh(), um die Änderungen anzuzeigen.
Titel: Re: Ergebnis eines WebService-Aufrufs in einer DialogBox anzeigen?
Beitrag von: buzzy666 am 10.07.06 - 13:33:07
Hm,
also irgendwie aktualisiert sich da nix :-(
Und das Feld, wo die Werte aus dem Java-Agenten reinkommen ist ein ganz normales Textfeld.

Der Agent befüllt das Feld "tempWS" und führt einen doc.save() aus.

Hier ist der Button, der das Ganze startet:

   Dim s As New notessession
   
   Dim thisdb As notesdatabase
   Set thisdb = s.CurrentDatabase
   
   Dim ws As New NotesUIWorkspace
   Dim uidoc As notesuidocument
   Set uidoc = ws.CurrentDocument
   
   Dim thisdoc As notesdocument
   Set thisdoc = uidoc.Document
   
   Set soapAgent = thisdb.getAgent("VermittlerWac")   
   Call soapAgent.Run(thisdoc.NoteID)
   
   Call uidoc.Refresh
   
   werte = ws.Prompt( PROMPT_OKCANCELLIST , "Wähle!" , "Mach etz..." , "" , thisdoc.tmpWS )

Ich könnte das UIdoc per Script schliessen und neu öffnen, aber das ist halt unschön...

Danke & Gruß,
Buzzy
Titel: Re: Ergebnis eines WebService-Aufrufs in einer DialogBox anzeigen?
Beitrag von: m3 am 10.07.06 - 13:40:43
Warum willst Du die Daten in das aktuelle Doc schreiben? Mach doch ein eigenes auf, dann kannst Du die Daten bequemer auslesen.
Titel: Re: Ergebnis eines WebService-Aufrufs in einer DialogBox anzeigen?
Beitrag von: buzzy666 am 10.07.06 - 13:49:20
Wohl wahr, aber woher soll denn der Knopf, der das Ganze startet das neue Dokument kennen?
ich müsste dem Agenten höchstens noch nen Schlüssel mitgeben, anhand dessen das neue Dok wiedergefunden werden kann...könnte klappen.

Danke & Gruß,
Buzzy
Titel: Re: Ergebnis eines WebService-Aufrufs in einer DialogBox anzeigen?
Beitrag von: m3 am 10.07.06 - 13:52:59
Also entweder stehst Du auf dem Schlauch oder Du brauchst DRINGEND eine Entwickler-Schulung.

Erstell doch "in dem Knopf" mit "Set wertedoc = New NotesDocument ( db )" ein neues Dokument, speichere es und übergib dessen DocID an den Agenten.
Wenn der Agent fertig ist (und das wertedoc erneut gespeichert hat) kannst Du ganz kommod darauf zugreifen.
Und wenn Du fertig bist, löscht DU das wertedoc "im Knopf" wieder.

Umständlich, aber sollte klappen.
Titel: Re: Ergebnis eines WebService-Aufrufs in einer DialogBox anzeigen?
Beitrag von: buzzy666 am 10.07.06 - 16:39:12
Ok ich bin zu doof  :'(

   Dim wsDoc As New notesdocument(thisdb)
   wsDoc.form = "wsDoc"
   wsDoc.vermittlernummer = thisdoc.vermittlernummer(0)
   
   Call wsDoc.Save(True,False)
   noteid = wsDoc.NoteID
   
   Set soapAgent = thisdb.getAgent("VermittlerWac")   
   Call soapAgent.Run(wsDoc.NoteID)
   
   Dim fsd As NotesDocument
   Set fsd = thisdb.GetDocumentByID(noteid)   

"fsd" findet er zwar, aber das Feld, wo die Werte reinkommen ist nicht existent. In einem DB-Viewer (scanEZ) gibt's das Feld aber und ist auch gefüllt...muss ich das doc irgendwie anders speichern, also auf Java mit doc.save()???

Buzzy
Titel: Re: Ergebnis eines WebService-Aufrufs in einer DialogBox anzeigen?
Beitrag von: buzzy666 am 10.07.06 - 16:43:56
Ha,

so geht's:

        noteid = wsDoc.NoteID

   Dim wsView As NotesView
   Set wsView = thisdb.GetView("wsView")
   
   Call wsView.Refresh
   
   Dim fsd As NotesDocument
   Set fsd = wsView.GetDocumentByKey(noteid)

Is zwar noch ein Schleifchen mehr, aber darauf kommt's auch nimmer an :-/

Merci nochmal,
Buzzy
Titel: Re: Ergebnis eines WebService-Aufrufs in einer DialogBox anzeigen?
Beitrag von: Thomas Schulte am 10.07.06 - 18:09:11
und wenn du statt der NoteID die universalID nimmst und mit db.getdocumentbyUNID darauf zugreifst, dann sparst du dir auch diese Schleife noch, und die Zeit die du für den View.Refresh brauchst auch.