747 lines
31 KiB
C++
747 lines
31 KiB
C++
<% /*
|
||
$Revision: 2 $
|
||
$Modtime: 23-10-09 18:50 $
|
||
|
||
|
||
File: kenmerk_common.inc
|
||
Status: 90% (works like 4i)
|
||
Description:
|
||
Globals expected:
|
||
fp Global FieldsProcessor object, voor print en voor multiMode
|
||
Context: Used by /alg/kenmerk.inc and /prs/kenmerk.inc flex props
|
||
Note: Writes flex-props html edit/view code to Response object
|
||
Usage: listKenmerk must be called once with an SQL-statement that
|
||
fetches all kenmerk-information
|
||
TODO: readonly velden niet disabled maar readonly tonen.
|
||
*/
|
||
|
||
// kenmerk_val is een padnaam naar een document
|
||
// Als het document begint met <image_path_local> dan halen we
|
||
// dat er af voordat het de database in gaat.
|
||
// We maken van back-slashes (alleen) dan altijd forward slashes
|
||
// Bij presenteren plakken we er mettertijd image_path_virtual voor
|
||
// de check image_path_local != "\\" is nog historisch om problemen te voorkomen
|
||
%>
|
||
|
||
<!-- #include file="../Shared/operand.inc" -->
|
||
|
||
<%
|
||
function parseDocumentPath(kenmerk_val){
|
||
var localpath = replace(image_path_local.toUpperCase(),"/","\\");
|
||
newval = replace((""+kenmerk_val).toUpperCase(),"/","\\");
|
||
__Log("newval: " + newval);
|
||
if (image_path_local != "\\" && newval.indexOf(localpath) == 0)
|
||
return newval.substring(localpath.length);
|
||
else if (image_path_local_regexp && newval.match(image_path_local_regexp))
|
||
{
|
||
__Log("regexp match!");
|
||
return newval.substring(RegExp.lastIndex);
|
||
}
|
||
else
|
||
return kenmerk_val; // Origineel ongewijzigd
|
||
}
|
||
|
||
function kenmerk_write( s ) {
|
||
if( this.print || fp.printing ) {
|
||
fp.append( s );
|
||
}
|
||
|
||
Response.Write( s );
|
||
}
|
||
|
||
function kenmerkExist(kenmerk_key, kenmerk_keys){
|
||
if (!kenmerk_keys) return false;
|
||
|
||
var e_index = 0;
|
||
while (e_index < kenmerk_keys.length) {
|
||
if (kenmerk_keys[e_index] == kenmerk_key) {
|
||
//__Log("Kenmerk " + kenmerk_key + " gevonden");
|
||
return true;
|
||
}
|
||
e_index++;
|
||
}
|
||
//__Log("Kenmerk " + kenmerk_key + " NIET gevonden");
|
||
return false;
|
||
}
|
||
|
||
// Lever code op voor een BijlagenButton type M (map)
|
||
// Module is 'R' voor ruimte, 'M' voor melding enz
|
||
// key is de object key
|
||
// Parameter otherKenmerk_path is null of bevat het pad van het kenmerk waarvan we
|
||
// in een veel later stadium (SaveFlexKenmerken) de folder kopieren (order onder melding)
|
||
// of moven (wijzigen type stdmelding of type opdracht)
|
||
// Als die is meegegeven en er zitten bestanden in de folder dan wordt de knop
|
||
// vooralsnog read-only
|
||
function BijlagenButton(pModule, flexFolder, pKenmerk_key, pReadonly, kdim, otherKenmerk_path)
|
||
{
|
||
/* Bestanden zijn nu te vinden in ...cust/X/flexfiles/[module]/[key]/[kenmerk_key] */
|
||
if (otherKenmerk_path)
|
||
var vAttachPath = flexFilesPath + "/" + otherKenmerk_path + "/";
|
||
else
|
||
var vAttachPath = flexFilesPath + "/" + pModule + "/" + flexFolder + "/" + pKenmerk_key + "/";
|
||
var teller = 0;
|
||
|
||
fso = Server.CreateObject("Scripting.FileSystemObject")
|
||
__Log("Tellen in folder: " + vAttachPath);
|
||
if (fso.FolderExists(vAttachPath))
|
||
{
|
||
var fso, f, f1, fc, s, teller;
|
||
fso = new ActiveXObject("Scripting.FileSystemObject");
|
||
f = fso.GetFolder(vAttachPath);
|
||
fc = new Enumerator(f.files);
|
||
s = "";
|
||
|
||
for (; !fc.atEnd(); fc.moveNext())
|
||
{
|
||
s += fc.item();
|
||
s += "<br>";
|
||
teller++;
|
||
}
|
||
}
|
||
|
||
var res ="<input type=button value='"+ lcl_appendixes + (teller>=0?" (" + teller + ")":"") + "'";
|
||
|
||
if (otherKenmerk_path&&teller>0)
|
||
res += " disabled title='"+lcl_flex_autocopy+"'"
|
||
else // pf: op 1 regel tbv mijn syntaxhiliting
|
||
res += " onClick=\"onBijlagen('" + pModule + "','" + flexFolder + "'," + pKenmerk_key + ", true, " + (pReadonly?"true":"false") + "," + (kdim==null?"null":"'" + kdim + "'") + ", this)\""
|
||
res += ">";
|
||
return res;
|
||
}
|
||
|
||
// Lever code op voor tonen van een bepaalde flexfile streaming
|
||
function OpenFlexFile(Module,Key,Kenmerk_key, fname)
|
||
{
|
||
var s = BijlagenStreamPath; // "../shared/BijlagenStream.asp"
|
||
s += "?module="+Module
|
||
+ "&key="+Key
|
||
+ "&kenmerk_key="+Kenmerk_key
|
||
+ "&filename=" + Server.URLencode(fname)
|
||
+ "&flexFilesPath=" + Server.URLencode(flexFilesPath);
|
||
if (view_dwf_with_slnkdwf) s+= "&SLNKDWF=1";
|
||
return s;
|
||
}
|
||
|
||
// listKenmerk
|
||
// Genereer code voor flexkenmerken
|
||
//
|
||
// Genereer code voor flexkenmerken. Vrij kale code
|
||
// <tr><td>lbl1:</td><td>flex1</td><td>lbl2:</td><td>flex2</td></tr> en dat dan herhaald
|
||
// (Alleen!) voor bewerkbare velden voegen we ook id's toe die met het formulier gesubmit worden
|
||
// params: sql: moet een query met de goede :-) velden bevatten
|
||
// sinds kort worden deze By Name gebruikt ipv By volgorde
|
||
// module, flexFolder: alleen gebruikt voor flexkenmerk 'F' (file) 'E' (encrypted file) en 'M' (map)
|
||
// props { fnIsInvisible: optioneel function (volgnr, type)
|
||
// fnIsReadonly: optioneel function (volgnr)
|
||
// parentKey: optioneel om flexkenmerken onder op te slaan
|
||
// kenmerk_module: optioneel bij ALG: "L", "G", "R" etc.
|
||
// }
|
||
function listKenmerk( sql, module, flexFolder, props)
|
||
{
|
||
var kenmerk_2col = props.kenmerk_2col;
|
||
var kenmerk_search = props.kenmerk_search;
|
||
var kenmerk_colspan = props.kenmerk_colspan;
|
||
var kenmerk_extraTD = props.kenmerk_extraTD;
|
||
|
||
var oRs = Oracle.Execute(sql);
|
||
var colCount = 0; // Even/oneven zodat we weten of we links of rechts zitten
|
||
var forceNewLine = false; // Bij labels en grote text velden
|
||
var val_seperator = '';
|
||
var val_label = '';
|
||
var idCounter = 1; // We maken alleen name/id's voor de velden die ook echt bewerkt kunnen worden
|
||
|
||
// PF: vangnet voor ontbrekende globalen
|
||
if (typeof(kenmerk_search) == "undefined")
|
||
kenmerk_search = false;
|
||
if (typeof(kenmerk_colspan) == "undefined")
|
||
kenmerk_colspan = false;
|
||
if (typeof(kenmerk_2col) == "undefined")
|
||
kenmerk_2col = false;
|
||
|
||
for (i = 1; !oRs.eof; i++)
|
||
{
|
||
var val = null;
|
||
val_seperator = ':';
|
||
if (!kenmerk_search && !fp.multiMode)
|
||
{ // In multiMode no filling of default values
|
||
val = oRs("kenmerk_waarde").Value; // was:11
|
||
// for a new value, this default is used. It could be a primitive value (string, number or key) or
|
||
// it is suggested to support (later)
|
||
// a more sophisticated value, using ##asp-variable## and/or SQL:SELECT in the string.
|
||
if (val != null)
|
||
{ //__Log("val:"+val);
|
||
if (val.match('##SQL##') != null )
|
||
{
|
||
//__Log("val match");
|
||
val = val.substr(7);
|
||
sql = val.replace("##PRS_PERSLID_KEY##", reqId);
|
||
oRsPerslid = Oracle.Execute(sql);
|
||
if (!oRsPerslid.eof)
|
||
val = oRsPerslid(0).Value;
|
||
else
|
||
val = '';
|
||
}
|
||
}
|
||
}
|
||
|
||
var kkey = oRs("kenmerk_key").Value; // was: 0
|
||
val_label = Server.HTMLEncode(oRs("kenmerk_omschrijving").Value); // was: 1
|
||
var ktype = oRs("kenmerk_kenmerktype").Value; // was: 2
|
||
var klen = oRs("kenmerk_lengte").Value; // was: 7
|
||
if (!klen) klen = 255;
|
||
var kdec = oRs("kenmerk_dec").Value; // was: 8
|
||
var kmin = oRs("kenmerk_nmin").Value; // was: 9
|
||
var kmax = oRs("kenmerk_nmax").Value; // was: 10
|
||
var kvolgnr = "" + oRs("kenmerk_volgnr").Value; // was: 12
|
||
var kdim = oRs("kenmerk_dimensie").Value; // was: 13
|
||
var hint = oRs("kenmerk_hint").Value; // was: 14
|
||
if (hint == null) hint = "";
|
||
var def_val = oRs("kenmerk_default").value; // Alleen voor labels // was: 15
|
||
var required = oRs("kenmerk_verplicht").value == 1; // was: 16
|
||
var otherPath = oRs("otherpath").value; // otherKenmerkPath? // was: 17, en alleen voor meldingen (tbv kopieren)
|
||
// forceReadonly kan gezet zijn: dan is het veld *altijd* readonly en kan alleen
|
||
// ingevuld raken doordat een extern proces (importjob?) dat doet of het wordt
|
||
// gevuld door de default waarde.
|
||
var forceReadonly = oRs("kenmerk_toonbaar").value == 1; // readonly // was: 18
|
||
if (def_val == null)
|
||
def_val = " ";
|
||
|
||
// Velden die de gebruiker niet mag zien zijn we h<><68>l snel klaar mee
|
||
// Ook velden waar je niet op kunt zoeken slaan we direct over
|
||
if ((!kenmerk_search && props.fnIsInvisible && props.fnIsInvisible(kvolgnr, ktype)) ||
|
||
//(kenmerk_search && (ktype =='L' || ktype =='Q' || ktype == 'M' || ktype == 'F' || ktype == 'E'))
|
||
(kenmerk_search && (ktype =='Q' || ktype == 'M' || ktype == 'F' || ktype == 'E'))
|
||
)
|
||
{
|
||
oRs.MoveNext();
|
||
continue; // Onzichtbaar
|
||
}
|
||
|
||
colCount++;
|
||
|
||
if (ktype == 'Q')
|
||
{ // Empty
|
||
if ((colCount&1) || !kenmerk_2col)
|
||
//kenmerk_write('<tr' + (kenmerk_search ? ' style="display:none" id=ktr' + (++trn) : '' ) + '>') // Nu altijd zichtbaar in popup dmodal scherm
|
||
kenmerk_write('<tr>')
|
||
else if (!((colCount&1) && kenmerk_2col))
|
||
kenmerk_write('</tr>');
|
||
oRs.MoveNext();
|
||
continue; // Teller is wel opgehoogd: volgende komt vanzelf op nieuwe regel
|
||
}
|
||
|
||
//kenmerk_write( "<!--YY:"+colCount+":"+val_label+"-->");
|
||
//kenmerk_write( "<!--YY:"+idCounter+":"+val_label+"-->");
|
||
|
||
var readonlyfield = forceReadonly; // startwaarde
|
||
|
||
if (!readonlyfield && !kenmerk_search && props.fnIsReadonly) // Zoeken is natuurlijk nooit readonly
|
||
readonlyfield = props.fnIsReadonly(kvolgnr)
|
||
//__Log(val_label + '('+kvolgnr+') readonlyfield : '+readonlyfield);
|
||
|
||
// In het geval van readonly laten we velden zonder waarde helemaal niet zien,
|
||
// met uitzondering van Labels
|
||
if (readonlyfield && ktype != 'L' && (!val || val=="") )
|
||
{
|
||
oRs.MoveNext();
|
||
continue;
|
||
}
|
||
|
||
|
||
if( (klen > 50 && ktype == 'C') || (ktype == 'L'))
|
||
{
|
||
forceNewLine = true;
|
||
colCount = 2; // Forceer 'even'
|
||
} else {
|
||
forceNewLine=false;
|
||
}
|
||
|
||
|
||
var val_js = escape_js(val);
|
||
|
||
// De simpele datatypes ('C', 'D' en 'N'). De complexere overrulen kv mogelijk nog wel.
|
||
// classes gaan hanteren TODO
|
||
|
||
var kv;
|
||
if (klen > 50 && ktype == 'C') // Groot text veld wordt automatisch textarea
|
||
kv = "<textarea "
|
||
+ (!readonlyfield ? " onChange='checkKenmerk(this,false,\"" + ktype + "\"," + klen + "," + kdec + "," + kmin + "," + kmax +")'" : "")
|
||
+ (!readonlyfield ? " onBlur='checkKenmerk(this,true,\"" + ktype + "\"," + klen + "," + kdec + "," + kmin + "," + kmax +")'" : "")
|
||
+ (required
|
||
? " required='1' class='required'"
|
||
: "")
|
||
+ " rows=3 cols='" + (kenmerk_search? '60' : '60') + "'"
|
||
+ ((readonlyfield && !kenmerk_search)
|
||
? 'readonly '
|
||
: "name='k" + idCounter + "val' id='k" + idCounter + "val'") + ">"
|
||
+ (val? val_js : '')
|
||
+ "</textarea>";
|
||
else if ( readonlyfield )
|
||
kv = "<input readonly value='" + val_js +"'>";
|
||
else
|
||
{
|
||
kv = "<input type='text'"
|
||
+ (!readonlyfield ? " onChange='checkKenmerk(this,false,\"" + ktype + "\"," + klen + "," + kdec + "," + kmin + "," + kmax +")'" : "")
|
||
+ (!readonlyfield ? " onBlur='checkKenmerk(this,true,\"" + ktype + "\"," + klen + "," + kdec + "," + kmin + "," + kmax +")'" : "")
|
||
+ " id='k" + idCounter + "val' name='k" + idCounter + "val'"
|
||
+ (required? " required='1' class='required'" : "")
|
||
+ (val? " value='" + val_js+"'" : '')
|
||
+ " style='width:" + (kenmerk_search? '180px' : '250px') + "'"
|
||
+ (readonlyfield? 'readonly ' : '')
|
||
+ " maxlength=" + (ktype == 'N' && kdec? klen + 1 : klen)
|
||
if (ktype == 'D')
|
||
kv += ' onKeyPress=kenmerkDateKey() onPropertyChange=kenmerkDateChange()';
|
||
kv += ">";
|
||
}
|
||
if (ktype == 'X') // Referentie naar bestand
|
||
{
|
||
var jsFileName = replace(image_path_virtual + (val? val : ""), "\\", "/");
|
||
if (readonlyfield) // Je mag er wel op klikken
|
||
if (val)
|
||
kv = '<a href="#" onclick=\'openDoc("' + jsFileName + '")\'>' + val_js + '</a>';
|
||
else
|
||
kv = "";
|
||
else if (val) // Tekstveld met 'view' button er achter plakken
|
||
kv += "<input type=button class=mbutton"
|
||
+ " style='width:20;height:20;background-image:url(../Pictures/fileopen.gif)'"
|
||
+ " onClick='openDoc(\"" + jsFileName + "\");'>";
|
||
else if (!kenmerk_search) // !val // Browse button for new er achter plakken
|
||
kv += "<input style='width:1px' type='file' name='k" + idCounter + "val_file'" + (val? " value='" + val_js + "'" : '')
|
||
+" onchange='document.all.k" + idCounter + "val.value = document.all.k" + idCounter + "val_file.value;"
|
||
+" document.all.k" + idCounter + "val_file.disabled = true'>";
|
||
}
|
||
|
||
if( ktype == 'F' || ktype == 'E') // File
|
||
{
|
||
// De echte waarde bewaren we in een hidden veld. Die wordt dan ook gesubmit
|
||
// Vooralsnog ondersteunen we geen 'required' voor 'F'/'E'
|
||
var fld = "k" + idCounter + "val";
|
||
kv = "";
|
||
if (!readonlyfield)
|
||
kv = "<input type=hidden name='" + fld + "' value='" + (val? val_js : '') + "'>";
|
||
|
||
// Er is redundantie: de bestandsnaam zit in de database en staat in de folder
|
||
// door bijvoorbeeld niet op Ok te drukken na vervanging van het bestand
|
||
// kan er inconstistentie ontstaan. Lastig tegen te gaan dus maar detecteren en melden.
|
||
var missing = false;
|
||
if (val)
|
||
{
|
||
var fso = new ActiveXObject("Scripting.FileSystemObject");
|
||
if (otherPath)
|
||
var vAttachPath = flexFilesPath + "/" + otherPath;
|
||
else
|
||
var vAttachPath = flexFilesPath + "/" + module + "/" + flexFolder + "/" + kkey;
|
||
missing = !fso.FileExists(vAttachPath + "/" + val)
|
||
}
|
||
|
||
if (!missing)
|
||
{
|
||
var jsFileName = replace(val, "\"", "\\\"");
|
||
|
||
if (otherPath) // Even niet klikbaar
|
||
kv2 = "<span title='" + lcl_flex_autocopy + "'>" + Server.HTMLEncode(val? val : "") + "</span>"
|
||
else
|
||
kv2 = "<a href=" + OpenFlexFile(module,flexFolder,kkey, jsFileName) + " target=_new>" + Server.HTMLEncode(val? val : "") + "</a>"
|
||
}
|
||
else
|
||
{
|
||
kv2 = "<span style='color:red'"
|
||
if (readonlyfield)
|
||
kv2 += "title='" + lcl_flex_filenotfoundRO + "'";
|
||
else
|
||
kv2 += "title='" + lcl_flex_filenotfound + "'";
|
||
kv2 += ">" + Server.HTMLEncode(val?val:"") + "</span>"
|
||
}
|
||
// Om te saven doet de gebruiker maar maar rightclick/Saveas
|
||
kv += "<span id=ref" + fld + " style=width:" + (kenmerk_search? '180px' : '250px') + ">" + kv2 + "</span>"
|
||
var blg = "onBijlagen('" + module + "','" + flexFolder + "'," + kkey + ", false, false,"
|
||
+ (kdim == null? "null" : "'" + kdim + "'") + ",null,"
|
||
+ props.parentKey + ",'" + (props.kenmerk_module? props.kenmerk_module : "") + "',"
|
||
+ (ktype == "E" ? "true" : "false") + ")";
|
||
if (!readonlyfield && (!otherPath || !val))
|
||
kv += " <input type=button class=mbutton"
|
||
+ " style='width:20;height:20;background-image:url(../Pictures/fileopen.gif)'"
|
||
+ " onClick=\"u2." + fld + ".value=refk" + idCounter+"val.innerHTML=" + blg +"\">"
|
||
}
|
||
|
||
if (ktype == 'M') // Map met bestanden is altijd heel simpel
|
||
kv = BijlagenButton(module, flexFolder, kkey, readonlyfield, kdim, otherPath);
|
||
|
||
if (ktype == 'R' || (readonlyfield && ktype == 'S')) // Referentie naar andere tabel (listboxje)
|
||
{
|
||
var FAC_USRTAB_KEY = oRs("fac_usrtab_key").Value; // was: 6
|
||
var where = '';
|
||
if (oRs("refkenmerk_objectnaam").Value == "FAC_USRDATA" && FAC_USRTAB_KEY ) where = "FAC_USRTAB_KEY=" + FAC_USRTAB_KEY;
|
||
sql = "select " + oRs("refkenmerk_kolomnaam").Value+"," + oRs("refkenmerk_kolomtxt").Value + " from " + oRs("refkenmerk_objectnaam").Value
|
||
+ ( where ? (" where " + where
|
||
+ (( oRs("refkenmerk_objectnaam").Value == "FAC_USRDATA" && FAC_USRTAB_KEY )? " AND fac_usrdata_verwijder IS NULL" : ""))
|
||
: "" )
|
||
+ ((oRs("refkenmerk_objectnaam").Value == "FAC_USRDATA")? " order by fac_usrdata_volgnr, 2" : " order by 2, 1")
|
||
;
|
||
oRs2 = Oracle.Execute(sql);
|
||
kv = '';
|
||
c0 = oRs2(0); // for performance this is better, it seems (-JGL).
|
||
c1 = oRs2(1);
|
||
// Performance optimalisation: Instead of building the string by appending
|
||
// we build it in an array first and finally 'join' it.
|
||
var builder = new Array();
|
||
var maxLen = 0;
|
||
while (!oRs2.eof)
|
||
{
|
||
if (readonlyfield)
|
||
{
|
||
if (c0.Value == val)
|
||
{
|
||
kv = escape2(c1.Value);
|
||
break; // Rap klaar. Kan efficienter met een WHERE?
|
||
}
|
||
} else {
|
||
if (c1.Value != null && String(c1.Value.length) > maxLen)
|
||
maxLen = String(c1.Value).length;
|
||
appender = '<option value="' + c0.Value + '"'
|
||
+ (c0.Value == val?' selected' : '') + '>' + escape2(c1.Value) + '</option>';
|
||
builder[builder.length] = appender;
|
||
}
|
||
oRs2.MoveNext();
|
||
}
|
||
if (kv == '') kv += builder.join(' ');
|
||
if (kv == '') kv = ' '; // Zodat readonly/print in ieder geval het label getoond wordt.
|
||
oRs2.close();
|
||
|
||
if (!readonlyfield)
|
||
{
|
||
// wmaxLen: auto breder maken listboxen bij 1 kolom en lange strings
|
||
if (kenmerk_search)
|
||
wLen = '180px';
|
||
else if (kenmerk_2col || maxLen < 40)
|
||
wLen = '250px';
|
||
else
|
||
wLen = '500px';
|
||
kv = "<select id='k" + idCounter + "val' name='k" + idCounter + "val'"
|
||
+ (required? " required='1' class='required'" : "")
|
||
+ " width='" + wLen
|
||
+ "' style='width:" + wLen + "'>"
|
||
+ "<option value=''></option>"
|
||
+ kv
|
||
+ "</select>";
|
||
} else
|
||
kv = '<input class="fldflex" type="text" readonly value="' + kv + '"></input>';
|
||
}
|
||
|
||
// readonlyfield is bij "R" al meegenomen
|
||
if (ktype == 'S' && !readonlyfield) // Referentie naar andere tabel (suggest box)
|
||
{
|
||
var refkk_key = 1000; // todo: die zit nog niet in de query helaas
|
||
// TODO: Bij bewerken bestaande waarde invullen
|
||
%><script>
|
||
jQuery(document).ready( function()
|
||
{
|
||
Suggest<%=refkk_key%> = new Suggest({ objectName: "Suggest<%=refkk_key%>",
|
||
queryField: $("#Suggest<%=refkk_key%>_show")[0],
|
||
queryUrl: "../shared/Suggest/SuggestKenmerkDomein.asp?module=<%=module%>&refkenmerk_key=<%=refkk_key%>",
|
||
initKey: '<%=val%>',
|
||
keyField: $("#k<%=idCounter%>val")[0],
|
||
fieldReadonly: <%=readonlyfield?"true":"false"%>
|
||
});
|
||
}
|
||
)
|
||
</script>
|
||
<%
|
||
// wmaxLen: auto breder maken listboxen bij 1 kolom en lange strings
|
||
if (kenmerk_search)
|
||
wLen = '180px';
|
||
else if (kenmerk_2col || maxLen < 40)
|
||
wLen = '250px';
|
||
else
|
||
wLen = '500px';
|
||
kv = "<input type='text' id='Suggest"+refkk_key+"_show' style='width:" + wLen + "'></input>"
|
||
+ "<input type='hidden' id='k" + idCounter + "val' name='k" + idCounter + "val'></input>";
|
||
}
|
||
|
||
if (ktype == 'L')
|
||
{ // Label line
|
||
val_label = oRs("kenmerk_omschrijving"); // was: 1
|
||
val_seperator = '';
|
||
kv = def_val;
|
||
}
|
||
|
||
if( klen > 50 && ktype == 'C')
|
||
{ // Textarea geworden. Vorige zeker afsluiten??
|
||
kenmerk_write("</tr>");
|
||
}
|
||
|
||
if (kv != '')
|
||
{
|
||
// Schrijf eventueel een tabelregel begin
|
||
if ((colCount&1) || forceNewLine || !kenmerk_2col)
|
||
//kenmerk_write('<tr' + (kenmerk_search ? ' style="display:none" id=ktr' + (++trn) : '' ) + '>')
|
||
kenmerk_write('<tr>'); // Nu altijd zichtbaar in popup dmodal scherm
|
||
|
||
// Schrijf een tabelcell met het label
|
||
kenmerk_write('<td class="label ' + (ktype == 'L'?'flexlabel':'') + '"><label for="k' + idCounter + 'val">'
|
||
+ '<span title="' + escape2(hint) + '">'
|
||
+ val_label + (kdim!=null? '<br>[' + kdim + ']' : '') + val_seperator + '</span></label></td>' );
|
||
// TODO: die vaste breedte moet gestyled worden
|
||
kenmerk_write('<td valign=top padding=0' + (ktype == 'L'?' class=flexlabel':'') + (kenmerk_colspan?' align=center':'') + ' width="' + (kenmerk_search? '360px' : '400px') + '"');
|
||
|
||
if (kenmerk_search && (ktype != 'L'))
|
||
{
|
||
kenmerk_write('>');
|
||
kenmerk_write(Operand(idCounter));
|
||
}
|
||
else
|
||
{
|
||
if ((klen > 50 && ktype == 'C') || (ktype == 'L'))
|
||
if (typeof kenmerk_extraTD != "undefined" && kenmerk_extraTD)
|
||
kenmerk_write(' colspan=4>'); // MLD_OPDR heeft TD-tje extra
|
||
else
|
||
kenmerk_write(' colspan=3>');
|
||
else
|
||
kenmerk_write(">");
|
||
}
|
||
|
||
if (kenmerk_colspan)
|
||
{
|
||
kenmerk_write('</td><td valign=top align=right' );
|
||
|
||
if (((klen > 50 && ktype == 'C') || (ktype == 'L') ) && !kenmerk_search)
|
||
{
|
||
kenmerk_write(" colspan=4>");
|
||
}
|
||
else
|
||
{
|
||
//if (!kenmerk_search || ktype == 'L') kenmerk_write(">");
|
||
kenmerk_write(">");
|
||
}
|
||
}
|
||
|
||
// Schrijf een het echte veld
|
||
kenmerk_write(kv);
|
||
if (typeof kenmerk_extraTD != "undefined" && kenmerk_extraTD)
|
||
kenmerk_write('</td><td>') // Extra leeg celletje voor layout MLD_OPDR
|
||
|
||
if (val && forceReadonly) // hidden veld met de *echt* waardes zodat ze wel worden opgeslagen
|
||
{
|
||
kenmerk_write("<input type=hidden id='k" + idCounter + "val' name='k" + idCounter + "val' value='" + val_js + "'>")
|
||
}
|
||
|
||
if ((kenmerk_search || !readonlyfield || (val && forceReadonly)) && ktype != "M" && ktype != 'L')
|
||
{ // Alleen dan hidden name-velden er bij
|
||
%> <input type=hidden name='k<%=idCounter%>key' value='<%=kkey%>'>
|
||
<input type=hidden name='k<%=idCounter%>t' name='k<%=idCounter%>t' value='<%=ktype%>'>
|
||
<% idCounter++; // Nu ophogen
|
||
}
|
||
|
||
kenmerk_write('</td>' + ((colCount&1) && kenmerk_2col ? '' : '</tr>'));
|
||
}
|
||
oRs.MoveNext();
|
||
}
|
||
oRs.close();
|
||
|
||
//TODO?? if (!kenmerk_2col || !(i&1))
|
||
// kenmerk_write('</tr>');
|
||
kenmerk_write('<input type=hidden id="k_all" name="k_all" value="' + idCounter + '">');
|
||
}
|
||
|
||
// Hernoem folders onder basepath
|
||
// Flexsql levert twee velden op: oude key en nieuwe key
|
||
function RenameFlexFolders(basepath, flexsql)
|
||
{
|
||
var fso = Server.CreateObject("Scripting.FileSystemObject")
|
||
var basepath = flexFilesPath + "/" + basepath + "/";
|
||
var oRs = Oracle.Execute(flexsql);
|
||
while (!oRs.Eof)
|
||
{
|
||
vAttachPath = basepath + oRs(0).Value;
|
||
vAttachPath2 = basepath + oRs(1).Value;
|
||
__Log("Zoeken " + vAttachPath);
|
||
try
|
||
{
|
||
if (fso.FolderExists(vAttachPath))
|
||
{
|
||
if (fso.FolderExists(vAttachPath2))
|
||
{
|
||
__Log("Verplaats inhoud " + vAttachPath + "/*.* naar " + vAttachPath2 + "/");
|
||
fso.MoveFile (vAttachPath + "/*.*", vAttachPath2 + "/");
|
||
fso.DeleteFolder(vAttachPath);
|
||
}
|
||
else
|
||
{
|
||
__Log("Hernoem " + vAttachPath + " naar " + vAttachPath2);
|
||
fso.MoveFolder(vAttachPath, vAttachPath2);
|
||
}
|
||
}
|
||
}
|
||
catch(ee)
|
||
{
|
||
__DoLog("Moving files from " + vAttachPath + "<br>to " + vAttachPath2 + " failed:<br>" + ee.description, "#00FF00");
|
||
}
|
||
oRs.MoveNext();
|
||
}
|
||
fso = null;
|
||
}
|
||
|
||
function CreateFullPath(sPath)
|
||
{
|
||
var oFS = Server.CreateObject("Scripting.FileSystemObject");
|
||
if (!oFS.FolderExists(sPath))
|
||
{
|
||
while (!oFS.FolderExists(sPath))
|
||
{
|
||
var sParent =sPath;
|
||
while (!oFS.FolderExists(sParent))
|
||
{
|
||
var sChild = sParent;
|
||
var sParent = oFS.GetParentFolderName(sChild);
|
||
}
|
||
oFolder = oFS.CreateFolder(sChild)
|
||
}
|
||
}
|
||
}
|
||
|
||
|
||
// Kopieer folders van oldbasepath naar newbasepath
|
||
// Flexsql levert twee velden op: oude key en nieuwe key
|
||
function CopyFlexFolders(oldbasepath, newbasepath, flexsql)
|
||
{
|
||
var fso = Server.CreateObject("Scripting.FileSystemObject")
|
||
var oldbasepath = flexFilesPath + "\\" + oldbasepath + "\\";
|
||
var newbasepath = flexFilesPath + "\\" + newbasepath + "\\";
|
||
var oRs = Oracle.Execute(flexsql);
|
||
while (!oRs.Eof)
|
||
{
|
||
vAttachPath = oldbasepath + oRs(0).Value;
|
||
vAttachPath2 = newbasepath + oRs(1).Value;
|
||
__Log("Kopie " + vAttachPath + " Naar " + vAttachPath2);
|
||
try
|
||
{
|
||
if (fso.FolderExists(vAttachPath))
|
||
{
|
||
__Log("xAbout to copy " + vAttachPath + "\\*.* to " + vAttachPath2 + "\\");
|
||
CreateFullPath(vAttachPath2);
|
||
fso.CopyFile(vAttachPath+"\\*.*", vAttachPath2, false); // Don't overwrite
|
||
}
|
||
}
|
||
catch(ee)
|
||
{
|
||
__DoLog("Copying files from " + vAttachPath + "<br>to " + vAttachPath2 + " failed:<br>" + ee.description, "#00FF00");
|
||
}
|
||
oRs.MoveNext();
|
||
}
|
||
fso = null;
|
||
}
|
||
|
||
// Save de kenmerken die we met listKenmerk hebben aangemaakt
|
||
// Verondersteld POST formulier (we doen een Request.Form)
|
||
// kenmerkTable : "mld_kenmerkopdr"
|
||
// kenmerkParentKey: "mld_opdr_key"
|
||
// kenmerkWaarde : "mld_kenmerkopdr_waarde"
|
||
// kenmerkKey : "mld_kenmerk_key"
|
||
// currentKenmerkenSQL : Voor maken array met kenmerk_keys die voor dit object al in de database waren
|
||
// RequestQ : true voor QueryString, false voor Form
|
||
// moduleName : optional "ALG_ONRGOED_NIVEAU"
|
||
// moduleVal : optional "R"
|
||
// isNew : optional, true als het object nieuw is
|
||
// flexPath : die gebruiken we dan om tijdelijke folder te hernoemen bijv. "ALG/R"
|
||
// In listKenmerk hebben we al gezorgd dat er alleen waarden gesubmit worden van velden die we
|
||
// ook echt mochten wijzigen. kkn en kvn zullen er dan ook altijd beide zijn
|
||
function saveFlexKenmerken(parentKey, kenmerkTable, kenmerkParentKey,
|
||
kenmerkWaarde, kenmerkKey, currentKenmerkenSQL, RequestQ,
|
||
moduleName, moduleVal,
|
||
isNew, flexPath)
|
||
{
|
||
|
||
var requestQF = RequestQ?Request.QueryString:Request.Form;
|
||
|
||
var kenmerk_keys = new Array(); // kenmerk table is used to check whether a kenmerk already exists or not.
|
||
if (currentKenmerkenSQL)
|
||
{
|
||
var oRs = Oracle.Execute(currentKenmerkenSQL);
|
||
while( !oRs.eof ) {
|
||
kenmerk_keys.push(oRs(0).value);
|
||
oRs.MoveNext();
|
||
}
|
||
oRs.Close();
|
||
}
|
||
if (isNew)
|
||
{
|
||
var tmp_folder = "__NEW__" + Session.SessionId;
|
||
vAttachPath = flexFilesPath + "/" + flexPath + tmp_folder;
|
||
vAttachPath2 = flexFilesPath + "/" + flexPath + parentKey;
|
||
var fso = Server.CreateObject("Scripting.FileSystemObject")
|
||
if (fso.FolderExists(vAttachPath))
|
||
{
|
||
__Log("Hernoem " + vAttachPath + " naar " + vAttachPath2);
|
||
try
|
||
{
|
||
fso.MoveFolder(vAttachPath, vAttachPath2);
|
||
}
|
||
catch (ee)
|
||
{
|
||
__Log("MoveFolder in eerste instantie mislukt: " + ee.description + "<br>Nog eens proberen met wildcard move.");
|
||
try
|
||
{
|
||
fso.MoveFolder(vAttachPath + "/*.*", vAttachPath2);
|
||
}
|
||
catch (ee)
|
||
{
|
||
__DoLog("MoveFolder " + vAttachPath + " naar " + vAttachPath2 + " nog steeds mislukt: " + ee.description);
|
||
}
|
||
}
|
||
}
|
||
fso = null;
|
||
}
|
||
|
||
|
||
for( kenmerk=1; true; kenmerk++ ) {
|
||
|
||
kkn = requestQF("k"+kenmerk+"key").Count;
|
||
kvn = requestQF("k"+kenmerk+"val").Count;
|
||
|
||
//__Log("kenmerk: " + kkn)
|
||
//__Log("Kenmerk nummer: " + kkn)
|
||
//__Log("Kenmerk val: " + kvn)
|
||
if( kkn < 1 && kvn < 1 ) { // Geen key en geen value: we zijn klaar
|
||
break;
|
||
}
|
||
kk = requestQF("k"+kenmerk+"key");
|
||
kv = ''+requestQF("k"+kenmerk+"val");
|
||
kt = ''+requestQF("k"+kenmerk+"t"); // Type letter
|
||
|
||
// ATTENTIE: als het een numeriek/decimaal veld is, kan het zijn dat er een komma in voorkomt
|
||
// die eigenlijk een punt moet zijn.
|
||
//
|
||
if (kt=="N") kv = kv.replace(',', '.'); // We slaan altijd op met punten
|
||
|
||
if( ( kv == '' || kv == 'undefined') ) {
|
||
if (kenmerkExist(kk, kenmerk_keys) && !fp.multiMode) {
|
||
// delete;
|
||
sql = "DELETE FROM "+kenmerkTable
|
||
+ " WHERE "+kenmerkParentKey+"="+parentKey
|
||
+ " AND "+kenmerkKey+" = " + kk;
|
||
Oracle.Execute( sql );
|
||
}
|
||
continue;
|
||
}
|
||
|
||
// A real kenmerk value exists
|
||
if (kt=="X") kv = parseDocumentPath(kv);
|
||
if (kenmerkExist(kk, kenmerk_keys)) { // update
|
||
sql = "UPDATE "+kenmerkTable+" SET "+kenmerkWaarde+" = "+escape_sql(kv)+
|
||
" WHERE "+kenmerkParentKey+" = " + parentKey +
|
||
" AND "+kenmerkKey+" = " + kk ;
|
||
Oracle.Execute( sql );
|
||
|
||
}
|
||
else { // insert
|
||
if( ( kv != '' && kv != 'undefined') ) {
|
||
sql = "INSERT INTO "+kenmerkTable+"("+kenmerkParentKey+","
|
||
+ kenmerkKey+","+kenmerkWaarde+(moduleName?","+moduleName:'')+")"
|
||
+ " VALUES ("+parentKey+", "+kk+", "+escape_sql(kv)+(moduleName?",'"+moduleVal+"'":"")+")";
|
||
Oracle.Execute( sql );
|
||
}
|
||
}
|
||
}
|
||
}
|
||
%>
|