FSN#45107 Excel export 'Elke SQL bekijken

svn path=/Website/trunk/; revision=40642
This commit is contained in:
Erik Groener
2019-01-23 12:40:00 +00:00
parent 43a3fef3eb
commit 735365c7f1

View File

@@ -11,208 +11,88 @@
Notes:
*/
%>
<!-- #include file="../shared/common.inc" -->
<!-- #include file="../Shared/adovbs.inc" -->
<!-- #include file="../Shared/resultset_table_v2.inc" -->
<!-- #include file="../Shared/iface.inc" -->
<%
FCLTHeader.Requires({ plugins: ["jQuery"] })
__Logging = 0; // Is te laat...
Application("otap_environment") == "O" || user.checkAutorisation("WEB_FACFAC");
var sql = getFParam("sql", getQParam("sql", ""));
// Als er exact <20><>n SELECT, FROM en WHERE is doen we een beetje formatting
if ( sql.indexOf("\n") == -1 &&
(sql.match(/SELECT/ig) || []).length == 1 &&
(sql.match(/FROM/ig) || []).length == 1 &&
(sql.match(/WHERE/ig) || []).length == 1)
{
sql = sql.replace(/ FROM/i, "\nFROM");
sql = sql.replace(/ WHERE/i, "\nWHERE");
sql = sql.replace(/ ORDER BY/i, "\nORDER BY");
sql = sql.replace(/ GROUP BY/i, "\nGROUP BY");
sql = sql.replace(/ AND/ig, "\n AND");
sql = sql.replace(/ , /ig, ", ");
}
/*
//Onze SQL-statement zo maar naar een cloud-service sturen mag vast niet van ISO-27001
if (sql && sql != "opener")
{
SXH_PROXY_SET_PROXY = 2
var url="http://www.dpriver.com/cgi-bin/ppserver";
var http_request = new ActiveXObject("MSXML2.ServerXMLHTTP.6.0");
//http_request.setProxy(SXH_PROXY_SET_PROXY, "127.0.0.1:8888")
http_request.open("POST", url, false);
http_request.setRequestHeader("Content-Type", "application/xml; charset=UTF-8")
//6470-1140-4758-5296 demo
//4149-9094-8133-2031 online
// demo mei 2017 <clientid>dpriver-9094-8133-2031</clientid>
var req = "<sqlpp_request><clientid>dpriver-9094-8133-2031</clientid><dbvendor>oracle</dbvendor><outputfmt>html2</outputfmt><inputsql>";
req += Server.HTMLEncode(sql);
req += '</inputsql><formatoptions><keywordcs>Uppercase</keywordcs><identifiercs>Lowercase</identifiercs>'
+ '<functioncs>Uppercase</functioncs><lnbrwithcomma>after</lnbrwithcomma><liststyle>stack</liststyle>'
+ '<salign>sleft</salign><quotechar>"</quotechar><maxlenincm>80</maxlenincm>'
+ '<andorunderwhere>yes</andorunderwhere></formatoptions></sqlpp_request>';
http_request.send(req);
var xslDoc = new ActiveXObject("MSXML2.DOMDocument.6.0");
xslDoc.loadXML(http_request.responseText);
retvalue = xslDoc.selectSingleNode("sqlpp_result/retvalue");
retmessage = xslDoc.selectSingleNode("sqlpp_result/retmessage");
if (retvalue.text != "0")
{
// retmessage.text: AS(1,130) expected token:JOIN
RegCode = retmessage.text.match(/^(\w*)\(1\,(\d+)/); // Zoek: AS(1,130) expected token:JOIN
if (RegCode && RegCode.length > 2)
{
var ll = RegCode[1].length;
var pos = parseInt(RegCode[2], 10);
sql = sql.substr(0, pos-1) + "<span style='background-color:red'>"+RegCode[1]+"</span>" + sql.substr(pos-1+ll);
}
Response.Write("<i>"+retmessage.text+"</i>");
Response.Write("<br>" + sql); // origineel terug
}
else
{
formatted_sql = xslDoc.selectSingleNode("sqlpp_result/formattedsql");
Response.Write(formatted_sql.text);
}
}
*/
%>
<html>
<head>
<% FCLTHeader.Generate({outputmode: 0}) %>
<script>
<% if (sql == "opener") {
sql = "";
%>
$(function () {
if (window.opener && window.opener.genericsql)
{
$("#sql").val(window.opener.genericsql);
$("form").submit();
}
});
<% } %>
function fliptable(evt)
{
FcltMgr.stopPropagation(evt);
$("table#sqldatatable").each(function() {
var $this = $(this);
var newrows = [];
$this.find("tr").each(function(){
var i = 0;
$(this).find("td,th").each(function()
{
if ($(this).closest("thead").hasClass("tableFloatingHeader"))
return;
i++;
if(newrows[i] === undefined) { newrows[i] = $("<tr></tr>"); }
this.align = 'left'; // de data
if (this.tagName == 'TH')
this.style = 'text-align:right'; // de headers
newrows[i].append($(this));
});
});
$this.find("tr").remove();
$.each(newrows, function(){
$this.append(this);
});
});
$("table#sqldatatable").width('auto');
return false;
}
</script>
%>
<html>
<head>
<% FCLTHeader.Generate({outputmode: 0}); %>
<style>
table.rstable td {
border-left: 1px solid #bbb;
}
body {
padding: 5px;
}
body#searchbody td {
line-height:1.2em!important;
line-height:1.2em!important;
}
.message {
background-color: orange;
color: black;
padding: 2px 5px 4px 5px;
height: 20px;
vertical-align: middle;
}
</style>
<script>
function doSubmit()
{
doFormat();
document.forms.u2.submit();
}
function doFormat()
{
var sql = $("#sql").val();
// Als er exact 1 SELECT, FROM en WHERE is doen we een beetje formatting
if ( sql.indexOf("\n") == -1 &&
(sql.match(/SELECT/ig) || []).length == 1 &&
(sql.match(/FROM/ig) || []).length == 1 &&
(sql.match(/WHERE/ig) || []).length <= 1
)
{
sql = "_"+sql.trim();
sql = sql.replace(/_SELECT/i, "SELECT");
sql = sql.replace(/ FROM/i, "\nFROM");
sql = sql.replace(/ WHERE/i, "\nWHERE");
sql = sql.replace(/ ORDER BY/i, "\nORDER BY");
sql = sql.replace(/ GROUP BY/i, "\nGROUP BY");
sql = sql.replace(/ AND/ig, "\n AND");
sql = sql.replace(/ , /ig, ", ");
}
$("#sql").val(sql);
}
</script>
</head>
<body id="searchbody">
<body id="searchbody">
<div id="search">
<form method='post'>
<textarea name='sql' id='sql' style='width:800px;height:200px' spellcheck="false"><%=safe.textarea(sql)%></textarea>
<button type='submit'>Execute</button>
<form id="u2" name="u2" method="get" action="mgt_genericsql_list.asp" target="workFrame">
<% BLOCK_START("searchtable", L("lcl_menu_fac_anysql"));
RWTEXTAREATR("sql", "fld", "", sql, {html: "style='width:800px;height:200px' spellcheck='false'"});
BLOCK_END();
var buttons = [ {title: L("lcl_usrrap_uitvoeren"), action: "doSubmit()", id: "bSearch" } ];
CreateButtons(buttons, { entersubmit: true });
%>
</form>
</div>
<%
if (!sql)
Response.End;
try
{
var hiresTimer = new ActiveXObject("SLNKDWF.About");
var tm_start = hiresTimer.usTimer;
var oRs = Oracle.RealConnection.Execute("SELECT * FROM ({0})".format(sql)); // de wrapper beschermt tegen INSERT, DELETE en UPDATE
var tm = (hiresTimer.usTimer - tm_start) / 1000;;
Response.Write(tm.toFixed(1) + "ms")
}
catch (e)
{
Response.Write(" <i style='color:red' class='fa fa-warning fa-lg'></i> " + e.description);
Response.End;
}
var rst = new ResultsetTable({ sql: "dummy",
pRs: oRs, // oRs is al eerder bepaald
ID: "sqldatatable",
showAll: true, //showall,
outputmode: 0,
title: "SQL <button onclick='fliptable(event)'>Flip</button>",
noPrint: true,
noExcel: true,
buttons: [] // print en excel komen vanzelf
});
function fnfnmyFloat(kolom)
{
return function (oRs)
{
var v = oRs(kolom).Value;
return safe.displayfloat(v, 2, true); // true voor trimZeros, we weten helemaal niet of die 2 zo bedoeld was
}
}
for (i= 0; i < oRs.Fields.Count; i++)
{
var kolomnaam = oRs.Fields(i).Name.toLowerCase();
var colpar = {caption: kolomnaam,
content: kolomnaam,
datatype: null,
align: null
}
var kolomtype = oRs.Fields(i).Type;
if (kolomtype == adInteger || kolomtype == adDecimal)
{
colpar.datatype = 'number';
}
else if (kolomtype == adCurrency || kolomtype == adNumeric || kolomtype == adVarNumeric || kolomtype == adDouble)
{
colpar.align = "right"
colpar.content = fnfnmyFloat(kolomnaam);
}
else if (kolomtype == adDBTimeStamp)
{
colpar.datatype = 'datetime'; // ??
}
rst.addColumn(new Column(colpar));
}
var cnt = rst.processResultset();
if (cnt == 1)
{
%><script>fliptable()</script><%
}
%>
</body>
<div id="result">
<iframe width="100%" height="100%"
src="../Shared/empty.asp"
name="workFrame" id="workFrame"
onload="FcltMgr.iframeLoaded(this)"
frameborder="0" scrolling="no">
</iframe>
</div>
</body>
</html>