Breadcrumb
Wiki Home
RTReport
Tools
Sitemap
Einzel Pdf
Struktur Pdf
Mein Wiki
Wiki Manager
Abmelden
Neu
Aktualisiert
art : date
guido
RTReport
v4-indexer-l
Schema Actions
Update 2013-10-28
v3-zu-v4
Report Designer
v4-indexer
Update-2013-11-06

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>"

besitzt ein feld namens "disable on key", um eine condition zu disablen!!

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. http://han.jart.at/jart/prj3/jart-tools/resources/developer-apps/text-editor/c-editor.jart?fn=/prj3/jart-tools/js-apps/rt-report/run/main.js

Handlebars:

  • _date: formatiert das datum; zb {{_date termindatum 'EEE dd.MMM.yyyy'}}
  • _link:
  • _media_img: {{_media_img termin_bid '&v=Box&width=300'}}
  • _rt_value : gibt HTML inhalt aus und macht security überprüfungen

Bilder

Feld vom Typ "Upload", subtyp "mediadb"

Detailseite

  • Bei der übersichtsseite stellt man "disable on key" zb auf "termin_id", und vergibt in der liste einen _link um auf die detailseite zu kommen
  • 2. Report für die detailseite machen welche einen DBApp Builder hat, der die details ausgibt. report natürlich noch auf die selbe seite befüllen.

TAB: Code

Der richtext editor vermurkst teilweise den html/handlebars code. Falls das passiert muss man im Code weiterarbeiten und den editor disablen. einfach als oberste zeile: Generate: "Disable Richtext"

man kann aber auch nur teile dem RT-Editor "verstecken" und zwar mit einem html Comment tag mit 3 Bindestrichen

TAB: CSS

Hier kann man in wirklichkeit LESS verwenden!

TAB: Javascritp (Server Side)

Zugriff auf jart dateien (jartrequest) bzw jart functionen (jartcall). Außerdem kann man auf so ziemlich alle funktionen zugreifen, die auch bei handlebars mit underscore '_' aufgerufen werden; zb "lang()"

Debugging

$.log(object), oder $.debug(object); beide funtkionen sind die selben logobject(object); logt alle properties formatJsonToHtml(object); loggt object-graph

STRG+M zeigt ein popup was beim report generieren eigentlich passiert.

  • onData: wenn daten da sind, soll NUR EINMAL verwendet werden. darin dann die jeweiligen funktionen programmieren

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

Anhang

//@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