https://project.math.uzh.ch/https://project.math.uzh.ch/favicon.ico?16668783892021-02-11T16:25:38ZProject @ iMathQFQ - Feature #11998: Custom QFQ-Functionhttps://project.math.uzh.ch/issues/11998?journal_id=478612021-02-11T16:25:38ZElias Villiger
<ul><li><strong>Related to</strong> <i><a class="issue tracker-2 status-5 priority-2 priority-default closed" href="/issues/11569">Feature #11569</a>: Custom QFQ-Code pro Session</i> added</li></ul> QFQ - Feature #11998: Custom QFQ-Functionhttps://project.math.uzh.ch/issues/11998?journal_id=478622021-02-11T16:46:40ZCarsten Rosecarsten.rose@math.uzh.ch
<ul></ul><p>Vorschlag</p>
<ul>
<li>Idee: QFQ Records koennen an beliebiger Stelle in REPORT eingebunden werden. Bsp. <br /><pre>
10 {
sql = SELECT ...
20.sql = SELECT ...
30.uid = 123|accountId,feUserUid
40.uid = 124|*
}
# Alternative um die `uid` lesbarer zu machen: Die Spalte tt_content.sub_header wird im T3 Backend
# bei QFQ Records editierbar gemacht und es kann ein 'Funktionsname' gesetzt werden:
# Sollten mehrere tt_content records den gleichen Funktionsnamen haben, zeigt QFQ einen Fehler an.
50.uid = userLogin|feUserUid,accountId
60.uid = getPeriod|*|skip cache
</pre></li>
<li>Die Variablennamen hinter dem uid/Funktionsname gibt an, was durch die Funktion via STORE_RECORD exportiert wird. Damit ist klar welche Parameter zurueck kommen.</li>
<li>Diskussion: sollten auch die aufrufenden Parameter deklariert werden?</li>
<li>Der '*': alles was in der Funktion in den STORE_RECORD kopiert.</li>
<li>STORE_USER ist immer schreib/lesbar.</li>
<li>cache = 30 - Der STORE_RECORD der Funktion wird gecacht und der tt_content Record maximal alle 30 Sekunden gefeuert. Ein erneuter Aufruf innerhalb der Cache time liefert den Cache.</li>
<li>cacheUser = 5 - wie Cache, aber pro User Session, 5 Sekunden.</li>
<li>'skip cache' - Die Query wird immer ausgefuehrt, unabhaengig ob eine Cache Time definiert ist.</li>
</ul>
<ul>
<li>Beispiel: tt_content.uid = 123<br /><pre>
cache = 30
10.sql = SELECT 1 AS accountId, 2 AS feUserUid
</pre></li>
</ul> QFQ - Feature #11998: Custom QFQ-Functionhttps://project.math.uzh.ch/issues/11998?journal_id=478972021-02-13T13:02:38ZElias Villiger
<ul></ul><p>Ist insgesamt viel mehr als ich eigentlich brauche, aber warum nicht?</p>
Einige Kommentare/Fragen:
<ul>
<li>Ich würde auch aufrufende Parameter ermöglichen. In meinen Beispielen bräuchte ich das zwar nicht, kann ich mir aber gut vorstellen, dass das gebraucht würde. Z.B. mit ähnlicher Schreibweise wie bei den Excel Exports: 10.uid = 123&isProf=1|feUserId,accountId</li>
<li>Falls QFQ-Record-Funktionsnamen umgesetzt werden - gerne auch für die Excel-Exporte verwenden</li>
<li>Cache: falls auch für andere QFQ-Records verwendet, müsste man natürlich auch die Ausgabe des Records cachen, nicht nur STORE_RECORD.
<ul>
<li>Den Cache brauchts aus meiner Sicht nicht zwingend. Wenn eine Seite geladen wird, möchte ich eigentlich in den meisten Fällen sicher sein, dass die Daten aktuell sind, nicht 30s alt. Die Variablen würden so oder so nur einmal pro Page Load berechnet und stünden dann beliebig oft zur Verfügung im nachfolgenden Code.</li>
</ul>
</li>
<li>uid: mögliche andere Namen: 10.load oder 10.import</li>
</ul> QFQ - Feature #11998: Custom QFQ-Functionhttps://project.math.uzh.ch/issues/11998?journal_id=481352021-02-19T14:09:43ZPhilipp Gröbelbauer
<ul></ul><p>Check ob man #8450 damit loesen koennte?!</p> QFQ - Feature #11998: Custom QFQ-Functionhttps://project.math.uzh.ch/issues/11998?journal_id=486382021-03-18T20:51:35ZCarsten Rosecarsten.rose@math.uzh.ch
<ul><li><strong>Subject</strong> changed from <i>Custom QFQ-Code zentral definiert</i> to <i>Custom QFQ-Function</i></li></ul> QFQ - Feature #11998: Custom QFQ-Functionhttps://project.math.uzh.ch/issues/11998?journal_id=486392021-03-18T21:11:35ZCarsten Rosecarsten.rose@math.uzh.ch
<ul></ul><p>Naming:</p>
<pre>
10.function = getFeUser(pId, pName) => accountId, feUserUid
</pre>
<ul>
<li><code>function</code> ist klarer als <code>uid</code></li>
<li>Beispiel: <code>getFeUser</code> ist der subheader Name des aufzurufenden tt-content records. Wird eine reine Zahl angegeben, ist die uid gemeint. Bsp <code>10.function = 123</code>.</li>
<li>Sind neben <code>.function</code> noch weitere Token wie <code>sql, head, ...</code> angegeben: function wird als erstes ausgefuehrt, danach wie gewohnt alles andere.</li>
<li>Ist nur <code>function</code> definiert, aber kein <code>sql</code> werden keine Sublevel gefeuert.</li>
<li>Die runden Klammern mit (pId, pName) entsprechen der bekannten Notation eines Funktionsaufrufes.</li>
<li>Die Returnwerte werden durch '=>' angezeigt.</li>
<li>Die Funktion sollte so implementiert werden das aus dem STORE_RECORD nur die definierten Variablen verwendet werden koennen.</li>
<li>Die Aufrufparameter und die Returnparameter werden im STORE_RECORD uebergeben.</li>
<li>Der STORE_RECORD wird nicht veraendert (ausser den definierten Returnwerten).</li>
<li>Der Output der in der Funktion erzeugt wird (optional) kann abgerufen werden via <code>{{_output:R}}</code></li>
<li>Ein Cache wird erstmal nicht implementiert.</li>
<li>Optional koennte man auch ueber die Verwendung des STORE_PARENT nachdenken.</li>
</ul>
Frage:
<ul>
<li>Koennen in einer Function weitere Functions aufgerufen werden?</li>
</ul> QFQ - Feature #11998: Custom QFQ-Functionhttps://project.math.uzh.ch/issues/11998?journal_id=486402021-03-19T07:57:02ZElias Villiger
<ul></ul><p>Das tönt echt gut.</p>
<p>Hier noch ein anderer Notationsvorschlag:<br /><pre>
10.function = getFeUser(pId, pName) => accountId, feUserUid
</pre></p>
Wichtig wäre mir, dass es auch Funktionen ohne Return-Wert geben kann. Gebrauch z.B.:
<ul>
<li>Funktion speichert etwas in der DB, ohne Return value</li>
<li>Funktion speichert etwas oder mehrere Werte auf einmal im U-Store (Bsp. feUserId, acctId, isDev, isProf, isSecretary, ...), diese sind dann sozusagen der globale Return value, aber ohne eigentlichen Return value der Funktion im R-Store</li>
</ul>
Koennen in einer Function weitere Functions aufgerufen werden?
<ul>
<li>Wäre schon brauchbar.</li>
<li>Wenn kompliziert, dann "vorerst" darauf verzichten?</li>
<li>Das Aufrufen von einzelnen Funktionen ist an sich schon ein riesiger Sprung vorwärts.</li>
</ul> QFQ - Feature #11998: Custom QFQ-Functionhttps://project.math.uzh.ch/issues/11998?journal_id=486682021-03-20T19:32:46ZCarsten Rosecarsten.rose@math.uzh.ch
<ul></ul><p>Aktuell haben wir bei diversen Tools, bei denen PDFs & Attachments zu einem PDF zusammengefuehrt werden und diese Full-PDF Links auf diversen Seiten benoetigt werden, eine Zwischenseite eingebaut. Damit war die PDF Definition nur an einer Stelle, und man konnte im gesamten Tool Links auf diese Zwischenseite bauen.</p>
<p>Der Nachteil: die User mussten immer zweimal klicken um an ein PDF zu gelangen.</p>
<p>Neu soll als weitere Download Source (neben 'F,p,u,uid') auch <code>source:<qfq function>&arg1=value1$arg2=...</code> moeglich sein.</p>
<p>In <code><qfq function></code> werden dann die ueblichen Sourcen ausgegeben in der Form 'F:file1.pdf|p:myBaseData&appId=123|F:file2.pdf'. Dabei ist es egal aus wieviel Spalten/Rows, es wird alles implodiert und muss ein (multiple) Sources Argument ergeben.</p> QFQ - Feature #11998: Custom QFQ-Functionhttps://project.math.uzh.ch/issues/11998?journal_id=486722021-03-21T17:05:33ZCarsten Rosecarsten.rose@math.uzh.ch
<ul><li><strong>Status</strong> changed from <i>New</i> to <i>Closed</i></li></ul> QFQ - Feature #11998: Custom QFQ-Functionhttps://project.math.uzh.ch/issues/11998?journal_id=486752021-03-21T17:09:14ZCarsten Rosecarsten.rose@math.uzh.ch
<ul><li><strong>Related to</strong> <i><a class="issue tracker-2 status-6 priority-3 priority-high3 closed" href="/issues/7883">Feature #7883</a>: Link to QFQ record: '... AS _qfq'</i> added</li></ul> QFQ - Feature #11998: Custom QFQ-Functionhttps://project.math.uzh.ch/issues/11998?journal_id=486832021-03-21T17:11:37ZCarsten Rosecarsten.rose@math.uzh.ch
<ul><li><strong>Related to</strong> deleted (<i><a class="issue tracker-2 status-6 priority-3 priority-high3 closed" href="/issues/7883">Feature #7883</a>: Link to QFQ record: '... AS _qfq'</i>)</li></ul> QFQ - Feature #11998: Custom QFQ-Functionhttps://project.math.uzh.ch/issues/11998?journal_id=486852021-03-21T17:11:39ZCarsten Rosecarsten.rose@math.uzh.ch
<ul><li><strong>Has duplicate</strong> <i><a class="issue tracker-2 status-6 priority-3 priority-high3 closed" href="/issues/7883">Feature #7883</a>: Link to QFQ record: '... AS _qfq'</i> added</li></ul> QFQ - Feature #11998: Custom QFQ-Functionhttps://project.math.uzh.ch/issues/11998?journal_id=486962021-03-21T19:30:21ZCarsten Rosecarsten.rose@math.uzh.ch
<ul><li><strong>Target version</strong> changed from <i>next5</i> to <i>21.3.1</i></li></ul> QFQ - Feature #11998: Custom QFQ-Functionhttps://project.math.uzh.ch/issues/11998?journal_id=529592021-09-07T11:45:13ZMarc Egger
<ul><li><strong>Has duplicate</strong> <i><a class="issue tracker-2 status-6 priority-2 priority-default closed" href="/issues/10713">Feature #10713</a>: QFQ functions (reusable reports)</i> added</li></ul>