Files
Facilitor/APPL/EXP/exp_shared.js
Erik Groener b1646fa25f FSN#29184 Nieuwe gen_export problemen
svn path=/Website/branches/v5.4.1/; revision=21193
2014-04-02 07:56:06 +00:00

247 lines
8.4 KiB
JavaScript

/*
$Revision$
$Id$
File: exp_shared.js
Description: Helper functie
Parameters:
export_app_key Exportfunctie key
Context:
Note: ========= LET OP LET OP =========
Dit bestand wordt ook gebruikt door ../../utils/gen_export/gen_export.wsf
Daar hebben we door CScript maar heel weinig functies!
DUS: Geen L() functie voor locale!!!!
EN: Geen Server.CreateObject maar new ActiveXObject
========= LET OP LET OP =========
gen_export_app_flags: 00001 (1) zip het resultaat
00010 (2) manual
*/
// fileStream moet onze data bevatten
// export_app_key de export-functie
// params export_key mag/zal leeg zijn voor het eerste bestand
// customerId: "UWVA"
// fac_home: net boven de APPL dus bijv. "d:/apps/facilitor/"
// filepathname: optioneel: stoppen we in fac_export_filenaam
function expCreateStream(export_key, params)
{
preExport(params);
var exportFile = getFileName(params.prefix, params.postfix, params.applrun, params.timestamp);
var streamData = exportToStream(params, exportFile); // exportFile voor als compress
if (!params.preview)
postExport(params);
if (params.compress)
exportFile += '.zip';
return { exportFile: exportFile
, streamData: streamData
};
}
function getSettings(app_key)
{
// Read settings from database
//
var settings = {};
var sql = "SELECT *"
+ " FROM fac_export_app"
+ " WHERE fac_export_app_key = " + app_key;
var oRs = Oracle.Execute(sql);
if (oRs.Eof)
{
__Log("Unable to find " + app_key + " in fac_export_app");
}
else
{
settings = { code: oRs("fac_export_app_code").value
, oms: oRs("fac_export_app_oms").value
, xsl: oRs("fac_export_app_xsl").value || ""
, charset: oRs("fac_export_app_charset").value || "Windows-1252"
, folder: oRs("fac_export_app_folder").value || ""
, prefix: oRs("fac_export_app_prefix").value || ""
, postfix: oRs("fac_export_app_postfix").value || ""
, timestamp: oRs("fac_export_app_timestamp").value || ""
, flags: oRs("fac_export_app_flags").value || ""
, functie_key: oRs("fac_functie_key").value
, logpostfix: oRs("fac_export_app_log_postfix").value || ""
}
}
oRs.Close();
if (settings.flags & 1)
settings.compress = true;
if (settings.flags & 2)
settings.manual = true;
return settings;
}
function preExport(params)
{
// Clean up the mess of the previous run
//
var sql = "DELETE FROM imp_log"
+ " WHERE imp_log_applicatie = " + safe.quoted_sql(params.code);
__Log("SQL: " + sql);
Oracle.Execute(sql);
//
// Call the database procedure for selecting the export results.
var selectProc = (params.custid + "_SELECT_" + params.code).toUpperCase();
var sql = "SELECT DISTINCT name"
+ " FROM user_source"
+ " WHERE type = 'PROCEDURE'"
+ " AND name = " + safe.quoted_sql(selectProc);
__Log("SQL: " + sql);
var oRs = Oracle.Execute(sql);
if(!oRs.Eof)
{
sql = "BEGIN " + selectProc + "(" + "'" + params.code + "', '" + toDateTimeString(params.applrun) + "'" + "); END;";
__Log("SQL: " + sql);
Oracle.Execute(sql);
}
else
{
__Log("Optional select/pre-export procedure not found: " + selectProc);
}
oRs.Close();
}
function postExport(ini)
{
// Call the database procedure for creation of exportfile.
var filename = getFileName(ini.prefix, ini.postfix, ini.applrun, ini.timestamp);
var exportProc = ini.custid + "_EXPORT_" + ini.code;
var sql = "SELECT DISTINCT name"
+ " FROM user_source"
+ " WHERE type='PROCEDURE'"
+ " AND name = " + safe.quoted_sql(exportProc);
__Log("SQL: " + sql);
var oRs = Oracle.Execute(sql);
if (!oRs.Eof)
{
var sql = "BEGIN "
+ exportProc + "(" + safe.quoted_sql(ini.code)
+ "," + safe.quoted_sql(toDateTimeString(ini.applrun))
+ ",'-1'" //+ safe.quoted_sql(iniOraclePath) // ??
+ "," + safe.quoted_sql(filename)
+ ");"
+ " END;"
__Log("SQL: " + sql);
Oracle.Execute(sql);
}
else
{
__Log("Optional (post-)export procedure not found: " + exportProc);
}
oRs.Close();
}
// Lever null op als er geen select-view is gedefinieerd.
function exportToStream(params, exportFile)
{
var fstr;
var exportView = (params.custid + "_V_EXPORT_" + params.code).toUpperCase();
var sql = "SELECT DISTINCT view_name"
+ " FROM USER_VIEWS"
+ " WHERE view_name = " + safe.quoted_sql(exportView);
__Log("SQL: " + sql);
var oRs = Oracle.Execute(sql);
if (oRs.Eof)
{
__Log("Optional export view not found: " + exportView);
oRs.Close()
return null;
}
else
{
// Write data to stream.
fstr = openStreamWriteText({charset: params.charset});
var sql_v = "SELECT result"
+ " FROM " + exportView
+ " ORDER BY result_order";
__Log("SQL: " + sql_v);
var oRs_v = Oracle.Execute(sql_v);
while (!oRs_v.Eof)
{
fstr.WriteText(oRs_v("result").Value, 1); // 0=adWriteChar, 1=adWriteLine (LineSeparator required)
oRs_v.MoveNext();
}
oRs_v.Close();
}
oRs.Close();
fstr.Position = 0;
if (!params.compress)
return fstr;
var oZIP = new ActiveXObject("SLNKDWF.Zip");
var fso = new ActiveXObject("Scripting.FileSystemObject");
var temp = params.tempFolder + fso.GetTempName();
oZIP.New(temp) //;; Helaas niet *naar* stream
oZIP.ZipFromStream(exportFile, fstr);
oZIP.Close();
var oStream = new ActiveXObject("ADODB.Stream");
oStream.Open;
oStream.Type = 1; // adTypeBinary
oStream.LoadFromFile(temp);
oStream.Position = 0;
fso.DeleteFile(temp);
return oStream;
}
function openStreamWriteText(params)
{
// params:
// lineseparator: -1=adCRLF, 10=adLF, 13=adCR
// streamwrite: 1=adSaveCreateNotExist, 2=adSaveCreateOverWrite
// charset:
var streamwrite = (params.streamwrite ? params.streamwrite : 1);
var fileStream = new ActiveXObject("ADODB.Stream");
fileStream.CharSet = (params.charset ? params.charset : "Windows-1252");
fileStream.LineSeparator = (params.lineseparator ? params.lineseparator : -1);
fileStream.Type = 2; // 1=adTypeBinary, 2=adTypeText
fileStream.Open();
return fileStream;
}
function getFileName(prefix, postfix, daterun, dateformat)
{
var index = prefix.indexOf(".");
var naam = (index==-1?prefix:prefix.substr(0, index)) + formatDate(daterun, dateformat) + postfix;
return naam;
}
function formatDate(datum, format)
{
var onejan = new Date(datum.getFullYear(),0,1);
var o = { "m+" : datum.getMonth()+1 //month
, "d+" : datum.getDate() //day
, "H+" : datum.getHours() //hour
, "M+" : datum.getMinutes() //minute
, "S+" : datum.getSeconds() //second
, "q+" : Math.floor((datum.getMonth()+3)/3) //quarter
, "s" : datum.getMilliseconds() //millisecond
, "w+" : Math.ceil((((datum - onejan) / 86400000) + onejan.getDay()+1)/7) // weeknumber
};
format = format.replace('hhmm', 'HHMM');
if (/(y+)/.test(format))
format = format.replace(RegExp.$1, (datum.getFullYear()+"").substr(4 - RegExp.$1.length));
for(var k in o)
{
if(new RegExp("("+ k +")").test(format))
{
format = format.replace(RegExp.$1, RegExp.$1.length==1 ? o[k] : ("00"+ o[k]).substr((""+ o[k]).length));
}
}
return format;
}