RTReport
Testprojekt
JART Playground aufm HAN
Hands On
Tabelle anlegen
Testdaten eingefügt
DB APP Bulder
Report spezifischer pfad ist immer nach "/prj3/.../appdes/<report-spezifischer-pfad>"
Der RT Report
Alles unter dbadmin_reports --> reports Im Feld App Builders können beistrichgetrennt die "report-spezifischer-pfad"e eingefügt werden
Zuerst muss man den Report mit File>Save speichern, damit man alle applikationen die zur verfügung stehen angezeigt werden. Speicherpfad muss folder indexes/<index-name>/<report-folder>/ sein, also zb indexes/main/...
Funktionen
Sind definiert in prj3/jart-tools/js-apps/rt-report/run/web.cjs, welches zb auch global-handlebars.js importiert.
Handlebars:
- _date: formatiert das datum; zb {{_date termindatum 'EEE dd.MMM.yyyy'}}
- _link: niceurl; zb
- _media_img: {{_media_img termin_bid '&v=Box'}}
Bilder
Feld vom Typ "Upload", subtyp "mediadb"
Tabs
Structure
Zeigt die struktur der DBApp Builder ergebnisse an. Klickt man den Bleistift, fügt sich das gewünschte feld automatisch im report ein (Handlebar Syntax)
Ausgabe filtern
Ausgabe soll zum beispiel nach datum oder "kategorie" oder whatever gefiltert werden. Dazu einfach im DBApp builder eine condition einfügen. Bei der befüllten Applikation auf der Seite in den "Einstellungen" kann man nun die conditionen mit werten befüllen.
Wie kommt der Report auf die Webseite?
Im editiermode "Applikation" einfügen. Hier wählt man den Report aus u speichern. Tadaaaa, er ist da
Debugging
Wenn bei der Seite nix oder das falsche angezeigt wird kann man folgendes überprüfen
- query parameter debug-sql=y an seite anhängen: zeigt welches SQL ausgeführt wurde
//@import /prj3/jart-tools/js-apps/db-admin/resources/jquery/handlebars-v1.3.0.js //@import xml-to-json.js //@import global-handlebars.js function getJartRequest(url){ var ret = null; ext.strFnc($.filter, "getJSJartRequest", url); var node = $.filter.selectSingleNode("/data/fnc-data/getJSJartRequest", $.outNode); if(node){ ret = {}; convertXToJ(node, ret); } return ret; } function subReport(call, opts){ var ret = null; if(opts){ for(var n in opts){ $.filter.params.put(n, opts[n]); } } return "" + ext.strFnc($.filter, "getSubReport", call); } function getJartCall(call, opts){ var ret = null; if(opts){ for(var n in opts){ $.filter.params.put(n, opts[n]); } } ext.strFnc($.filter, "getJSJartCall", call); var node = $.filter.selectSingleNode("/data/fnc-data/getJSJartCall", $.outNode); if(node){ ret = {}; convertXToJ(node, ret); } return ret; } function logObject(obj){ if(obj){ $.log(JSON.stringify(obj).replace(/","/g, '", "')); } else { $.log("null"); } } function cleanObject(obj){ if(typeof obj != "object") return null; var ret = {}; for(var i in obj){ if(typeof obj[i] == "object"){ if(Array.isArray(obj[i])){ if(obj[i].length === 1 && obj[i][0]._text !== null){ ret[i] = obj[i][0]._text; } } else { ret[i] = []; for(var i2 =0; i2 < obj[i].length; i2++){ ret[i].push(cleanObject(obj[i][i2])); } } } else { ret[i] = obj[i]; } } return ret; } function formatJsonToHtml(obj, isSub){ var ret = ""; if(typeof obj == "object"){ ret += "<ul" + (isSub ? ' style="display: none;"' : '') + ">"; for(var i in obj){ ret += "<li style="cursor: pointer;" onclick="$('>ul', this).toggle(); event.stopPropagation();">"; ret += i + ": "; ret += formatJsonToHtml(obj[i], true); ret += "</li>"; } ret += "</ul>"; } else { ret = "" + obj; } return ret; } function getMediaInfo(img, vc){ var mUrl = "/pub-prc/img.jart?base=/prj3/" + data["j-project"] + "&img=/images/img-db/" + img.split(":")[1] + vc + "&rel=" + data.rel + "&info=y"; return getJartRequest(mUrl); } function each(a, cb){ if(!a) return; for(var i = 0; i < a.length; i++){ cb(i, a[i]); } } Handlebars.registerHelper('_subReport', function(conf, params) { if(!conf) return ""; if(params && typeof params == "string"){ var p = params.replace(/, /g, ",").split(","); var me = this; each(p, function(i, v){ var val = me[v]; if(val) $.filter.params.put(v, val); }); } return new Handlebars.SafeString(subReport(conf)); }); Handlebars.registerHelper('_json2ul', function(ob) { if(!ob) return ""; return new Handlebars.SafeString(formatJsonToHtml(ob)); }); Handlebars.registerHelper('_rt_value', function(val) { if(!val) return ""; return new Handlebars.SafeString(val.replace(/<[/]{0,1}body>/gi, "")); }); Handlebars.registerHelper('_media_img_src', function(img, vc) { var ret = ""; var imgInfo = getMediaInfo(img, vc); if(imgInfo && imgInfo["image-info"] && imgInfo["image-info"].length > 0){ return imgInfo["image-info"][0].src; } return new Handlebars.SafeString(ret); }); Handlebars.registerHelper('_media_img', function(img, vc, _alt) { var ret = ""; if(!img) return ret; var alt = _alt; var imgInfo = getMediaInfo(img, vc); if(imgInfo && imgInfo["image-info"] && imgInfo["image-info"].length > 0){ var src = imgInfo["image-info"][0].src if(!alt){ if(imgInfo["image-info"][0].title && imgInfo["image-info"][0].title[0]._text){ alt = imgInfo["image-info"][0].title[0]._text; } if(imgInfo["image-info"][0].alt && imgInfo["image-info"][0].alt[0]._text){ alt = (alt ? " " : "") + imgInfo["image-info"][0].alt[0]._text; } } ret = '<img alt="' + (alt ? alt : img) + '" src="' + src + '">'; } return new Handlebars.SafeString(ret); }); function _lang(str) { var ret = ''; var p = str.split("??"); var found = false; for(var i = 0; i < p.length && !found; i++){ if(i===0 || data['j-db-lang'] && p[i].indexOf(data['j-db-lang'] + "=") === 0){ ret = p[i].substr(p[i].indexOf("=") + 1); } } return ret; } Handlebars.registerHelper('_lang', function(str) { return _lang(str); }); Handlebars.registerHelper('_log', function(str) { $.log(str); return ""; }); function link(ext, cid) { var lnk = ""; if(cid){ lnk = data["j-rlink"] + "&content-id=" + cid + ext; } else { lnk = data["j-slink"] + ext; } return "" + Packages.jart.Extension.strFnc($.filter, "getNiceUrlV4", lnk); } Handlebars.registerHelper('_link', function(_ext, _cid) { var ext = ""; if(_ext){ var p = _ext.split(","); for(var i = 0; i < p.length; i++){ ext += "&" + p[i] + "=" + this[p[i]]; } } var cid = typeof _cid === "string" ? _cid : null; return link(ext, cid); }); Handlebars.registerHelper('_j_r_link', function(img, vc) { var ret = ""; ret += data["j-rlink"]; return new Handlebars.SafeString(ret); }); Handlebars.registerHelper('_j_s_link', function(img, vc) { var ret = ""; ret += data["j-slink"]; return new Handlebars.SafeString(ret); }); //@import runner.js