Konvertieren von Page <-> Tabelle
hat wieder einmal ein kleines Script-Meisterwerk abgeliefert, welches eine Page in eine Tabelle oder eine Tabelle in eine Page konvertieren kann.
Einfach in der entsprechenden Tabelle einen Button erstellen und den nachfolgenden Code dort rein kopieren.
Zusätzlich müsst ihr noch euren Ninox-API-Key anstelle von "YOUR-API-KEY-FOR-THIS-ACCOUNT" einfügen.
Und die Transformation sollte damit gelingen.
Beachtet bitte, dass bei einer Tabellenumwandlung zu einer Page die überschüssigen Records gelöscht werden, so dass nur ein Record in der Page enthalten ist.
"
//* This script is added to a butoon.
When clicked, the type of the table or page is checked and a dialog suggests to change the type
";
let me := this;
let apiKey := "YOUR-API-KEY-FOR-THIS-ACCOUNT";
"
//* Determine if the database is located in a public cloud or in a private cloud
";
let host := first(split(urlOf(this), "#"));
let api := if host = "https://app.ninox.com/" then
"https://api.ninox.com/v1"
else
host + "v1"
end;
"
//*Set base api url
";
api := ---
{ api }/teams/{ teamId() }/databases/{ databaseId() }
---;
"
//*Set headers for all API calls
";
let headers := {
Authorization: "Bearer " + apiKey,
'Content-type': "application/json"
};
"
//*Check the database schema
";
let kindResponse := do as server
http("GET", api + "/schema", headers, {})
end;
"
//* Check if the query returns a database schema
";
if not kindResponse.result.version then
alert(kindResponse)
else
let myKind := item(kindResponse.result.types, tableId(this)).kind;
let tId := tableId(me);
"
//* Set dialog in case the properties cannot be determined
";
let dialogHeader := "Table Properties";
let dialogBody := "This cloud version does not support pages.
Please update your Cloud to the latest version.";
let dialogButtons := ["Cancel"];
"
//* Check the Type (page or table)
";
switch myKind do
case "page":
(
dialogBody := "This is a page";
dialogButtons := ["Convert to a table", "Cancel"];
let d := dialog(dialogHeader, dialogBody, dialogButtons);
if d = first(dialogButtons) then
"
//* Prepare the body for the PATH conversion
";
let body := {
types: {}
};
setItem(body.types, tableId(this), {
kind: "table"
});
let patchResponse := do as server
http("PATCH", api + "/schema", headers, body)
end;
if formatJSON(patchResponse.result) = "{}" then
alert("The conversion to the table was successfully performed!")
else
alert(patchResponse)
end
end
)
case "table":
(
dialogBody := "This is a Table.
A page contains only one record.
If the table has multiple records, they will be deleted.";
dialogButtons := ["Convert to a page", "Cancel"];
let d := dialog(dialogHeader, dialogBody, dialogButtons);
if d = first(dialogButtons) then
"
//* Check number of Records
";
let myPerPage := 1000;
let myPage := 0;
let myNumberOfRecords := myPerPage;
let myRecordsArray := [0];
myRecordsArray := null;
while myNumberOfRecords = myPerPage do
let response := do as server
http("GET", url(api + "/tables/" + tableId(this) + "/records", {
perPage: myPerPage,
page: myPage
}), headers, {})
end;
myNumberOfRecords := cnt(response.result);
if myNumberOfRecords = myPerPage then
myPage := myPage + 1
end;
for i in response.result do
myRecordsArray := array(myRecordsArray, [number(i.id)])
end
end
;
"
//* Check if there is a record with id = 1 (is mandatory for Page)
";
if not contains(myRecordsArray, 1) then
"
//* create a record with id=1
";
let upsertResponse := do as server
http("POST", api + "/tables/" + tableId(this) + "/records", headers, {
_upsert: true,
_id: 1
})
end;
if upsertResponse.result.number(_id) != 1 then
alert(upsertResponse)
end
end;
"
//* create an with id=1
";
let delArray := for i in myRecordsArray do
if i != 1 then i end
end;
let deleteResponse := do as server
http("DELETE", api + "/tables/" + tableId(this) + "/records", headers, delArray)
end;
let body := {
types: {}
};
setItem(body.types, tableId(this), {
kind: "page"
});
let patchResponse := do as server
http("PATCH", api + "/schema", headers, body)
end;
void
end
)
default:
dialog(dialogHeader, dialogBody, dialogButtons)
end
end
23 Antworten
-
Klasse! Das erleichtert die Umwandung bestehender Dashboards in Pages ungemein.
-
Ich habe jetzt das Script von Leo in eine Ninox-DB verpackt, mit der man extern Tabellen/Pages umwandeln kann.
Man gibt den Cloudnamen (api.ninox.com oder seine private Cloud) und den Ninox-API Key ein und kann sich entweder über die jeweiligen ID's oder die Klarnamen von Team/Datenbank/Tabelle die Transformation vorbereiten.
In diesem Zuge wird einem dann angezeigt, ob die betreffende Tabelle eine Page oder Tabelle ist.
Mit dem Convert-Button wird dann die jeweilige Transformation gestartet.
Man kann so für jede zu konverierende Tabelle einen eigenen Record anlegen und jederzeit darauf zurück greifen.
Ich habe versucht die DB so einfach wie möglich zu gestalten.
Natürlich ist der oben beschriebene Weg (copy/paste) weiterhin eine Möglichkeit die Transformation durchzuführen. -
Hallo Uwe
Beim öffnen der DB bekomme ich folgernde Meldung:
-
ich hab mich mit den Pages ob des langsamen Update-Rollouts für die App noch nicht beschäftigt.
In meinen Dashboards habe ich jedem User einen Record zugedacht, weil dort jeweils z.B. auf Suchfelder basierende Ansichten enthalten sind. So hat keine Eingabe von User A keinen Impact auf das Dashboard von User B - wie verhalten sich Pages dahingehend?
-
said:
Aber für sich(!) genommen empfinde ich die Pages schon als nützliches Feature. Man kann mit ihnen auf einfache Weise das machen, was bisher nur mit CSS-Hacks und einer neuen Ansicht vom Typ "Formular" möglich war: Einfache Dashboards ohne Navigation, in denen keine weiteren Datensätze erstellt werden können, nicht mal versehentlich. Denn genau das war nach meiner Erfahrung bisher das Problem.Gerade das, was Du hier beschreibst, ist IMHO mit Ninox-Bordmitteln recht einfach umzusetzen.
Aber Dashboards enthalten meiner Meinung nach insbesondere individuelle Elemente (z.B. Tabellenansichten mit Filteroptionen & Co.) - die Pages wurden als vollwertiger Ersatz annonciert, sind dies aber de facto nicht, da hilft kein Schönreden und keine Ausgewogenheit was....
-
said:
Gerade das, was Du hier beschreibst, ist IMHO mit Ninox-Bordmitteln recht einfach umzusetzen.Wie denn? Ich habe schon viele Dashboards gebaut. Und für nahezu alle hätte ich sehr gerne Pages genutzt, wenn es die schon gegeben hätte.
Für MICH haben Pages also durchaus einen Nutzen. Der Wunsch nach individuellen Einstellmöglichkeiten für Tabellen steht auf einem ganz anderen Blatt und bleibt davon unberührt.
Klar, wenn ich mir ein Auto wünsche und nur ein Fahrrad bekomme, dann ist das erst mal enttäuschend. Es ändert aber nichts am praktischen Nutzen des Fahrrads, der manchen Bedarf zumindest teilweise deckt. Jedenfalls besser als zu Fuß. Auto kann ich mir ja weiter wünschen - und später beides nutzen.
-
said:
Ich denke wir sind uns einig, dass mit Pages eine Applikationsoberfläche nicht realisierbar ist,Absolut. Das ist ein bisschen dick aufgetragen.
said:
Bei aller Liebe, ich verstehe nach wie vor nicht, warum die Pages hier so als den großen Wurf gefeiert und verteidigt werden...Ich habe oben ausdrücklich gesagt, dass die Pages m. E. eben NICHT der große Wurf sind - man ihnen deshalb aber auch nicht generell jeglichen Nutzen absprechen sollte (siehe Analogie Auto vs. Fahrrad). Sie sind de facto eine komfortable Möglichkeit, schnell und einfach Dashboards zu erstellen. Nicht mehr, aber auch nicht weniger.
Ich denke, das Problem ist der Vergleich. Gemessen an dem großen Wunsch nach individuellen Einstellmöglichkeiten erscheinen die Pages relativ nutzlos. Für sich bewertet sind sie für viele User aber ein nützliches, neues Feature. Das wollte ich bei all der Kritik nur herausstellen.
Lass uns die Pages als nettes, eigenständiges No-Code-Feature abhaken und gemeinsam weiter nach der "großen" Lösung bohren.
-
said:
Lass uns die Pages als nettes, eigenständiges No-Code-Feature abhaken... das einzige Feature, was einem Mini-User, der "nur" 1,2k€ per anno bei Ninox lässt, bei den
"[...] spannenden Möglichkeiten, die Ninox 3.10 mit sich bringt. [...]"
übrigbleibt ...
-
Datenbank wurde aktualisiert.
-
ich habe gerade in der Datenbank festgestellt, dass die Suchfunktion nach Teams und Tabellen nur etwa die Hälfte aller Treffer auch anzeigt. Von 15 Teams werden mir 8 angezeigt. Von etwas über 100 Tabellen werden mir nur 56 aufgelistet. Kannst du das bitte mal prüfen? Vielen Dank vorab.
Content aside
-
8
„Gefällt mir“ Klicks
- vor 9 MonatenZuletzt aktiv
- 23Antworten
- 568Ansichten
-
11
Folge bereits