Delphi-PRAXiS
Seite 2 von 4     12 34      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   TMS Webcore app mit DB auf gehosteten Systemen (https://www.delphipraxis.net/211930-tms-webcore-app-mit-db-auf-gehosteten-systemen.html)

noisy_master 25. Nov 2022 12:31

AW: TMS Webcore app mit DB auf gehosteten Systemen
 
Okay, vielleicht bin ich auch einfach nur zu blöde ...

Du hast ja scheinbar eine CRUD API auf irgendeinem Server laufen. Die CRUD API hat ja auch einen Endpunkt mit /status/ping. Wie sieht denn dazu der Aufruf in einem Browser aus? Wenn ich
http://xxxxxx.xxx/api.php?status/ping eingebe bekomme ich die schon genannte Fehlermeldung. Eigentlich laut Seite soll da ja ein ReturnCode 200 und sowas:
{
"db": 42,
"cache": 9
}
(in der Art)rauskommen.....
Wie sieht das bei dir aus? Oder habe ich den Aufruf schon falsch?

TigerLilly 25. Nov 2022 15:44

AW: TMS Webcore app mit DB auf gehosteten Systemen
 
Hast du eine Middleware aktiviert in der Konfiguration?
Dort kannst du auch den Debugmodus aktivieren.
Und: Teste das nicht im browser sondern im REST debugger.

noisy_master 28. Nov 2022 07:05

AW: TMS Webcore app mit DB auf gehosteten Systemen
 
Sorry für die späte Antwort.
An der Konfiguration für die Middleware habe ich zumindest nichts geändert. Damit müsste es wohl CORS sein.

Ja, mit dem EMBA Rest Debugger werde ich es beizeiten versuchen, wäre dir aber trotzdem dankbar, wenn du mal bei dir per Browser den status/ping Endpoint ausprobieren könntest und das Ergebnis hier postest..

DANKE und Gruß

TigerLilly 28. Nov 2022 16:48

AW: TMS Webcore app mit DB auf gehosteten Systemen
 
Lass das ? weg:
http://xxxxxx.xxx/api.php/status/ping

noisy_master 28. Nov 2022 17:41

AW: TMS Webcore app mit DB auf gehosteten Systemen
 
Danke für die Info.

Irgendwie funktioniert das auf dem gehosteten System leider nicht(was auch immer ich falsch gemacht habe). Habe mir lokal nen XAMPP aufgesetzt und es funktioniert sofort.
Eine Frage hätte ich noch: Was für eine TMS Connection(und wie konfiguriert) hast du zur Verbindung zu der API genutzt?
Wenn du gaanz viel Muße hast hast du ja vielleicht sogar ein funktionierendes Snippet für mich :angel:

mytbo 28. Nov 2022 19:07

AW: TMS Webcore app mit DB auf gehosteten Systemen
 
Zitat:

Zitat von noisy_master (Beitrag 1515544)
Wenn du gaanz viel Muße hast hast du ja vielleicht sogar ein funktionierendes Snippet für mich :angel:

Delphi-Quellcode:
procedure ...RequestValue(pmResultProc: TProcBoolean);

  //-------- local function -------------------------------------------

  function DoHandleResponse(_pmEvent: TEventListenerEvent): Boolean;
  var
    rspJson: String;
    rspStatus: Integer;
    rspObject: TJSObject;
  begin
    asm
      rspJson = _pmEvent.target.responseText;
      rspStatus = _pmEvent.target.status;
    end;

    if rspStatus = 200 then
    begin
      rspObject := TJSJson.parseObject(rspJson);
      ...
    end;

    pmResultProc(...);
    Result := True;
  end;

  //-------- end local function ---------------------------------------

var
  req: TJSXmlHttpRequest;
  requestUrl: String;
begin
  asm
    var url = new URL(this.FServiceUrl);
    url.searchParams.append('accessToken', this.FAccessToken);
    requestUrl = url.toString();
  end;

  req := TJSXmlHttpRequest.new;
  req.addEventListener('loadend', @DoHandleResponse);
  req.open('GET', requestUrl);
  req.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
  req.send;
end;
Der Request in der Funktion läuft asynchron ab. Wenn du auf den Aufruf warten musst, verwende eine Promise.
Delphi-Quellcode:
function ...LoadValue: TJSPromise;
begin
  Result := TJSPromise.new(
    procedure(pmSuccess, pmFailed: TJSPromiseResolver)
    begin
      RequestValue(
        procedure(pmValue: Boolean)
        begin
          pmSuccess(pmValue);
        end);
    end);
end;
Benutzen kannst du es so:
Delphi-Quellcode:
procedure ...btnLoadValueClick(Sender: TObject);

  //-------- local function -------------------------------------------

  function HandleLoadValue(pmValue: JSValue): JSValue;
  begin
    Result := pmValue;
    btnLoadValue.Enabled := True;
    ShowMessage('Value available: ' + TJSString(pmValue).ToString);
  end;

  //-------- end local function --------------------------------------- 

begin
  btnLoadValue.Enabled := False;
  LoadValue._then(@HandleLoadValue);
end;
Bis bald...
Thomas

noisy_master 29. Nov 2022 10:31

AW: TMS Webcore app mit DB auf gehosteten Systemen
 
Hallo Thomas,

Danke für dein Beispiel! Wenn ich das richtig sehe hat das aber nichts mehr mit TMS geschweige denn mit TMS Web Core zu tun, oder habe ich da jetzt was falsch verstanden?

Gruß

TigerLilly 29. Nov 2022 10:33

AW: TMS Webcore app mit DB auf gehosteten Systemen
 
Zitat:

Zitat von noisy_master (Beitrag 1515544)
Wenn du gaanz viel Muße hast hast du ja vielleicht sogar ein funktionierendes Snippet für mich :angel:

Mach ich gerne - dauert nur ein bissl. Sorry.
Funktioniert extrem cool und nahezu ohne Code. Was mytbo zu Fuß macht, machen die TMS Komponenten von selbst.

noisy_master 29. Nov 2022 10:55

AW: TMS Webcore app mit DB auf gehosteten Systemen
 
Zitat:

Zitat von TigerLilly (Beitrag 1515593)
Mach ich gerne - dauert nur ein bissl. Sorry.
Funktioniert extrem cool und nahezu ohne Code. Was mytbo zu Fuß macht, machen die TMS Komponenten von selbst.

Kein Problem, freue mich ja über jede Hilfe ;-) Vielen Dank schon mal vorab....bin schon ganz gespannt

TigerLilly 29. Nov 2022 14:02

AW: TMS Webcore app mit DB auf gehosteten Systemen
 
Ich habe aus der DFM das wichtigste rauskopiert:
Code:
object conNaehrwerte: TWebClientConnection
    Active = False
    Headers.Strings = (
      'X-API-Key=12345678')
    DataNode = 'records'
    URI =
      'https://www.nutritional-software.at/api.php/records/TBLXY?filter=COL1,eq,ABC'
    Left = 1134
    Top = 568
  end
  object cdsNaehrwerte: TWebClientDataSet
    Connection = conNaehrwerte
    Params = <>
    Left = 1265
    Top = 561
  end
Also
1) TWebClientConnection aufs Formular und bestücken
2) TWebClientDataSet damit verbinden
3) active = true

Weiter kannst du mit TWebDataSource und dann auch schon visuelle Kompopnenten zB TWebDBEdit anbinden. Ich habe zuerst nur die TWeb*-Sachen verwendet, aber hier kann man auch alles aus TTMSFNC* benutzen.

Ich habe zu Beginn mit CORS gekämpft, aber wenn das API und der DB Server auf demseblen Server sind, ist das kein Thema. Der REST-Debugger war sehr hilfreich beim Verstehen, was im Header etc stehen muss bzw dann zurückgeliefert wird.

Achja: Oben das
Code:
 Headers.Strings = (
      'X-API-Key=12345678')
steht da nur, weil ich als Middleware die Authentifizierung aktiv habe. Wenn du die nicht hast, brauchst du den header gar nicht setzen.

Hilft dir das mal?


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:07 Uhr.
Seite 2 von 4     12 34      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz