Codeblock Onlinehilfe

TbeCbHTTPAsync

TbeCbHTTPAsync

Eine Komponente zur Kommunikation über HTTP Verbindungen (ähnlich wie TbeCbHTTP und TbeCbbengHTTP). Die Kommunikation (Senden und Empfangen) erfolgt dabei asynchron wodurch die Oberfläche nicht blockiert wird. Hinweis: Es können immer 3 Anfragen pro TbeCbHTTPAsync Instanz parallel verarbeitet werden. Zu viel gleichzeitige TbeCbHTTPAsync Instanzen können sich je nach Hardware negativ auf die Systemleistung auswirken.

Eigenschaften

Eigenschaft

Beschreibung

Name:C


Tag:N


Methoden

Methode

Beschreibung

CbClearRequests():N

Alle in der Warteschlange befindlichen (und noch nicht gestartete) Requests löschen.

CbRequest(aUrl:C, aMode:N, aSettings:O, aBody:C, aProgId:U):C

Asynchronen HTTP Request erstellen und zur Warteschlange hinzufügen Rückgabe: eine Eindeutige GUID über die der Request dann in den Events nach Ausführung eindeutig zugeordnet werden kann -Parameter: - cURL:URL an die der Request gestellt werden soll (bei be-Portal Anfragen reicht hier Query Teil, also der Teil nach dem /) - nMode:siehe TbeHTTPRequestMode - oSettings:siehe TBeCbHTTPAsyncRequestSettings bzw. TBeCbHTTPAsyncRequestPortalSettings - cBody:Inhalt der verschickt werden soll - uProgId: neben der Rückgabe eine Möglichkeit um einen eindeutigen Kenner zu übermitteln mit dem der Request nach Ausführung wieder zugeordnet werden kann.

Beispiel

| cRes, oHTTP, cLastRequest:C:='', nLastMasterId:N:=-1, oSettings:O, oCalcEdit0:O, oCalcEdit1:O, oCalcEdit2:O, oCalcEdit3:O |

SetPersistent(true),

//******************************************************************************
function FindEdit(cName:C)
   | oOwner |
   oOwner := GetOwner(Self),
   Result := FindObject(oOwner, cName + '_' + right(Self.Name, 9)),
end,

//******************************************************************************
// Event wenn der Asynchrone Aufruft erfolgreich abgearbeitet wurde
// @Result: null
//******************************************************************************
function CbAsyncResponse(cGUID:C, cURL:C, nMode:N, oProgId:U, oResponse:O) // TBeCbHTTPAsyncResponse
   | oJSON |

   if (cGUID == cLastRequest) and (oProgId = Self) then
      if oResponse.ContentType == 'application/json' then
         oJSON := CreateObject('TbeCBAnything'),
         startseq
            oJSON.FromString(oResponse.Body),
            oCalcEdit0.Text := oResponse.ID,
            // oCalcEdit0.Text := ArrToStr(oResponse.Headers) + crlf + oResponse.Body,
            oCalcEdit1.Text := oJSON.getString('name'),
            oCalcEdit2.Text := oJSON.getString('email'),
            oCalcEdit3.Text := oJSON.getString('body'),
         always
            DestroyObject(oJSON),
         stopseq,
      endif,
   endif,
end,

//******************************************************************************
// Event wenn der Asynchrone Aufruft fehlgeschlagen ist
//******************************************************************************
function CbAsyncFailed(cGUID:C, cURL:C, nMode:N, oProgId:U, oResponse:O) // TBeCbHTTPAsyncResponse
   |oJSON |
   if cGUID == cLastRequest then
      oCalcEdit0.Text := Str(oResponse.StatusCode) + ' - ' + oResponse.Body,

      if oResponse.StatusCode = 404 then
         oCalcEdit1.Text := 'k.A.',
         oCalcEdit2.Text := 'k.A.',
         oCalcEdit3.Text := 'k.A.',
      else
         oCalcEdit1.Text := '! FEHLER !',
         oCalcEdit2.Text := '! FEHLER !',
         oCalcEdit3.Text := '! FEHLER !',
      endif,
   endif,
end,

//******************************************************************************
// Neuen Asynchronen Request ausführen
//******************************************************************************
function MakeRequest(cUrl:C)
   // oHTTP.CbClearRequests()
   cLastRequest := oHTTP.CbRequest(cUrl, rmGet, oSettings, '', Self),
   oCalcEdit0.Text := cLastRequest,
end,

//******************************************************************************
//
//******************************************************************************
function FindEdits()
   if Empty(oCalcEdit1) then
      oCalcEdit1 := FindEdit('TBeCalcEdit8'),
      oCalcEdit1.Text := '',
   endif,

   if Empty(oCalcEdit2) then
      oCalcEdit2 := FindEdit('TBeCalcEdit9'),
      oCalcEdit2.Text := '',
   endif,

   if Empty(oCalcEdit3) then
      oCalcEdit3 := FindEdit('TBeCalcEdit10'),
      oCalcEdit3.Text := '',
   endif,

   if Empty(oCalcEdit0) then
      oCalcEdit0 := Self,
      oCalcEdit0.Text := '',
   endif,
end,

//******************************************************************************
//
//******************************************************************************
function Init()
| aHeaders:A |
   FindEdits(),

   oHTTP := CreateObject("TbeCbHTTPAsync", , Self, nil, true),
   AssignEvent(oHTTP, 'CbOnAsyncResponse', 'CbAsyncResponse'),
   AssignEvent(oHTTP, 'CbOnAsyncFailed', 'CbAsyncFailed'),

   oSettings := CreateObject("TBeCbHTTPAsyncRequestSettings", "RequestSettings", oHTTP, nil, true),
   oSettings.UserAgent := 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36',
   oSettings.Timeout   := 1000, // MSek. 0 = unendlich
   oSettings.VerifySSL := true,

   AAdd(aHeaders, {"X-HEADER-TEST", "Test Value"}),
   AAdd(aHeaders, {"X-HEADER-TEST-ABC", "Test Value ABC"}),
   oSettings.Headers := aHeaders,
end,

if ClassOf(GetOwner(Self), 'TBeMaskDesigner') then
   cRes := 'Designer',
else
   if Empty(oHTTP) then
      Init(),
   endif,
   cRes := '',
   if nLastMasterId <> DAB010:ID then
      nLastMasterId := DAB010:ID,
      oCalcEdit1.Text := 'loading ...',
      oCalcEdit2.Text := 'loading ...',
      oCalcEdit3.Text := 'loading ...',

      cRes := MakeRequest("https://jsonplaceholder.typicode.com/comments/" + Str(nLastMasterId)),
   endif,
endif,

cRes