Project

General

Profile

Actions

Feature #10443

open

Konzept _api / _live

Added by Benjamin Baer almost 4 years ago. Updated almost 4 years ago.

Status:
In Progress
Priority:
Normal
Assignee:
Carsten Rose
Target version:
Start date:
22.04.2020
Due date:
% Done:

0%

Estimated time:
Discuss:
Prio Planung:
Vote:

Description

Analog zu _link.

Eine einfache Moeglichkeit mittels API Datenbank Felder abzurufen, zu setzen oder zu loeschen.

't:blablabla|table:TABLE|params:&id=recordId&FIELDNAME=value|c:btn|delay:ms|function:javascriptFunction|s' AS _api

return {
status: OK / ERROR,
data: '{fieldname: value}'
}

  • delay | onClick | etc. zum ausfuehren der function.
  • vorgefertigte Funktionen fuer edit / delete.
    • Beispiel: Edit input field mit |E - kann zb. ein Text anzeigen, bis darauf geklickt wird - dann wird daraus ein input field

PHP Seite:

Eine Mini API die den request per get oder sip entgegen nimmt und je nach funktion ein return liefert.

  • Bei Edit - return mit den geaenderten Feldern in der Datenbank
  • Bei Delete - return mit true
  • Bei Select - return der angegebenen Felder einer bestimmten id (oder eventuell auch nach sql selector)

Client Seite:
Wird zuerst ueber GET getestet bei aktuellen anforderung des Exam Tools und dann entsprechend aufgearbeitet. _api konvertierung im report muss also noch nicht erstellt werden - fokus auf die API.

Actions #1

Updated by Carsten Rose almost 4 years ago

  • Description updated (diff)
Actions #2

Updated by Benjamin Baer almost 4 years ago

<script> $("#requesthelp").on('click', function() { var request = $.ajax({ url: "api.php", method: "POST", data: { table: "ExamStudent", values: { raiseHand: "Yes" } dataType: "JSON" } }); request.done(function(msg) { console.log("Message", msg); }); request.fail(function(jqXHR, textStatus) { console.error("Request failed: " + textStatus); }); }); </script>
Actions #3

Updated by Carsten Rose almost 4 years ago

  • Meeting mit ME, BB, CR
  • Aktuell geht es nur um GET (kein POST, SET)

Konzept:

  • In Report wird in einem SELECT Statement eine Spalte `'...' AS _live` definiert.
  • QFQ erzeugt/liefert ein HTML SPAN Element an den Client.
  • Im Client wird via qfq.js (definiert durch das HTML SPAN Element) alle x-Millisekunden ein API Call ausgefuehrt.
  • Zurueck kommt (in einer ersten Version) HTML Code (eingepackt in eine JSON Antwort, siehe PROTOCOL.md 'element-update').
  • Der Inhalt des HTML SPAN Elements wird ersetzt durch die Antwort.
  • In einer ersten Version referenziert `'...' AS _live` immer einen anderen tt_content. Ein solcher Record kann optional mit 'render=api' auf der gleichen Seite angelegt werden und stoert dann die Ausgabe nicht. Achtung: auf so einer Seite sollte dann kein QFQ Excel Export sein.
  • Den 'live' sollte man auch via '_link' aktvieren koennen, damit waere die Nutzung auf in HEAD, TAIL , ... via `{{'...' AS _link}}` moeglich.
Actions #4

Updated by Carsten Rose almost 4 years ago

  • Status changed from New to In Progress

Parameter:

  • data-api: mandatory, SIP encoded (default) oder plain Parameter. Der QFQ Content entscheidet ob nur SIP akzeptiert wird.
  • data-parent-id="lustigesElement": optional. By default wird der Value des aktuellen Elements aktualisiert. Mit dieser HTML-ID kann ein beliebiges anderes Element definiert werden, deren Content ersetzt wird.
  • data-response="html". Optional
  • data-on-action="refresh". Optional
  • data-refresh="1000". Optional
  • data-callback="jsonFunction". Optional
  • data-action="get". Optional

# QFQ / Report
SELECT 'action:get|uid:12345&examId=5|s|parentId:lustigesElement|response:html|on:refresh|callback:jsonFunction|refresh:1000' AS _live

# HTML
<div id='<uid>_<count>'
     class="qfq-live" 
     data-api="typo3conf/ext/qfq/Classes/Api/live.php&s=badcaffee" 
     data-parent-id="lustigesElement" 
     data-response="html" 
     data-on-action="refresh" 
     data-refresh="1000" 
     data-callback="jsonFunction" 
     data-action="get">
</div>

Actions #5

Updated by Carsten Rose almost 4 years ago

Offene Punkte:

  • weitere RenderMode implementieren (am besten alle). z.B. `r:3` damit der initiale Text angezeigt wird, es aber noch keine Funktionalitaet gibt.
  • bisher ist nur `AS _link` impelmentiert, es fehlt `AS _live`
  • uid Parameter wird nicht korrekt gehandhabt (beim genieren der SIP wird aus 'uid' ploetzlich 'id') - abschauen wie das beim Excel Export gemacht wurde.
  • Inline Code (das Gegenteil von uid) ist noch nicht implementiert - ist das ueberhaupt noetig, wie koennte die Notation sein?
Actions #6

Updated by Carsten Rose almost 4 years ago

  • Tracker changed from Support to Feature
  • Subject changed from Konzept _api to Konzept _api / _live
Actions

Also available in: Atom PDF