181 lines
8.3 KiB
Plaintext
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;
|
|
%> |