YAXX#86411 Kenmerken op regio niveau ondersteunen

svn path=/Website/trunk/; revision=67617
This commit is contained in:
Erik Groener
2025-01-16 10:11:14 +00:00
parent fb447c388a
commit cfddeb8830
12 changed files with 227 additions and 85 deletions

View File

@@ -143,7 +143,7 @@ alg = {
+ "WHERE prs_perslid_key = " + user_key
+ " AND alg_district_key = " + alg_key;
break;
case "RG":
case "E":
sql = "SELECT MAX(niveau) FROM fac_v_my_regions "
+ "WHERE prs_perslid_key = " + user_key
+ " AND alg_regio_key = " + alg_key;
@@ -484,7 +484,7 @@ alg = {
if (!oRs.eof)
{
multiflex = true;
v_flexParams.flexlabel = L("lcl_flexlist_alg_b");
v_flexParams.flexlabel = L("lcl_flexlist_alg_" + p_niveau.toLowerCase());
while (!oRs.eof)
{
if (oRs("alg_kenmerk_kenmerktype").Value == "M")
@@ -498,6 +498,7 @@ alg = {
var onrgoed_fld = "";
switch (p_niveau)
{
case "E": onrgoed_fld = "e.alg_regio_key"; break;
case "D": onrgoed_fld = "d.alg_district_key"; break;
case "L": onrgoed_fld = "l.alg_locatie_key"; break;
case "T": onrgoed_fld = "g.alg_terreinsector_key"; break;

View File

@@ -18,12 +18,14 @@
FCLTHeader.Requires({plugins:["suggest","jQuery"], js: []})
var regio_key = getQParamInt("regio_key");
var onrgoedlvl = "E";
var params = { filter: { id: regio_key,
isNew: (regio_key == -1 ? true : false)
}
};
var regio_array = model_regions.REST_GET(params); // Roep de API2 GET aan
var model = new model_regions();
var regio_array = model.REST_GET(params); // Roep de API2 GET aan
var regio_data = (regio_array[0] ? regio_array[0] : {id: -1}); // GET kan meerdere records opleveren, maar we verwachten hier maar 1.
var this_alg = params.func_enabled; // params bevat nu ook waarden die in API2 zijn bepaald.
var action = (regio_key == -1 ? "I" : "U");
@@ -76,6 +78,14 @@ var action = (regio_key == -1 ? "I" : "U");
manRWFIELD("reg_oms", "fld", L("lcl_name"), regio_data.name, {required: true, maxlength: 30});
BLOCK_END();
generateFlexKenmerkBlock ({
onrgoed_key : regio_key,
onrgoed_niveau : onrgoedlvl,
reado : false,
this_alg : this_alg
});
IFACE.FORM_END();
%>
</form>

View File

@@ -18,7 +18,7 @@ protectRequest.validateToken();
var regio_key = getQParamInt("regio_key");
var action = getQParam("action", "");
var onrgoedlvl = "RG";
var onrgoedlvl = "E";
var this_alg = alg.func_enabled(regio_key, onrgoedlvl);
user.auth_required_or_abort(this_alg.writeman || (regio_key > 0 && this_alg.writeuse));
@@ -26,21 +26,22 @@ var formfields = [];
if (this_alg.writeman)
formfields.push({ name: "name", frm: "reg_oms" });
var params = { filter: { "id": regio_key }};
var jsondata = api2.form2JSONdata(model_regions, params, formfields);
var model = new model_regions();
var jsondata = api2.form2JSONdata(model, params, formfields);
switch (action)
{
case "I":
var regio_array = model_regions.REST_POST(params, jsondata);
var regio_array = model.REST_POST(params, jsondata);
regio_key = regio_array.key;
break;
case "U":
if (regio_key > 0)
var regio_array = model_regions.REST_PUT(params, jsondata, params.filter.id);
var regio_array = model.REST_PUT(params, jsondata, params.filter.id);
break;
case "D":
if (regio_key > 0)
var regio_array = model_regions.REST_DELETE(params, params.filter.id);
var regio_array = model.REST_DELETE(params, params.filter.id);
break;
default :
var regio_array = {warning: L("lcl_cnt_Del_Fails_Auth")};
@@ -51,5 +52,34 @@ var result = { regio_key: regio_key,
warning: warning,
keepForm: !!warning,
success: true };
if (!warning)
{
currentKenmerkenSQL = "SELECT k.alg_kenmerk_key"
+ " , ok.alg_onrgoedkenmerk_waarde"
+ " , k.alg_kenmerk_toonbaar"
+ " , k.fac_functie_key"
+ " FROM alg_onrgoedkenmerk ok"
+ " , alg_kenmerk k"
+ " WHERE k.alg_kenmerk_key = ok.alg_kenmerk_key"
+ " AND alg_onrgoedkenmerk_verwijder IS NULL"
+ " AND alg_onrgoed_niveau = 'E'"
+ " AND alg_onrgoed_key = " + regio_key;
saveFlexKenmerken(regio_key,
{ kenmerkTable: "alg_onrgoedkenmerk",
kenmerkParentKey : "alg_onrgoed_key",
kenmerkWaarde: "alg_onrgoedkenmerk_waarde",
kenmerkKey: "alg_kenmerk_key",
kenmerkToonbaar: "alg_kenmerk_toonbaar",
currentKenmerkenSQL: currentKenmerkenSQL,
requestQF: Request.Form,
flexPath: "ALG/E",
module: "ALG",
moduleName: "alg_onrgoed_niveau",
moduleVal: "E",
isNew: regio_key < 0
});
}
Response.Write(JSON.stringify(result));
%><% ASPPAGE_END(); %>

View File

@@ -17,19 +17,6 @@
<%
FCLTHeader.Requires({ plugins:["jQuery"] });
function fnrowData(oRs)
{
var detail_key = oRs.Fields("id").Value;
var key = oRs.Fields("id").Value;
var oms = oRs.Fields("name").Value;
var data = {detail_key: detail_key, key: key, oms: oms};
return JSON.stringify(data);
}
%>
<script type="text/javascript">
@@ -54,13 +41,13 @@ function fnrowData(oRs)
FcltMgr.confirm(L("lcl_alg_del_txt_regio"), { autoconfirm: isMulti }, function() {
var regKeyString = getKeyString(rowArray);
var data = { key: regKeyString,
level: "RE"
level: "E"
};
<% protectRequest.dataToken("data"); %>
$.post("alg_delete.asp", data, FcltCallbackRefresh, "json");
});
}
</script>
</script>
<%
function regio_list(pautfunction, params)
@@ -75,13 +62,45 @@ function regio_list(pautfunction, params)
var showall = params.showall;
var reg_key = params.reg_key;
function fnrowData(oRs)
{
var detail_key = oRs.Fields("id").Value;
var key = oRs.Fields("id").Value;
var oms = oRs.Fields("name").Value;
var data = {detail_key: detail_key, key: key, oms: oms};
return JSON.stringify(data);
}
function fnrowActionEnabler(oRs)
{
var eDelete = false;
if (alg.canWriteRegio(oRs.Fields("id").Value, authparams.mALGwritelevel))
eDelete = true;
return ({eDelete: eDelete})
return ({eDelete: eDelete});
}
function fnrowFlexParams(oRs)
{
var reg_key = oRs.Fields("id").Value;
var this_alg = alg.func_enabled(reg_key, "E");
var flexParams = { readman: this_alg.readman, readuse: this_alg.readuse};
return flexParams;
}
function fncolFlexBijlagen(oRs)
{
var flexval = oRs.Fields("algflex").Value;
var alg_key = oRs.Fields("id").Value;
var result = ( flexval
? safe.html(flexval.replace(/\r/g, "\n")+ "\n")
: ""
);
if (flexParams.bijlageflex)
{
result += alg.alg_onroerendgoed_flex_bijlagen("E", alg_key);
}
return result;
}
%>
<html>
<head>
@@ -90,16 +109,30 @@ function regio_list(pautfunction, params)
<body id="listbody">
<%
// Ophalen regio`s
var flexParams = alg.alg_onroerendgoed_flex_params("E");
var regio_key = getQParamInt("regiokey");
var filter = {};
if (regio_key > -1)
var filter = {id: regio_key};
var params = { filter: filter }; // Alle regio`s ophalen, behalve de verwijderde.
var regio_array = model_regions.REST_GET(params); // Roep de API2 GET aan
filter = {id: regio_key};
else
{
var kenmerk_sql = getKenmerkSql("ALG", "alg_regio.alg_regio_key");
if (kenmerk_sql)
filter = {kenmerk_sql: kenmerk_sql.substr(4)}; // De "AND" aan het begin eraf halen.
}
var params = { filter: filter // Alle regio`s ophalen, behalve de verwijderde.
, flexparams: { anyflex: flexParams.anyflex
, bijlageflex: flexParams.bijlageflex
, sql: flexParams.sql.substr(1).replace("e.", "alg_regio.")
, algflex: {"dbs": "algflex", "typ": "varchar"}
}
};
var model = new model_regions();
var regio_array = model.REST_GET(params); // Roep de API2 GET aan
//
var addurl = "appl/alg/alg_regio.asp";
// addurl += buildTransitParam(["loc_key", "bld_key", "flo_key", "room_key"], params) // TODO: welke allemaal?
if (canAdd)
{
@@ -112,13 +145,17 @@ function regio_list(pautfunction, params)
showAll: showall,
rowData: fnrowData,
rowActionEnabler: fnrowActionEnabler,
flexModule: "ALG",
flexId: "alg_regio_key",
flexParams: fnrowFlexParams,
outputmode: outputmode,
filterParams: params,
buttons: addButton
});
rst.addColumn(new Column({caption: L("lcl_estate_regio_descr"), content: "name"}));
if (flexParams.anyflex)
rst.addColumn(new Column({caption: flexParams.flexlabel, content: fncolFlexBijlagen, colName: "fncolFlexBijlagen"}));
rst.addAction({ action: "districtEdit", caption: L("lcl_edit"), isDefault: true});
rst.addAction({ action: "doDelete", caption: L("lcl_delete"), enabler: "eDelete", multi: true, multiOnce: true});

View File

@@ -24,7 +24,31 @@ var authparams = alg.checkAutorisation();
<head>
<% FCLTHeader.Generate(); %>
<script type="text/javascript">
$(function() {<% if (autosearch) { %> document.forms.u2.submit(); <%}%> });
function doSubmit()
{
// Submitten met kenmerken
doSubmitWithKenmerken();
}
async function myModal(init)
{
var lvl = "E";
var key = 0;
var bld_key = "";
var url = "load_kenmerk.asp?disc="
+ "&urole=bo"
+ "&advanced=1"
+ "&hasFilter=1"
+ "&onrgoed_key=" +bld_key
+ "&onrgoed_niveau=" + lvl;
var titel = L("lcl_properties");
await showKenmerkModal(url, titel, init);
}
$(function() {
<% if (autosearch) { %>
document.forms.u2.submit();
<% } %>
});
</script>
</head>
<body id="searchbody">
@@ -39,8 +63,10 @@ var authparams = alg.checkAutorisation();
whenEmpty: L("lcl_search_generic")
});
SEARCH_BLOCK_END();
var buttons = [{title: L("lcl_overview_list"), action: "document.forms.u2.submit();", id: "bSearch", icon: "fa-clipboard-list" }];
SIMPLE_BLOCK_START();
var buttons = [ {title: L("lcl_overview_list"), action: "doSubmit();", id: "bSearch", icon: "fa-clipboard-list" }
, {title: L("lcl_shared_advanced"), action: "myModal()", id: "bAdvanced", importance: 3, icon: "fa-filter" }
];
CreateButtons(buttons, { entersubmit: true, showIcons: true });
SIMPLE_BLOCK_END();
SEARCH_PAGE_END(); %>

View File

@@ -21,11 +21,14 @@
FCLTHeader.Requires({plugins:["jQuery"], js: []})
var regio_key = getQParamInt("regio_key");
var onrgoedlvl = "E";
var regio_params = { filter: { id: regio_key
, show_deleted: true // Ook indien verwijderd ophalen.
}};
var regio_array = model_regions.REST_GET(regio_params); // Roep de API2 GET aan
//var regio_array = model_regions.REST_GET(regio_params); // Roep de API2 GET aan
var model = new model_regions();
var regio_array = model.REST_GET(regio_params);
var regio_data = (regio_array[0] ? regio_array[0] : {id: -1}); // GET kan meerdere records opleveren, maar we verwachten hier maar 1.
var this_alg = regio_params.func_enabled; // regio_params bevat nu ook waarden die in API2 zijn bepaald.
@@ -85,6 +88,11 @@ var regio_deleted = regio_exists && !!regio_data.deleted;
<% BLOCK_START("algInfo", L("lcl_region"), {icon: "fa-globe"});
ROFIELDTR("fld", L("lcl_name"), regio_data.name);
BLOCK_END();
generateFlexKenmerkBlock ({ onrgoed_key : regio_key,
onrgoed_niveau : onrgoedlvl,
reado : true,
this_alg : this_alg });
%>
</form>
<% SUBFRAME_END(); %>

View File

@@ -212,6 +212,7 @@ function model_alg_kenmerk(niveau, params)
var naam = "";
switch (niveau)
{
case "E": naam = L("lcl_region"); break;
case "D": naam = L("lcl_district"); break;
case "L": naam = L("lcl_location"); break;
case "T": naam = L("lcl_terra"); break;
@@ -224,7 +225,8 @@ function model_alg_kenmerk(niveau, params)
function fill_real_estate_level_LOV()
{
return "D;"+L("lcl_district")
return "E;"+L("lcl_region")
+ ";D;"+L("lcl_district")
+ ";L;"+L("lcl_location")
+ ";G;"+L("lcl_building")
+ ";R;"+L("lcl_room"); // Moet hier T en V ook nog bij?

View File

@@ -12,32 +12,43 @@
*/
%>
<!-- #include file="../Shared/discxalg3d.inc"-->
<!-- #include file="../Shared/discxalg3d.inc" -->
<!-- #include file="../ALG/alg.inc" -->
<!-- #include file="./model_districts.inc" -->
<!-- #include file="./model_alg_kenmerk.inc" -->
<%
model_regions =
function model_regions(regio_key, params)
{
table: "alg_regio",
primary: "alg_regio_key",
records_name: "regions",
record_name: "region",
fields: {"id": { dbs: "alg_regio_key", typ: "key" },
this.table = "alg_regio";
this.primary = "alg_regio_key";
this.records_name = "regions";
this.record_name = "region";
this.fields = {
"id": { dbs: "alg_regio_key", typ: "key" },
"name": { dbs: "alg_regio_omschrijving", typ: "varchar", label: L("lcl_estate_regio_descr"), track: true},
"externnr": { dbs: "alg_regio_externnr", typ: "varchar", label: L("extern_nr"), readonly: !(user.has("WEB_FACTAB") || user.has("WEB_FACXNR"))},
"externsyncdate": { dbs: "alg_regio_externsyncdate", typ: "datetime", label: L("extern_syncdate"), readonly: !(user.has("WEB_FACTAB") || user.has("WEB_FACXNR"))},
"deleted": { dbs: "alg_regio_verwijder", typ: "datetime", label: L("lcl_deleted")}
};
this.includes = {
"districts": {
model: new model_districts(this),
joinfield: "region"
},
includes: { "districts": { model: model_districts, joinfield: "region" }
},
"custom_fields" : {
"model": new model_custom_fields(this, new model_alg_kenmerk("E", { internal: true }), { readman: true, readuse: true }),
"joinfield": "flexparentkey",
"enable_update": true
}
};
_check_authorization: function(params, method)
_check_authorization = function(params, method)
{
var scope = params.filter.scope || "fe";
var autfunction = (scope == "fe"? "WEB_ALGUSE" : "WEB_ALGMAN");
params.authparams = user.checkAutorisation(autfunction, null, null, true); // pessimistisch
var onrgoedlvl = "RG";
var onrgoedlvl = "E";
if (method == "GET")
{
if (params.filter.id)
@@ -60,14 +71,23 @@ model_regions =
user.auth_required_or_abort(this_alg.writeman);
}
params.func_enabled = this_alg || {};
},
_pre_analyze_fields: function (params, jsondata) /* analyseer inkomende jsondata voor PUT en POST */
};
_pre_analyze_fields = function (params, jsondata) /* analyseer inkomende jsondata voor PUT en POST */
{
},
REST_GET: function _GET(params, jsondata)
};
this.REST_GET = function _GET(params, jsondata)
{
model_regions._check_authorization(params, "GET");
var query = api2.sqlfields(params, model_regions);
_check_authorization(params, "GET");
var query = api2.sqlfields(params, this);
if (params.flexparams && params.flexparams.anyflex)
{
this.fields.algflex = params.flexparams.algflex;
query.selects.push(params.flexparams.sql);
}
if (!params.filter.show_deleted)
query.wheres.push("alg_regio_verwijder IS NULL");
@@ -82,24 +102,26 @@ model_regions =
if (params.filter.isNew)
query.wheres.push("alg_regio_key = -1"); // Forceer leeg record.
if (params.filter.kenmerk_sql)
query.wheres.push(params.filter.kenmerk_sql);
var wheres = api2.sqlfilter(params, model_regions);
var wheres = api2.sqlfilter(params, this);
query.wheres = query.wheres.concat(wheres);
var sql = "SELECT " + query.selects.join(", ")
+ " FROM " + query.tables.join(", ")
+ (query.wheres.length ? " WHERE " + query.wheres.join(" AND " ) : "")
+ " ORDER BY alg_regio_key, alg_regio_omschrijving";
var json = api2.sql2json (params, sql, model_regions);
var json = api2.sql2json (params, sql, this);
return json;
},
REST_PUT: function (params, jsondata, the_key) /* update region */
};
this.REST_PUT = function (params, jsondata, the_key) /* update region */
{
model_regions._check_authorization(params, "PUT");
_check_authorization(params, "PUT");
if (!jsondata.id) jsondata.id = the_key;
var reg_key = the_key;
var dbfields = api2.update_fields(params, model_regions, jsondata); // Build updater
var dbfields = api2.update_fields(params, this, jsondata); // Build updater
var wheres = [" alg_regio_key = " + reg_key];
var regUpd = buildTrackingUpdate("alg_regio", wheres.join(" AND " ), dbfields, { noValidateToken: true });
@@ -114,13 +136,14 @@ model_regions =
}
return { key: reg_key, warning: warning };
},
REST_POST: function (params, jsondata) /* new region */
};
this.REST_POST = function (params, jsondata) /* new region */
{
params.isNew = true;
model_regions._check_authorization(params, "POST");
_check_authorization(params, "POST");
var dbfields = api2.update_fields(params, model_regions, jsondata); // Build updater
var dbfields = api2.update_fields(params, this, jsondata); // Build updater
dbfields["id"] = {dbs: "alg_regio_key", typ: "key", seq: "alg_s_alg_regio_key" };
var regIns = buildInsert("alg_regio", dbfields, { noValidateToken: true });
var reg_key = regIns.sequences["alg_regio_key"];
@@ -131,10 +154,11 @@ model_regions =
warning = err.friendlyMsg;
return { key: reg_key, warning: warning };
},
REST_DELETE: function (params, the_key) /* delete region */
};
this.REST_DELETE = function (params, the_key) /* delete region */
{
model_regions._check_authorization(params, "DELETE");
_check_authorization(params, "DELETE");
var regio_key = params.filter.id;
var sql = "UPDATE alg_regio"
+ " SET alg_regio_verwijder = SYSDATE"
@@ -145,6 +169,6 @@ model_regions =
params.warning = err.friendlyMsg;
return { key: regio_key, warning: warning };
}
};
}
%>

View File

@@ -3,7 +3,7 @@
<!-- #include file="../scf/scaffolding.inc" -->
<!-- #include file="../api2/model_alg_kenmerk.inc" -->
<%
var niveau = getQParam("level"); // [ D | L | T | G | V | R ]
var niveau = getQParam("level"); // [ E | D | L | T | G | V | R ]
var this_model = new model_alg_kenmerk(niveau);

View File

@@ -122,7 +122,7 @@ function getKenmerkSql(pmodule, pkeyColumn, prequestForm)
tablekey2 = "alg_onrgoed_key"
andALG = " AND alg_onrgoed_niveau = "
if (tablekey == "alg_regio_key")
andALG += "'R'"; // Regio
andALG += "'E'"; // Regio
if (tablekey == "alg_district_key")
andALG += "'D'"; // District
if (tablekey == "alg_locatie_key")

View File

@@ -15,19 +15,23 @@ function getSqlFlex(flexModule, flexId, flexParams)
{
switch(flexModule)
{
case "ALG": { sql_alg_kenmerkalg = "SELECT ak.alg_kenmerk_key"
case "ALG": { var alg_niveau = ( flexId.substr(4,5).toUpperCase() == "REGIO"
? "E"
: flexId.substr(4,1) // D (District), L (Locatie), G (Gebouw), T (Terreinsector) en R (Ruimte).
);
sql_alg_kenmerkalg = "SELECT ak.alg_kenmerk_key"
+ " , a." + flexId // alg_district_key, alg_locatie_key, alg_gebouw_key, alg_terrein_key, alg_ruimte_key
+ " , (SELECT alg_onrgoedkenmerk_waarde"
+ " FROM alg_onrgoedkenmerk aok"
+ " WHERE aok.alg_onrgoed_key = a." + flexId // alg_district_key, alg_locatie_key, alg_gebouw_key, alg_terrein_key, alg_ruimte_key
+ " AND aok.alg_kenmerk_key = ak.alg_kenmerk_key"
+ " AND aok.alg_onrgoedkenmerk_verwijder IS NULL) alg_onrgoedkenmerk_waarde"
+ " FROM " + flexId.replace(/_key/g, "") + " a" // alg_district, alg_locatie, alg_gebouw, alg_terrein, alg_ruimte
+ " FROM " + flexId.replace(/_key/g, "") + " a" // alg_regio, alg_district, alg_locatie, alg_gebouw, alg_terrein, alg_ruimte
+ " , alg_kenmerk ak"
+ " WHERE ak.alg_kenmerk_verwijder IS NULL";
sqlFlex = "SELECT " + lcl.xsql("k.alg_kenmerk_omschrijving", "k.alg_kenmerk_key") + " omschrijving"
+ " , ka." + flexId + " flexparentkey" // alg_district_key, alg_locatie_key, alg_gebouw_key, alg_terrein_key, alg_ruimte_key
+ " , ka." + flexId + " flexparentkey" // alg_regio_key, alg_district_key, alg_locatie_key, alg_gebouw_key, alg_terrein_key, alg_ruimte_key
+ " , k.alg_kenmerk_key kenmerk_key"
+ " , CASE"
+ " WHEN k.alg_kenmerk_kenmerktype = 'R' OR k.alg_kenmerk_kenmerktype = 'r' OR k.alg_kenmerk_kenmerktype = 'S'"
@@ -48,7 +52,7 @@ function getSqlFlex(flexModule, flexId, flexParams)
+ " , alg_kenmerk k"
+ " WHERE ka.alg_kenmerk_key = k.alg_kenmerk_key"
+ " AND k.alg_kenmerk_verwijder IS NULL"
+ " AND k.alg_kenmerk_niveau = " + safe.quoted_sql_upper(flexId.substr(4,1)) // D (District), L (Locatie), G (Gebouw), T (Terreinsector) en R (Ruimte).
+ " AND k.alg_kenmerk_niveau = " + safe.quoted_sql_upper(alg_niveau)
+ (!flexParams.readman? " AND alg_kenmerk_volgnr >= 100" : "")
+ (!flexParams.readuse? " AND alg_kenmerk_volgnr <= 100" : "");

View File

@@ -326,7 +326,7 @@ ResultsetTable.prototype.ProcessAsXMLXSL = function()
}
if (this.printFlex)
{
var flexKey = oRs(flexId).Value;
var flexKey = (!oRs.Fields(flexId).Value ? oRs.Fields("id").Value : oRs.Fields(flexId).Value); // primary key van tabel uit recordset of id uit dataset van api2-model
completeSqlFlex = "SELECT * FROM (" + theSqlFlex + ")"
+ " WHERE flexparentkey = " + flexKey // De flexKey invullen in de sqlFlex query
+ " ORDER BY volgnummer, omschrijving";
@@ -573,7 +573,7 @@ ResultsetTable.prototype.ProcessAsNativeExcel = function _ProcessAsNativeExcel(f
var oRsFlex = null;
if (this.printFlex)
{
var flexKey = oRs(this.flexId).Value;
var flexKey = (!oRs.Fields(this.flexId).Value ? oRs.Fields("id").Value : oRs.Fields(this.flexId).Value); // primary key van tabel uit recordset of id uit dataset van api2-model
var oRsFlexData = getFlexData(theSqlFlex, flexKey, { showProperties: this.showProperties }); // is een JSON
if (!oRsFlexData.length)
@@ -1453,7 +1453,7 @@ function __rsProcessResultset(processParams) // processParams wordt blind aan al
var oRsFlex = null;
if ((isPrinting || isExcel || showProperties) && this.printFlex)
{
var flexKey = oRs(flexId).Value;
var flexKey = (!oRs.Fields(flexId).Value ? oRs.Fields("id").Value : oRs.Fields(flexId).Value); // primary key van tabel uit recordset of id uit dataset van api2-model
var oRsFlexData = getFlexData(theSqlFlex, flexKey, { showProperties: showProperties }); // is een JSON
if (!oRsFlexData.length)