MARX#62647: Koppeling AX365 - Mareon (Push): gegevens/inrichting tbv 2e identity-server voor Saxton statusberichten + verbetering url StatusLog

svn path=/Mareon/trunk/; revision=49486
This commit is contained in:
Marcel Bourseau
2021-01-19 16:09:29 +00:00
parent 87346fcc2a
commit 0789f2cffc
5 changed files with 178 additions and 75 deletions

View File

@@ -1,47 +1,64 @@
// --------------------------------------------------------------------------------------
// A365_GetToken.js
// GetToken.js
// Copyright 2019 Facilitor. 053-4800 700, helpdesk@mareon.nl
// Written by MB (2019)
//
function A365_GetToken (){
return MARX_GetToken();
function A365_supplierservice_GetToken (){
var v_token;
v_token = MARX_GetToken(G_ID_ax365_supplierservice_url, G_ID_ax365_supplierservice_client_id, G_ID_ax365_supplierservice_client_secret, G_ID_ax365_supplierservice_grant_type, G_ID_ax365_supplierservice_resource, G_ID_ax365_supplierservice_scope);
WriteSupplierserviceToken2File(v_token);
return v_token;
}
function A2012_GetToken (){
return MARX_GetToken();
function A365_saxton_GetToken (){
var v_token;
v_token = MARX_GetToken(G_ID_saxton_url, G_ID_saxton_client_id, G_ID_saxton_client_secret, G_ID_saxton_grant_type, G_ID_saxton_resource, G_ID_saxton_scope);
WriteSaxtonToken2File(v_token);
return v_token;
}
function MARX_GetToken ()
function A2012_saxton_GetToken (){
var v_token;
v_token = MARX_GetToken(G_ID_saxton_url, G_ID_saxton_client_id, G_ID_saxton_client_secret, G_ID_saxton_grant_type, G_ID_saxton_resource, G_ID_saxton_scope);
WriteSaxtonToken2File(v_token);
return v_token;
}
function MARX_GetToken (v_url, v_client_id, v_client_secret, v_grant_type, v_resource, v_scope)
{
l_request_body = "client_id=" + G_ID_client_id
+ "&client_secret=" + G_ID_client_secret
+ "&grant_type=" + G_ID_grant_type;
// G_ID_resource is optioneel, in geval van AX365 is derze wel gevuld (en in AX2012 niet)
if (G_ID_resource != "")
l_request_body = l_request_body + "&resource=" + G_ID_resource;
// G_ID_scope is optioneel, in geval van AX365 is deze LEEG en in AX2012 is deze gevuld
if (G_ID_scope != "")
l_request_body = l_request_body + "&scope=" + G_ID_scope;
l_request_body = "client_id=" + v_client_id
+ "&client_secret=" + v_client_secret
+ "&grant_type=" + v_grant_type;
// v_resource is optioneel, in geval van AX365 is deze WEL gevuld (en in AX2012 NIET)
if (v_resource != "")
l_request_body = l_request_body + "&resource=" + v_resource;
// v_scope is optioneel, in geval van AX365 is deze LEEG en in AX2012 is deze WEL gevuld
if (v_scope != "")
l_request_body = l_request_body + "&scope=" + v_scope;
var v_type = 1;
var v_contenttype = "application/x-www-form-urlencoded";
__Log("MARX_GetToken: Nieuwe token opgehaald" ,2);
var v_resp = apiIDentity(G_ID_url, l_request_body, v_type, v_contenttype, 0);
var v_resp = apiIDentity(v_url, l_request_body, v_type, v_contenttype, 0);
var json_resp = JSON.parse(v_resp);
var v_token = json_resp.access_token;
WriteToken2File(v_token);
return v_token;
}
function GetTokenFolder()
function GetSupplierserviceTokenFolder()
{
return "MStoken/";
}
function GetSaxtonTokenFolder()
{
return "SAXtoken/";
}
function GetTokenFileName()
{
return G_bedrijf_key;
@@ -52,17 +69,36 @@ function GetTokenFileExt()
return "txt";
}
function WriteToken2File(v_token){
var v_token_folder = GetTokenFolder();
function WriteSupplierserviceToken2File(v_token){
var v_token_folder = GetSupplierserviceTokenFolder();
if (!fso.FolderExists(v_token_folder)) fso.CreateFolder(v_token_folder);
var v_token_filenaam = GetTokenFileName();
var v_token_file_ext = GetTokenFileExt();
WriteText2File(v_token_folder, v_token_filenaam, v_token_file_ext, v_token, 0, 0);
}
function ReadTokenFromFile(){
function WriteSaxtonToken2File(v_token){
var v_token_folder = GetSaxtonTokenFolder();
if (!fso.FolderExists(v_token_folder)) fso.CreateFolder(v_token_folder);
var v_token_filenaam = GetTokenFileName();
var v_token_file_ext = GetTokenFileExt();
WriteText2File(v_token_folder, v_token_filenaam, v_token_file_ext, v_token, 0, 0);
}
function ReadSupplierserviceTokenFromFile(){
var l_token = "";
var v_token_folder = GetTokenFolder();
var v_token_folder = GetSupplierserviceTokenFolder();
var v_token_filenaam = GetTokenFileName();
var v_token_file_ext = GetTokenFileExt();
var v_file = v_token_folder + v_token_filenaam + "." + v_token_file_ext
l_token = ReadLineAsciiFile (v_file);
return l_token;
}
function ReadSaxtonTokenFromFile(){
var l_token = "";
var v_token_folder = GetSaxtonTokenFolder();
var v_token_filenaam = GetTokenFileName();
var v_token_file_ext = GetTokenFileExt();
var v_file = v_token_folder + v_token_filenaam + "." + v_token_file_ext

View File

@@ -42,7 +42,7 @@ function A365_StatusLog(v_company_id, v_statuscode, v_purchId, v_extraInfo, v_da
if (v_communicatie_logboek_vereist == 0 || G_mar_communicatielogboek == 1){
// Gedeelte van het URL pad naar de webservice "StatusLog"
var v_API = "api/v0.1/" + v_company_id + "/StatusLog";
var v_API = "api/v0.1/" + v_company_id + "/Maintenance/StatusLog";
if (v_dateTime == "-1"){

View File

@@ -119,6 +119,11 @@ function FCLT_2_AX2012_AcceptRefuseOpdracht(){
F_GetOpdrachten_AcceptRefuse();
}
// ----------------------------- AX365 functies -----------------------------------------
function FCLT_2_AX365_OpdrachtStatus_Bijlagen(){
F_GetOpdrachten_Statussen();
}
// ----------------------------- Tobias functies -----------------------------------------
function Tobias_2_FCLT_Opdrachten(){
T_GetOpdrachten();
@@ -342,11 +347,11 @@ function Ax2012_2_FACILITOR()
//Bijlages naar AX2012 kan alleen via Token icm Saxton AX-webservice(s). Op soortgelijke (bijna identieke wijze) als AX365.
//---------------
__Log("*** START AX2012 --> FCLT : Get Token ***", 2);
G_Token = ReadTokenFromFile();
__Log("G_Token ReadTokenFromFile:" + G_Token, 4);
if (G_Token == ""){
__Log("G_Token ReadTokenFromFile is leeg:", 4);
G_Token = A2012_GetToken();
G_Token_saxton = ReadSaxtonTokenFromFile();
__Log("G_Token_saxton ReadSaxtonTokenFromFile:" + G_Token_saxton, 4);
if (G_Token_saxton == ""){
__Log("G_Token_saxton ReadSaxtonTokenFromFile is leeg:", 4);
G_Token_saxton = A2012_saxton_GetToken();
}
__Log("*** END Get Token", 2);
//---------------
@@ -384,18 +389,47 @@ function Ax2012_2_FACILITOR()
function AX365_2_FACILITOR()
{
__Log("*** START AX365 --> FCLT : Get Token ***", 2);
if (G_ID_saxton_url != "" && G_push_notifyqueue == "1")
{
__Log("*** START AX365 --> FCLT : Get AX Saxton Token ***", 2);
G_Token_saxton = ReadSaxtonTokenFromFile();
__Log("G_Token_saxton ReadSaxtonTokenFromFile:" + G_Token_saxton, 4);
if (G_Token_saxton == ""){
__Log("G_Token_saxton ReadSupplierserviceTokenFromFile is leeg:", 4);
G_Token_saxton = A365_saxton_GetToken();
}
__Log("*** END Get AX Saxton Token", 2);
// Statusinformatie en evt bijlagen van Mareon -> AX365
__Log("*** START FCLT --> AX365 : Verwerken van ALLE opdrachtstatussen + bijlagen uit Mareon Facilitor naar AX365 obv notifyqueue ***", 2);
FCLT_2_AX365_OpdrachtStatus_Bijlagen();
__Log("*** END", 2);
}
else{
__Log("*** AX365: Status berichten NIET ingesteld", 2)
}
if (G_ID_ax365_supplierservice_url != "")
{
__Log("*** START AX365 --> FCLT : Get Supplierservice Token ***", 2);
G_Token_supplierservice = ReadSupplierserviceTokenFromFile();
__Log("G_Token_supplierservice ReadSupplierserviceTokenFromFile:" + G_Token_supplierservice, 4);
if (G_Token_supplierservice == ""){
__Log("G_Token_supplierservice ReadSupplierserviceTokenFromFile is leeg:", 4);
G_Token_supplierservice = A365_supplierservice_GetToken();
}
__Log("*** END Get Supplierservice Token", 2);
// Facturen van Mareon -> AX365, in de functie FACILITOR_2_Xtractor wordt zelf bekeken of dit WEL/NIET via pushnotificatie verloopt...
FACILITOR_2_Xtractor();
}
else{
__Log("*** AX365: Facturen koppeling NIET ingesteld", 2);
}
G_Token = ReadTokenFromFile();
__Log("G_Token ReadTokenFromFile:" + G_Token, 4);
if (G_Token == ""){
__Log("G_Token ReadTokenFromFile is leeg:", 4);
G_Token = A365_GetToken();
}
__Log("*** END Get Token", 2);
// Facturen van Mareon -> AX365
FACILITOR_2_Xtractor();
}
function Tobias_2_FACILITOR()
@@ -591,8 +625,12 @@ var G_ax2012_url_serviceax = Read_Ini_Setting("ax2012","url_serviceax");
var G_ax2012_logonAs = Read_Ini_Setting("ax2012", "logonAs");
var G_ax2012_bcProxy = Read_Ini_Setting("ax2012", "bcProxy");
var G_ax365_url = Read_Ini_Setting("ax365","url");
var G_Token = "";
var G_ax365_url_supplierservice = Read_Ini_Setting("ax365","url");
var G_Token_supplierservice = "";
var G_ax365_url_serviceax = Read_Ini_Setting("ax365","url_serviceax");
var G_Token_saxton = "";
// In een (1) sync sessie mogen er max 3 x een poging worden gedaan (= eigen keuze) om een Token op te halen indien deze expired zou zijn (om niet in oneindige loop te raken).
var G_AX365_Allowed_Get_Token = 3;
@@ -612,13 +650,22 @@ var G_pdf_xtractorfolder = Read_Ini_Setting("xtractor","pdffolder");
var G_ax_succeededfolder = Read_Ini_Setting("xtractor", "succeededfolder");
var G_ax_rejectedfolder = Read_Ini_Setting("xtractor", "rejectedfolder");
// Microsoft Token instellingen
var G_ID_url = Read_Ini_Setting("identityserver","token/url");
var G_ID_client_id = Read_Ini_Setting("identityserver","token/client_id");
var G_ID_client_secret = Read_Ini_Setting("identityserver","token/client_secret");
var G_ID_grant_type = Read_Ini_Setting("identityserver","token/grant_type");
var G_ID_resource = Read_Ini_Setting("identityserver","token/resource");
var G_ID_scope = Read_Ini_Setting("identityserver","token/scope");
// Identity Token instellingen voor de AX Saxton webservice 'CustomerPortalAX'
var G_ID_saxton_url = Read_Ini_Setting("identityserver","token/url");
var G_ID_saxton_client_id = Read_Ini_Setting("identityserver","token/client_id");
var G_ID_saxton_client_secret = Read_Ini_Setting("identityserver","token/client_secret");
var G_ID_saxton_grant_type = Read_Ini_Setting("identityserver","token/grant_type");
var G_ID_saxton_resource = Read_Ini_Setting("identityserver","token/resource");
var G_ID_saxton_scope = Read_Ini_Setting("identityserver","token/scope");
// Identity Token instellingen voor de AX365 webservice 'SupplierService' MSMSupplierPortal
var G_ID_ax365_supplierservice_url = Read_Ini_Setting("ax365","supplierservice/identityserver/token/url");
var G_ID_ax365_supplierservice_client_id = Read_Ini_Setting("ax365","supplierservice/identityserver/token/client_id");
var G_ID_ax365_supplierservice_client_secret = Read_Ini_Setting("ax365","supplierservice/identityserver/token/client_secret");
var G_ID_ax365_supplierservice_grant_type = Read_Ini_Setting("ax365","supplierservice/identityserver/token/grant_type");
var G_ID_ax365_supplierservice_resource = Read_Ini_Setting("ax365","supplierservice/identityserver/token/resource");
var G_ID_ax365_supplierservice_scope = Read_Ini_Setting("ax365","supplierservice/identityserver/token/scope");
// Mareon instellingen, de term (XML node) "facilitor" is ivm historie cq. alle locale installaties bij woco's niet 1-2-3 aan te passen in de veel logischere term mareon.
var G_marx_url = Read_Ini_Setting("facilitor","url");
@@ -644,7 +691,7 @@ var G_mar_timeout = 0; //initieel 1e keer.
__Log("***XML- rems/opdrachtenfolder: " + G_rems_opdracht_xmlfolder, 1);
__Log("***XML- rems/opdrachtstatusfolder: " + G_rems_opdrachtstatus_xmlfolder, 1);
__Log("***XML- rems/facturenfolder: " + G_rems_facturen_xmlfolder, 1);
__Log("***XML- microsoft/token/url: " + G_ID_url, 1);
__Log("***XML- identityserver/token/url: " + G_ID_saxton_url, 1);
__Log("***XML- mareon/url: " + G_marx_url, 1);
__Log("***XML- xtractor/xmlfolder: " + G_ax_xtractorfolder, 1);
__Log("***XML- xtractor/pdffolder: " + G_pdf_xtractorfolder, 1);
@@ -721,33 +768,33 @@ var G_mar_timeout = 0; //initieel 1e keer.
}
var v_ID_url = l_array[20];
if (v_ID_url != ""){
G_ID_url = v_ID_url;
__Log("***XML- G_ID_url is overruled by Mareon", 3);
G_ID_saxton_url = v_ID_url;
__Log("***XML- G_ID_saxton_url is overruled by Mareon", 3);
}
var v_ID_client_id = l_array[21];
if (v_ID_client_id != ""){
G_ID_client_id = v_ID_client_id;
__Log("***XML- G_ID_client_id is overruled by Mareon", 3);
G_ID_saxton_client_id = v_ID_client_id;
__Log("***XML- G_ID_saxton_client_id is overruled by Mareon", 3);
}
var v_ID_client_secret = l_array[22];
if (v_ID_client_secret != ""){
G_ID_client_secret = v_ID_client_secret;
__Log("***XML- G_ID_client_secret is overruled by Mareon", 3);
G_ID_saxton_client_secret = v_ID_client_secret;
__Log("***XML- G_ID_saxton_client_secret is overruled by Mareon", 3);
}
var v_ID_grant_type = l_array[23];
if (v_ID_grant_type != ""){
G_ID_grant_type = v_ID_grant_type;
__Log("***XML- G_ID_grant_type is overruled by Mareon", 3);
G_ID_saxton_grant_type = v_ID_grant_type;
__Log("***XML- G_ID_saxton_grant_type is overruled by Mareon", 3);
}
var v_ID_resource = l_array[24];
if (v_ID_resource != ""){
G_ID_resource = v_ID_resource;
__Log("***XML- G_ID_resource is overruled by Mareon", 3);
G_ID_saxton_resource = v_ID_resource;
__Log("***XML- G_ID_saxton_resource is overruled by Mareon", 3);
}
var v_ID_scope = l_array[25];
if (v_ID_scope != ""){
G_ID_scope = v_ID_scope;
__Log("***XML- G_ID_scope is overruled by Mareon", 3);
G_ID_saxton_scope = v_ID_scope;
__Log("***XML- G_ID_saxton_scope is overruled by Mareon", 3);
}

View File

@@ -27,7 +27,7 @@
<ax2012>
<!-- URL van de AX webservice 'SupplierService' -->
<url>http://emmpc0003.sg.nl:8087/MicrosoftDynamicsAXAif60/MSMSupplierPortalHttp/xppservice.svc</url>
<!-- URL van de AX webservice 'CustomerPortalAX' -->
<!-- URL van de AX Saxton webservice 'CustomerPortalAX' -->
<url_serviceax>https://saxton-test.aareoncloud.nl</url_serviceax>
<!-- AX2012 Logon as -->
<logonAs>sg\robb</logonAs>
@@ -38,12 +38,28 @@
<opdr_today></opdr_today><!-- opdr_today is optioneel en default empty (empty = alle opdrachten tot en met vandaag, 1 = alle opdrachten tot met gisteren, 2 = eergisteren etc) -->
</ax2012>
<ax365>
<!-- URL van de AX webservice 'SupplierService' -->
<!-- URL van de AX webservice 'SupplierService' MSMSupplierPortal -->
<url>https://artest-12e7cba49ebd525c5eaos.cloudax.dynamics.com/soap/services/MSMSupplierPortal</url>
<!-- Identity-server behorende bij de 'SupplierService' MSMSupplierPortal -->
<supplierservice>
<identityserver>
<token>
<url></url>
<client_id></client_id>
<client_secret></client_secret>
<grant_type></grant_type>
<resource></resource>
<scope></scope>
</token>
</identityserver>
</supplierservice>
<!-- URL van de AX Saxton webservice 'CustomerPortalAX' -->
<url_serviceax>https://artest-12e7cba49ebd525c5eaos.cloudax.dynamics.com</url_serviceax>
<!-- Aantal dagen in het verleden om open opdrachten op te halen -->
<opdr_past_days>1</opdr_past_days><!-- opdr_past_days is default 1 (alle opdrachten vanaf gisteren) -->
<opdr_today></opdr_today><!-- opdr_today is optioneel en default empty (empty = alle opdrachten tot en met vandaag, 1 = alle opdrachten tot met gisteren, 2 = eergisteren etc) -->
</ax365>
<!-- Identity-server behorende bij de AX Saxton webservice 'CustomerPortalAX' van ax2012 of ax365 -->
<identityserver>
<token>
<url></url>

View File

@@ -16,7 +16,7 @@ function AX_or_Tobias(){
if (G_ax_url != "") return "A";
else {if (G_tobias_url != "") return "T";
else {if (G_ax2012_url != "") return "A12";
else {if (G_ax365_url != "") return "A365";
else {if (G_ax365_url_supplierservice != "" || G_ax365_url_serviceax != "") return "A365";
else {if (G_fclt_url != "") return "F";
else {if (G_rems_opdracht_xmlfolder != "") return "R";
else return "";
@@ -284,10 +284,10 @@ function apiAX_GENERAL (v_API, v_req, v_type, v_soapAction, v_discard_active_abo
if (AX_or_Tobias() == "A365")
{
switch (v_soort_api){
case 1: var v_url = G_ax365_url; break;
case 2: var v_url = G_ax365_url + "/" + v_API; break;
case 1: var v_url = G_ax365_url_supplierservice; var v_token = G_Token_supplierservice; break;
case 2: var v_url = G_ax365_url_serviceax + "/" + v_API; var v_token = G_Token_saxton; break;
}
l_result = api2_AX365_inner(v_url, v_API, v_req, v_type, v_soapAction, v_discard_active_abort, v_soort_api);
l_result = api2_AX365_inner(v_url, v_API, v_req, v_type, v_soapAction, v_discard_active_abort, v_soort_api, v_token);
}
if (AX_or_Tobias() == "T")
{
@@ -528,8 +528,8 @@ function api2_AX2012_inner (v_Url, v_API, v_req, v_type, v_soapAction, v_discard
}
if (v_soort_api == 2){
xmlhttp.setRequestHeader("Content-Type", "application/json"),
__Log("api2_AX2012_inner G_Token: " + G_Token, 4);
xmlhttp.setRequestHeader("Authorization", "Bearer " + G_Token);
__Log("api2_AX2012_inner G_Token_saxton: " + G_Token_saxton, 4);
xmlhttp.setRequestHeader("Authorization", "Bearer " + G_Token_saxton);
//xmlhttp.setRequestHeader("SOAPAction", '"http://tempuri.org/'+v_soapAction+'"');
var v_msg = api2_AX2012_RequestJSON(v_Url, v_API, v_req);
}
@@ -598,7 +598,7 @@ function api2_AX2012_inner (v_Url, v_API, v_req, v_type, v_soapAction, v_discard
// Forbidden gevonden, we doen een retry, door een nieuwe token op te halen / op te vragen, max. 3 x in een sync (G_AX365_Allowed_Get_Token > 0)
if (G_AX365_Allowed_Get_Token > 0){
G_AX365_Allowed_Get_Token = G_AX365_Allowed_Get_Token - 1;
G_Token = A365_GetToken();
G_Token_saxton = A2012_saxton_GetToken();
// We mogen nu de functie zelf nog eens aanroepen (iteratief).
l_result = api2_AX2012_inner (v_Url, v_API, v_req, v_type, v_soapAction, v_discard_active_abort, v_soort_api);
return l_result;
@@ -626,7 +626,7 @@ function api2_AX2012_inner (v_Url, v_API, v_req, v_type, v_soapAction, v_discard
// api_status_code: 0 of 1, 0 = fout gegaan, 1 = goed gegaan
// api_status_message: statustekst behorende bij status_code (http.statusText)
// api_response_message: response-berecht van webservice (api) die wordt aangeroepen.
function api2_AX365_inner (v_Url, v_API, v_req, v_type, v_soapAction, v_discard_active_abort, v_soort_api)
function api2_AX365_inner (v_Url, v_API, v_req, v_type, v_soapAction, v_discard_active_abort, v_soort_api, v_token)
{
@@ -648,8 +648,8 @@ function api2_AX365_inner (v_Url, v_API, v_req, v_type, v_soapAction, v_discard_
xmlhttp.open("POST", v_Url, false);
xmlhttp.setRequestHeader("Content-Type", "text/xml");
__Log("api2_AX365_inner G_Token: " + G_Token, 4);
xmlhttp.setRequestHeader("Authorization", "Bearer " + G_Token);
__Log("api2_AX365_inner v_token: " + v_token, 4);
xmlhttp.setRequestHeader("Authorization", "Bearer " + v_token);
xmlhttp.setRequestHeader("SOAPAction", '"http://tempuri.org/'+v_soapAction+'"');
var v_msg = api2_AX365_RequestXML(v_Url, v_API, v_req);
@@ -717,9 +717,13 @@ function api2_AX365_inner (v_Url, v_API, v_req, v_type, v_soapAction, v_discard_
// Forbidden gevonden, we doen een retry, door een nieuwe token op te halen / op te vragen, max. 3 x in een sync (G_AX365_Allowed_Get_Token > 0)
if (G_AX365_Allowed_Get_Token > 0){
G_AX365_Allowed_Get_Token = G_AX365_Allowed_Get_Token - 1;
G_Token = A365_GetToken();
switch (v_soort_api){
case 1: G_Token_supplierservice = A365_supplierservice_GetToken(); var l_token = G_Token_supplierservice; break;
case 2: G_Token_saxton = A2012_saxton_GetToken(); var l_token = G_Token_saxton; break;
}
// We mogen nu de functie zelf nog eens aanroepen (iteratief).
l_result = api2_AX365_inner (v_Url, v_API, v_req, v_type, v_soapAction, v_discard_active_abort, v_soort_api);
l_result = api2_AX365_inner (v_Url, v_API, v_req, v_type, v_soapAction, v_discard_active_abort, v_soort_api, l_token);
return l_result;
}
else{