Files
Facilitor/APPL/BES/DynArtikelInfo.asp
Jos Groot Lipman e96d7af539 ALLI#35808 Fout antwoord leverancier agressiever loggen
svn path=/Website/trunk/; revision=28501
2016-03-16 15:16:19 +00:00

181 lines
8.3 KiB
Plaintext

<%@language = "javascript" %>
<% /*
$Revision$
$Id$
File: DynArtikelInfo.asp
Description: Haal dynamische artikel informatie op (bijvoorbeeld: voorraad)
bij de leverancier site
Let op: de web(!)server moet dan wel naar buiten kunnen
(proxy?/ Certificaten?)
Parameters: srtdeel_key: srddeel_key van het artikel
Context: sel_items_tab.js/fetchArtikelInfo-Ajax
Result: json data
stock: number
stockDate: waarop leverancier in zijn magazijn heeft gekeken
Note:
*/
var JSON_Result = true;
%>
<!-- #include file="../Shared/common.inc" -->
<!-- #include file="../Shared/json2.js" -->
<%
Response.Expires = -1;
var SXH_PROXY_SET_PROXY = 2;
var SXH_OPTION_SELECT_CLIENT_SSL_CERT=3;
function getSupplierStock(pGroupNr, pArticleNr, xmlurl, xslPath, certificateName)
{
var http_request = Server.CreateObject("WinHTTP.WinHTTPRequest.5.1");
if (S("ProxyServerIPAddress"))
{
http_request.setProxy(SXH_PROXY_SET_PROXY, S("ProxyServerIPAddress"));
}
if (certificateName != null) // Let wel: zorg dat IUSR (of: geauthenticeerde gebruiker)
{ // Rechten heeft op het certificaat!
__Log("Zetten certificaat: " + certificateName);
http_request.setOption(SXH_OPTION_SELECT_CLIENT_SSL_CERT, certificateName);
}
var xmlReq = Server.CreateObject("MSXML2.DOMDocument.6.0");
xmlReq.resolveExternals = false; // van mij hoef je geen DTD's te controleren
xmlReq.validateOnParse = false; // van mij hoef je geen DTD's te controleren
xmlReq.appendChild(xmlReq.createProcessingInstruction("xml", "version=\"1.0\" encoding=\"UTF-8\""))
rootrootElement = xmlReq.createElement("facilitor");
rootElement = xmlReq.createElement("stock_request");
elementPart = xmlReq.createElement("part");
elementGroup = xmlReq.createElement("group");
elementGroupText = xmlReq.createTextNode(pGroupNr);
elementGroup.appendChild(elementGroupText);
elementPart.appendChild(elementGroup);
elementNumber = xmlReq.createElement("number");
elementNumberText = xmlReq.createTextNode(pArticleNr);
elementNumber.appendChild(elementNumberText);
elementPart.appendChild(elementNumber);
rootElement.appendChild(elementPart);
rootrootElement.appendChild(rootElement);
xmlReq.appendChild(rootrootElement);
// Transformeer met de leverancier specifieke stylesheet
if (xslPath)
{
var xslDoc = Server.CreateObject("MSXML2.DOMDocument.6.0");
__Log("Loading xslPath: " + Server.MapPath(custpath + "/" + xslPath));
xslDoc.resolveExternals = false; // van mij hoef je geen DTD's te controleren
xslDoc.validateOnParse = false; // van mij hoef je geen DTD's te controleren
xslDoc.load(Server.MapPath(custpath + "/" + xslPath));
xmlReq.transformNodeToObject(xslDoc, xmlReq);
}
__Log("Posting to url: " + xmlurl);
http_request.open("POST", xmlurl, false); // Synchroon
http_request.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
__SafeLog("Posting naar leverancier:<br>" + Server.HTMLEncode(xmlReq.xml));
http_request.send(xmlReq.xml);
if (http_request.status != 200)
{
__Log("getSupplierStock status: " + http_request.status);
return null;
}
var xmlResp = Server.CreateObject("Msxml2.DOMDocument.6.0");
xmlResp.resolveExternals = false; // van mij hoef je geen DTD's te controleren
xmlResp.validateOnParse = false; // van mij hoef je geen DTD's te controleren
__SafeLog("Response van leverancier:<br>" + Server.HTMLEncode(http_request.ResponseText));
xmlResp.loadXML(http_request.ResponseText); // for parsing
if (xmlResp.parseError.errorCode != 0)
{
__SafeDoLog("Response van leverancier:<br>" + Server.HTMLEncode(http_request.ResponseText));
__SafeDoLog("Error laden XML antwoord {0}<br>Reason: {1}<br>Regel: {2}({3})"
.format(xmlResp.parseError.errorCode, xmlResp.parseError.reason, xmlResp.parseError.line, xmlResp.parseError.filepos), "#f00");
}
// Transformeer met de leverancier specifieke stylesheet
if (xslPath)
{
var xslDoc = Server.CreateObject("MSXML2.DOMDocument.6.0");
__Log("Loading xslPath: " + Server.MapPath(custpath + "/" + xslPath));
xslDoc.resolveExternals = false; // van mij hoef je geen DTD's te controleren
xslDoc.validateOnParse = false; // van mij hoef je geen DTD's te controleren
xslDoc.load(Server.MapPath(custpath + "/" + xslPath));
xmlResp.transformNodeToObject(xslDoc, xmlResp);
__SafeLog("Stock response transformed: " + Server.HTMLEncode(xmlResp.xml));
}
// Zoek ons artikel terug in de response (voor het theoretische geval dat
// de leverancier meer terugstuurd)
var strQuery = "facilitor/stock_response/part[number='" + safe.htmlattr(pArticleNr) + "']/amount";
objStock = xmlResp.selectSingleNode(strQuery);
if (!objStock)
{
__Log("getSupplierStock: " + strQuery + " not found in (transformed) XML");
return null;
}
else
{
result = { stock: objStock.text };
strQuery = "stock_response/part[number='" + safe.htmlattr(pArticleNr) + "']/infotext";
objInfotext = xmlResp.selectSingleNode(strQuery);
if (objInfotext)
result.infotext = objInfotext.text;
// We doen nog niets met infohtml maar leggen alvast de basis
strQuery = "stock_response/part[number='" + safe.htmlattr(pArticleNr) + "']/infohtml";
objInfohtml = xmlResp.selectSingleNode(strQuery);
if (objInfohtml)
result.infohtml = objInfohtml.text;
return result;
}
}
var srtdeel_key = getQParamInt("srtdeel_key");
var sql = "SELECT bes_srtdeel_nr, " + lcl.xsqla('bes_srtgroep_omschrijving','g.bes_srtgroep_key')
+ " , prs_bedrijf_xmldetails_loc, prs_bedrijfadres_xsl"
+ " , prs_bedrijf_details_loc, prs_bedrijfadres_certificate"
+ " , d.bes_srtdeel_maxbestel maxbestel"
+ " FROM bes_srtdeel d"
+ " , bes_srtgroep g"
+ " , prs_bedrijf be"
+ " , prs_bedrijfadres ba"
+ " WHERE d.bes_srtdeel_key = " + srtdeel_key
+ " AND d.bes_srtgroep_key = g.bes_srtgroep_key"
+ " AND ba.prs_bedrijf_key(+) = be.prs_bedrijf_key"
+ " AND ba.prs_bedrijfadres_type(+) = 'B'"
+ " AND d.prs_bedrijf_key = be.prs_bedrijf_key"
var oRs = Oracle.Execute(sql);
if (oRs("prs_bedrijf_xmldetails_loc").Value == null) // Leverancier ondersteunt dat niet
{
Response.Write(JSON.stringify({})); // We weten niets
Response.End;
}
var res = getSupplierStock(oRs("bes_srtgroep_omschrijving").Value,
oRs("bes_srtdeel_nr").Value,
oRs("prs_bedrijf_xmldetails_loc").Value,
oRs("prs_bedrijfadres_xsl").Value,
oRs("prs_bedrijfadres_certificate").Value
)
if (!res) // Geen antwoord?
{
Response.Write(JSON.stringify({})); // We weten niets
Response.End;
}
result = { stock: res.stock,
maxbestel: oRs("maxbestel").Value,
requestDate: new Date()
};
if (oRs("prs_bedrijf_details_loc").Value)
result.details_url = oRs("prs_bedrijf_details_loc").Value + oRs("bes_srtdeel_nr").Value;
Response.Write(JSON.stringify(result));
Response.End;
%>