URL aufrufen ohne Browser zu öffnen. BC18

9. Februar 2022 19:11

Hallo,

ich möchte in AL eine URL aufrufen, ohne dass sich dabei ein Browserfenster öffnet.

System.Hyperlink öffnet bei jedem Klick ein neues Browserfenster

In NAV2013 hatte ich das so gelöst wie hier beschrieben:
https://www.navuser.com/how-to-process- ... r-in-c-al/

Das hier sieht auch so aus, ist aber ja auch C/AL:
viewtopic.php?t=5972

Aber mit HttpClient und HttpRequestMessage bekomme ich immer den Fehler, dass der Server nicht erreichbar ist. Zumindest in allen Varianten, die ich versucht habe.

Also es geht ja auch eigentlich nicht darum einen Request zu senden und schon gar nicht darum eine Response zu verarbeiten. Ich habe einfach einen Webserver der über die URL Parameter bekommt und dann eine Funktion ausführt.

Ich hoffe, jemand kann mir helfen.

Vielen Dank im Voraus!
Schöne Grüße
Andreas Görzen

Re: URL aufrufen ohne Browser zu öffnen. BC18

10. Februar 2022 11:14

agoerzen hat geschrieben:Also es geht ja auch eigentlich nicht darum einen Request zu senden und schon gar nicht darum eine Response zu verarbeiten. Ich habe einfach einen Webserver der über die URL Parameter bekommt und dann eine Funktion ausführt.

öhm, doch, es geht genau darum.
ob du die Response verarbeitest, oder nicht, das ist natürlich dir überlassen. Aber warum sollte man eine Rückmeldung nicht verarbeiten? Lass doch mal deinen Webserver offline sein.....

weiterhin sei die Frage gestattet, ob denn jeder deinen Webserver ansteuern und diese Funktion abfeuern darf?
Ich behaupte einfach mal ganz frech "nein".

Re: URL aufrufen ohne Browser zu öffnen. BC18

10. Februar 2022 17:45

Hallo,
sind HttpClient Anfragen in deiner Extension zugelassen? Dazu im Client in die Erweiterungsverwaltung gehen, deine Extension markieren, Verwalten -> Konfigurieren und in der Page HttpClient-Anfragen zulassen aktivieren.
temp.png
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Re: URL aufrufen ohne Browser zu öffnen. BC18

10. Februar 2022 23:05

diese Einstellung ist OnPrem nicht zu treffen - auch im SaaS-Betrieb nicht - außer Sandboxes!
In unseren Extensions senden wir eine API-Request an einen Webserver und haben niemals den genannten Parameter auf true gesetzt.....und trotzdem funktioniert es.

Ich habe bisher diese Einstellung tatsächlich auch nur in Sandbox-Umgebungen verwendet - okay zugegeben, das ist bereits eine Weile her, aber in all unsere OnPrem-Installationen und SaaS-Bereitstellungen
ist dieses Merkmal nicht gesetzt.
PS:
https://jpearson.blog/2018/10/23/extension-settings-in-microsoft-dynamics-business-central/
und hier
https://www.kauffmann.nl/2018/11/05/outbound-http-calls-blocked-in-business-central-sandbox/
<<<- was auch Sinn ergibt.

Re: URL aufrufen ohne Browser zu öffnen. BC18

11. Februar 2022 12:44

Vielen Dank für die Hinweise!!

weiterhin sei die Frage gestattet, ob denn jeder deinen Webserver ansteuern und diese Funktion abfeuern darf?
Ich behaupte einfach mal ganz frech "nein".


Die Frage ist klar gestattet. Der "Webserver" ist in Wirklichkeit ein ELO JavaClient, der auf einem Port an http://localhost lauscht. Darüber kann man im ELO Funktionen aufrufen. Da das ganze lokal auf dem Rechner ist, gibt es hier kein Security-Problem und ja, "jeder" darf das. In dem Fall jede andere Software, die auch gerade da läuft.

Die Einstellung "HttpClient-Anfragen zulassen" brachte tatsächlich keinen Fortschritt.

Interessanterweise funktioniert ein:
Code:
System.Hyperlink('http://localhost:8990/script/httpSearchByIndex/?params=ObjektID|' + Format(EloId));

anstandslos. Nur leider geht da bei jedem Klick ein neuer Tab im Browser auf.

Code:
        request.SetRequestUri('http://localhost:8990/script/httpSearchByIndex/?params=ObjektID|' + Format(EloId));
        request.Method := 'POST';

        client.Send(request, response);


und alle anderen Kombis, an Befehlen in dem xhtml-Kontext, die ich versucht habe, führen immer zur Fehlermeldung:

"Fehler beim Senden der Anforderung. Die Verbindung mit dem Remoteserver kann nicht hergestellt werden."

Falls noch jemand weitergehende Hinweise hat, wäre ich dankbar.
Evtl. hat jemand Beispielcode für ein ähnliches Szenario, der funktioniert?
Ich bin mir tatsächlich nicht sicher, wie dieser HttpClient genau anzuwenden ist.

Vielen Dank im Voraus!
Schöne Grüße
Andreas Görzen

Re: URL aufrufen ohne Browser zu öffnen. BC18

11. Februar 2022 16:05

warum verwendest du ein POST und kein GET?

Re: URL aufrufen ohne Browser zu öffnen. BC18

11. Februar 2022 18:12

Hab alle Varianten durch. In meinem NAV2013 funktioniert es mit POST.

Re: URL aufrufen ohne Browser zu öffnen. BC18

14. Februar 2022 09:57

nur mal so ne blöde Frage:
der ELO-Webserver ist aber auch auf dem selben Server, auf dem der NST liegt, oder?

Re: URL aufrufen ohne Browser zu öffnen. BC18

14. Februar 2022 13:10

sweikelt hat geschrieben:nur mal so ne blöde Frage:
der ELO-Webserver ist aber auch auf dem selben Server, auf dem der NST liegt, oder?

Der "ELO-Webserver" ist in Wirklichkeit der ELO-JavaClient und der läuft auf dem selben Rechner wie der BC-Webclient, nicht da, wo der Service-Tier läuft.

Re: URL aufrufen ohne Browser zu öffnen. BC18

14. Februar 2022 18:27

sweikelt hat geschrieben:nur mal so ne blöde Frage:
der ELO-Webserver ist aber auch auf dem selben Server, auf dem der NST liegt, oder?

Ist in Wirklichkeit eine sehr, sehr gute Frage. Der HttpClient agiert auf dem Service-Tier, nicht auf dem Client.
Dann ist klar, dass mir der nichts nützt.

Vielen Dank für die Unterstützung.

Falls noch jemand eine Möglichkeit kennt einen (x)HtmlRequest in BC auf dem Client auszuführen, wäre ich dankbar. Fürchte aber, dass das nicht möglich sein wird.

Schöne Grüße
Andreas Görzen

Re: URL aufrufen ohne Browser zu öffnen. BC18

15. Februar 2022 13:10

okay - noch mal für mich

wo läuft der ELO-Client, der die Anfragen annimmt?
Auf dem NST oder auf dem Client-PC, wo NAV/BC ausgeführt wird?
so wie ich das verstehe, auf dem Client-PC, richtig?

du brauchst also eine Möglichkeit, den Client-PC der aktiven Sitzung zu ermitteln und die Anfrage dann eben an diesen zu schicken.
Leider gibt es diese Möglichkeit nicht mehr, bzw. ist mir nicht bekannt.

Die andere Option ist, wie du schon sagtest, den http-request auf dem Client auszuführen - Stichwort runOnClient - was die aber bei HttpClient nicht gelingen wird.

Demnach bleibt wohl nichts anderes übrig, als die Abfrage in .Net zu packen und die .Net dann per RunOnClient auszuführen - was allerdings ein ziehmlicher overkill wäre (aus meiner Sicht).

Kann der der ELO-Client nicht auf dem NST installiert werden, sodass die URL dort angetriggert werden kann?
oder nützt dir das reine antriggern gar nichts?

Fragen über Fragen :D