STCH#51457 -- Strukton koppeling voor Sitech

svn path=/Website/branches/v2017.2/; revision=36485
This commit is contained in:
Robin Stoker
2018-01-04 09:50:51 +00:00
parent 36e33be7cf
commit 5546cb745c

View File

@@ -0,0 +1,139 @@
// GetStruktonStatus.js
// Haalt statuswijzigingen op van Strukton opdrachten binnen een opgegeven tijdsinterval.
// Dit interval wordt opgeslagen in de database. Kan daarna via GEN_IMPORT ingelezen worden
//
// $Revision$
// $Id$
//
// Opzet in kader van AASA#
// Twee parameters: UDL voor database connectie en optioneel proxy-ip
var str = WScript.Arguments(0); // udlpath
var prs_bedrijf_key = WScript.Arguments(1); // prs_bedrijf_key
function GetStruktonStatus()
{
var XMLReq= "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\">"
+" <soapenv:Header/>"
+" <soapenv:Body>"
+" <GetServiceRequestStatus>"
+" <Status>"
+" <CustomerID>" + prs_overeenkomst_nr + "</CustomerID>"
+" <ReferenceID></ReferenceID>"
+" <ServiceRequestID></ServiceRequestID>"
+" <BeginDateTime>"+ laatste_sync +"</BeginDateTime>"
+" <EndDateTime>"+ nieuwe_sync +"</EndDateTime>"
+" </Status>"
+" </GetServiceRequestStatus>"
+" </soapenv:Body>"
+"</soapenv:Envelope>";
WScript.Echo("Bericht = " + XMLReq);
WScript.Echo("Login = " + username);
//WScript.Echo("Wachtwoord = " + password);
var objXMLHTTP = new ActiveXObject("MSXML2.ServerXMLHTTP.6.0")
/* objXMLHTTP.open("POST",
"https://b2bdev.ws.strukton.com:443/XISOAPAdapter/MessageServlet?channel=Facilitor:BS_ServiceRequest:S_WS_STATUS",
false,
"Facilitor",
"Facilit0r!");*/
objXMLHTTP.open("POST",
mldorder_adres,
false,
username,
password);
objXMLHTTP.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
if (order_certificate)
{
WScript.Echo("Certificaatnaam = " + order_certificate);
var SXH_OPTION_SELECT_CLIENT_SSL_CERT = 3;
objXMLHTTP.setOption(SXH_OPTION_SELECT_CLIENT_SSL_CERT) = order_certificate;
}
objXMLHTTP.send(XMLReq);
dataReceived = false;
if (objXMLHTTP.status==200)
{ // Geldigheid XML wordt gecontroleerd door GEN_IMPORT
WScript.Echo("Gelukt, status = " + objXMLHTTP.status);
responseText = "" + objXMLHTTP.responseText;
if (responseText.indexOf("<ErrorLog><Note>Resultaatset bevat geen records</Note></ErrorLog>") == -1) {
dataReceived = true;
oStream = new ActiveXObject("ADODB.Stream");
oStream.Open();
oStream.Type = 1; // adTypeBinary
oStream.Write(objXMLHTTP.responseBody); // responseText geeft encoding problemen!
oStream.SaveToFile (fileName, 2); // adSaveCreateOverWrite
oStream.Close();
}
sql = "UPDATE prs_kenmerklink SET prs_kenmerklink_waarde = '" + nieuwe_ts + "' WHERE prs_kenmerklink_key = " + prs_kenmerklink_key;
WScript.Echo (sql);
Oracle.Execute(sql);
}
else
{
WScript.Echo("Mislukt, status = " + objXMLHTTP.status);
WScript.Echo(objXMLHTTP.statusText);
}
return dataReceived;
}
var udlstr = 'File Name='+str;
var Oracle = new ActiveXObject("ADODB.Connection");
Oracle.Open(udlstr);
// normaal halen we intervallen van 15 minuten op. Als de koppeling er een tijdje uit gelegen heeft kan dit problemen opleveren. Daarom
// wordt het interval maximaal 4 uur.
var sql = "ALTER SESSION SET nls_territory='AMERICA'";
Oracle.Execute(sql)
sql = "SELECT b.prs_bedrijf_naam, "
+ " ba.prs_bedrijfadres_certificate, "
+ " ba.prs_bedrijfadres_username, "
+ " ba.prs_bedrijfadres_password, "
+ " ba.prs_bedrijfadres_url, "
+ " b.prs_overeenkomst_nr, "
+ " decode (laatste_sync_ts, null, null, to_char(laatste_sync_ts, 'yyyy-mm-dd')||'T'||to_char(laatste_sync_ts, 'hh24:mi:ss')) laatste_sync,"
+ " to_char(nieuwe_sync_ts, 'yyyy-mm-dd') || 'T' || to_char(nieuwe_sync_ts, 'hh24:mi:ss') nieuwe_sync, "
+ " to_char(nieuwe_sync_ts, 'yyyy-mm-dd hh24:mi:ss') nieuwe_ts,"
+ " prs_kenmerklink_key"
+ " FROM prs_bedrijf b, prs_bedrijfadres ba,"
+ " (SELECT prs_link_key, prs_kenmerklink_key, "
+ " fac.safe_to_date (prs_kenmerklink_waarde, 'yyyy-mm-dd hh24:mi:ss') laatste_sync_ts, "
+ " LEAST ( "
+ " fac.safe_to_date (prs_kenmerklink_waarde, 'yyyy-mm-dd hh24:mi:ss') + (4 / 24), " // vorige tijdstip + 4 uur, als we een tijd stil gestaan hebben.
+ " SYSDATE - (1 / 96)) nieuwe_sync_ts " // nu min een kwartier. Om sync problemen te voorkomen kijken we altijd een kwartier terug.
+ " FROM prs_kenmerklink "
+ " WHERE prs_kenmerk_key = 1) kl " // timestamp laatste synchronisatie yyyymmdd hh24mi
+ " WHERE b.prs_bedrijf_key = " + prs_bedrijf_key
+ " AND b.prs_bedrijf_key = ba.prs_bedrijf_key"
+ " AND b.prs_bedrijf_key = kl.prs_link_key"
+ " AND ba.prs_bedrijfadres_type = 'O'";
WScript.Echo (sql);
WScript.Echo(new Date());
try
{
var oRs = Oracle.Execute(sql);
var fileName = "strukton.xml";
mldorder_adres = "" + oRs("prs_bedrijfadres_url").Value;
mldorder_adres = mldorder_adres.replace("CREATE", "STATUS");
order_certificate = "" + oRs("prs_bedrijfadres_certificate").Value;
username = oRs("prs_bedrijfadres_username").Value;
password = oRs("prs_bedrijfadres_password").Value;
laatste_sync = oRs("laatste_sync").Value;
nieuwe_sync = oRs("nieuwe_sync").Value;
nieuwe_ts = oRs("nieuwe_ts").Value;
prs_overeenkomst_nr = oRs("prs_overeenkomst_nr").Value;
prs_kenmerklink_key = oRs("prs_kenmerklink_key").Value;
WScript.Echo("Inlezen statusberichten van bedrijf: " + oRs("prs_bedrijf_naam").Value + " via url: " + mldorder_adres)
oRs.close();
if (GetStruktonStatus()) WScript.Quit(0);
else WScript.Quit(1);
}
catch (e)
{
WScript.Echo("Serieuze fout in GetStruktonStatus.js: " + e.description)
WScript.Quit(1);
}