Files
Facilitor/APPL/Shared/kenmerk_common.inc
Admin b20867d89d FSN#16349
svn path=/Website/trunk/; revision=26
2009-10-23 17:02:58 +00:00

747 lines
31 KiB
C++
Raw Blame History

<% /*
$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 = "&nbsp;";
// 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 += "&nbsp;<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 );
}
}
}
}
%>