MARX#84162 Mareon SYNC sequentieel per klant - SYNC v 1.92

svn path=/Mareon/trunk/; revision=65712
This commit is contained in:
Marcel Bourseau
2024-07-24 19:34:32 +00:00
parent 54293a1ae3
commit e3cc15a574
2 changed files with 210 additions and 155 deletions

View File

@@ -712,6 +712,45 @@ function FACILITOR_2_Xtractor()
__Log("*** END", 2);
}
function MARX_LOG_XML_SETTINGS()
{
__Log("***Mareon Adapter - versie: " + G_Mareon_Adapter, 1);
//Eerst de xml settings loggen
__Log("***XML- common/logging: " + G_log_level, 1);
__Log("***XML- common/multiplier_sec_elapsed: " + G_multiplier_sec_elapsed, 1);
__Log("***XML- common/parallelallowed: " + G_parallelallowed, 1);
__Log("***XML- common/clean_log_days: " + G_log_clean_days, 1);
__Log("***XML- ax/url(SupplierService): " + G_ax_url, 1);
__Log("***XML- ax/url(ServiceAX): " + G_ax_url_serviceax, 1);
__Log("***XML- ax2012/url(SupplierService): " + G_ax2012_url, 1);
__Log("***XML- ax2012/url(ServiceAX): " + G_ax2012_url_serviceax, 1);
if (G_proxy) __Log("***XML- AX365/proxy: " + G_proxy, 1);
__Log("***XML- ax365/url(SupplierService): " + G_ax365_url_supplierservice, 1);
__Log("***XML- ax365/url(ServiceAX): " + G_ax365_url_serviceax, 1);
__Log("***XML- tobias/url: " + G_tobias_url, 1);
__Log("***XML- facilitor/url: " + G_fclt_url, 1);
__Log("***XML- facilitor/factuur/xmlfolder: " + G_fclt_factuur_xmlfolder, 1);
__Log("***XML- facilitor/factuur/pdffolder: " + G_fclt_factuur_pdffolder, 1);
__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- twinq/url: " + G_twinq_url, 1);
__Log("***XML- thirdparty/id: " + G_3party_id, 1);
__Log("***XML- thirdparty/exportfolder: " + G_3party_export_folder, 1);
__Log("***XML- thirdparty/dico/httpheader/contenttype: " + G_3party_httpheader_contenttype, 1);
__Log("***XML- thirdparty/dico/version: " + G_3party_dico_version, 1);
__Log("***XML- thirdparty/dico/messageservice/version: " + G_3party_dico_ms_version, 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);
__Log("***XML- xtractor/succeededfolder: " + G_ax_succeededfolder, 1);
__Log("***XML- xtractor/rejectedfolder: " + G_ax_rejectedfolder, 1);
}
//-- Versie Mareon adapter
// 1.02 -- MARX#37375: Extreem veel API-aanroepen AX_OPDRACHTEN
// 1.10 -- MARX#39172: Koppeling AX2012 - Mareon
@@ -749,8 +788,9 @@ function FACILITOR_2_Xtractor()
// 1.80 -- MARX#81606: Signaleren dat een opdracht gewijzigd is (VM000000566278), t.b.v. (alleen) AX2012 is aanpassing in SYNC nodig (AX2009 worden geen updates meer gedaan, alle andere ERPs verlopen via pushprincipe en doen het)
// 1.90 -- MARX#69956: Notities bij opdrachten naar de opdrachtgever
// 1.91 -- MARX#84766: Viewpoint gevoelig voor HTTP-header "Content-Type"
// 1.92 -- MARX#84162 Mareon SYNC sequentieel per klant
var G_Mareon_Adapter = "1.91";
var G_Mareon_Adapter = "1.92";
//MARX#56643: Test Haagwonen inkoopordernummer ontbreekt in Mareon ION001753
var G_new_date = new Date();
@@ -774,11 +814,16 @@ var G_settings_xml_file = WScript.Arguments(0);
var G_log_level = Read_Ini_Setting("common","logging");
__Log("************************************************** START Mareon Adapter ***********************************************", 0);
var G_proxy = Read_Ini_Setting("common","proxy");
var G_multiplier_sec_elapsed = Read_Ini_Setting("common","multiplier_sec_elapsed");
if (!G_multiplier_sec_elapsed) G_multiplier_sec_elapsed = 3; //default is multiplier 3, m.a.w. als verstreken tijd minimaal 3x delta connect tijd is, dan mag er gesynct worden
var G_parallelallowed = Read_Ini_Setting("common","parallelallowed");
if (!G_parallelallowed) G_parallelallowed = 0;
var G_log_clean_days = Read_Ini_Setting("common","clean_log_days");
//MARX#76390 Kan oude logging van de SYNC adapter automatisch opgeruimd worden
//Defaultwaarde is 90 dagen, oftewel logbestanden worden zonder instelling van meer dan 3 maanden geleden opgeruimd.
//Als er niet opgeruimd moet worden, stel dan waarde -1 in (in de XML), dan wordt het verwijderen van oude LOG-bestanden overgeslagen.
if (!G_log_clean_days) G_log_clean_days = 90;
if (!G_log_clean_days) G_log_clean_days = 90;
var G_ax_url = Read_Ini_Setting("ax","url");
var G_ax_url_serviceax = Read_Ini_Setting("ax","url_serviceax");
@@ -846,50 +891,19 @@ var G_marx_apikey = Read_Ini_Setting("facilitor","apikey");
var G_mar_timeout = 0; //initieel 1e keer.
__Log("***Mareon Adapter - versie: " + G_Mareon_Adapter, 1);
//Eerst de xml settings loggen
__Log("***XML- common/logging: " + G_log_level, 1);
__Log("***XML- common/clean_log_days: " + G_log_clean_days, 1);
__Log("***XML- ax/url(SupplierService): " + G_ax_url, 1);
__Log("***XML- ax/url(ServiceAX): " + G_ax_url_serviceax, 1);
__Log("***XML- ax2012/url(SupplierService): " + G_ax2012_url, 1);
__Log("***XML- ax2012/url(ServiceAX): " + G_ax2012_url_serviceax, 1);
if (G_proxy) __Log("***XML- AX365/proxy: " + G_proxy, 1);
__Log("***XML- ax365/url(SupplierService): " + G_ax365_url_supplierservice, 1);
__Log("***XML- ax365/url(ServiceAX): " + G_ax365_url_serviceax, 1);
__Log("***XML- tobias/url: " + G_tobias_url, 1);
__Log("***XML- facilitor/url: " + G_fclt_url, 1);
__Log("***XML- facilitor/factuur/xmlfolder: " + G_fclt_factuur_xmlfolder, 1);
__Log("***XML- facilitor/factuur/pdffolder: " + G_fclt_factuur_pdffolder, 1);
__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- twinq/url: " + G_twinq_url, 1);
__Log("***XML- thirdparty/id: " + G_3party_id, 1);
__Log("***XML- thirdparty/exportfolder: " + G_3party_export_folder, 1);
__Log("***XML- thirdparty/dico/httpheader/contenttype: " + G_3party_httpheader_contenttype, 1);
__Log("***XML- thirdparty/dico/version: " + G_3party_dico_version, 1);
__Log("***XML- thirdparty/dico/messageservice/version: " + G_3party_dico_ms_version, 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);
__Log("***XML- xtractor/succeededfolder: " + G_ax_succeededfolder, 1);
__Log("***XML- xtractor/rejectedfolder: " + G_ax_rejectedfolder, 1);
if (G_marx_apikey == "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"){
// Vergeten de default/voorbeeld API key in mareon.xml in te vullen
G_log_level = 1;
__Log("Invalid API key: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", 2);
__Log("************************************************** END Mareon Adapter ***********************************************", 1);
}
else{
// Haal de Mareon-info uit Facilitor die geregistreerd zijn voor deze woco...
// In de array staan achtereenvolgens (op plaats 0 en 1):
// - min_adapter_version
// - mar_connection_allowed
l_array = F_GetMareonInfo();
//MARX#40953: Logging van Mareon sync adapter zelf kunnen opvragen
@@ -897,7 +911,36 @@ var G_mar_timeout = 0; //initieel 1e keer.
if (v_loglevel != ""){
G_log_level = v_loglevel;
__Log("***XML- common/logging G_log_level is overruled by Mareon :" + v_loglevel, 1);
}
}
// Nu is loglevel bekend, en kan er worden gelogd...
MARX_LOG_XML_SETTINGS();
// START MARX#84162 Mareon SYNC sequentieel per klant
var l_date_syncstopped = l_array[3]; // Timestamp *last* connection in format yyyy-mm-ddThh:mm:ss
var l_connect_after = l_array[4]; // mar_bedrijf_nextconnection, tijdstip wanneer er weer gesynct mag worden
var l_date_syncstarted = l_array[12]; // Timestamp *now* in format yyyy-mm-ddThh:mm:ss, *now* = *last* wanneer FCLT_Sync_START nog niet is aangeroepen, en dat is nog niet het geval (hieronder pas)
var l_seconds_elapsed = parseInt(l_array[7]); // Aantal seconden sinds de laatste succesvolle beeindigde SYNC
__Log("l_date_syncstarted *PREV*: " + l_date_syncstarted, 3);
__Log("l_date_syncstopped *PREV*: " + l_date_syncstopped, 3);
__Log("l_seconds_elapsed: " + l_seconds_elapsed, 3);
__Log("l_connect_after: " + l_connect_after, 3);
var l_start_stop_date_are_equal = (l_date_syncstopped == l_date_syncstarted); // SYNC start = SYNC end, wat betekent dat de SYNC goed is beeindigd op dat tijdstip. Zijn ze ongelijk, dan is OF sync nog bezig, of niet afgemaakt.
__Log("l_start_stop_date_are_equal: " + l_start_stop_date_are_equal, 3);
var l_force_sync = false;
if (l_date_syncstopped && l_connect_after)
{
var l_date_connect_lasttime = xmltojsdate(l_date_syncstopped);
var l_date_connect_after = xmltojsdate(l_connect_after);
__Log("l_date_connect_lasttime: " + l_date_connect_lasttime, 3);
__Log("l_date_connect_after: " + l_date_connect_after, 3);
var l_MAR_DELTA_CONNECTTIME_millisec = l_date_connect_after - l_date_connect_lasttime;
__Log("l_MAR_DELTA_CONNECTTIME_millisec: " + l_MAR_DELTA_CONNECTTIME_millisec, 3);
var l_force_sync = ((1000*l_seconds_elapsed) > (G_multiplier_sec_elapsed * l_MAR_DELTA_CONNECTTIME_millisec)); // Als er meer dan 3x de delta-connect tijd is verstreken, dan forceren dat sync toch mag lopen, omdat die kan zijn vastgelopen...
}
__Log("l_force_sync: " + l_force_sync, 3);
// END MARX#84162 Mareon SYNC sequentieel per klant
v_date_sendlogfile = l_array[10]; // format "yyyy-mm-dd"
if (v_date_sendlogfile != "")
{
@@ -915,127 +958,136 @@ var G_mar_timeout = 0; //initieel 1e keer.
v_woco = l_array[2]; // Naam van de woco-bedrijf
__Log("*** Company: " + v_woco, 2);
v_min_adapter_version = l_array[0]; // Versienummer, iets als "1", of "1.1", of "1.23" etc
v_min_adapter_version = l_array[0]; // Versienummer, iets als "1", of "1.1", of "1.23" etc
v_mar_connection_allowed = l_array[1]; // 0 (not allowed to connect) of 1 (= allowed to connect)
if (G_Mareon_Adapter >= v_min_adapter_version){
if (v_mar_connection_allowed == '1'){
// Connection is allowed
__Log("Connection allowed", 1);
FCLT_Sync_START();
//MARX#37375: nu- NA de start!!- halen we de nieuwe sync-data nog eens op. Met name hier cruciaal het moment van ophalen, dat MOET na de START van de sync.
// want na de start van de sync is het gegeven 'MAR_SYNC_OPDR_PAST_SECS_STOP' pas correct.
// dit gegeven wordt namelijk gebaseerd op 'sync_date_now' die in de DB in de procedure mar_update_ax_sync is gezet, en dat gebeurt dus in de start-sync. Vandaar!
l_array = F_GetMareonInfo();
var G_mar_sync_opdr_past_days = parseInt(l_array[6]);
var G_mar_sync_opdr_past_secs_start = parseInt(l_array[7]);
var G_mar_sync_opdr_past_secs_stop = parseInt(l_array[8]);
var G_mar_sync_date_now = l_array[12]; // Timestamp *now* in format yyyy-mm-ddThh:mm:ss
var G_mar_sync_date_last = l_array[3]; // Timestamp last connection in format yyyy-mm-ddThh:mm:ss
var G_mar_sync_buffer = parseInt(l_array[13]); // Buffer in seconds, extra time overload (overlap van extra tijd)
var G_mar_communicatielogboek = parseInt(l_array[14]); // Opdrachtgever maakt gebruik van communicatielogboek (AX webservice UpdatePurchStatus beschikbaar)
var G_mar_sync_bijlages_opdrgvr = l_array[16]; // Bijlages vanuit opdrachtgever worden gedeeld met leverancier indien niet leeg/0. Voor Facilitor vullen met de flexprop-key
var G_mar_sync_bijlages_naar_opdrgvr = l_array[17]; // Bijlages vanuit opdrachtnemer worden gedeeld met opdrachtgever indien niet leeg/0. Voor Facilitor vullen met de flexprop-key
//MARX62284: Identityserver gegevens (tbv AX2012) niet in mareon sync.xml
var v_ax2012_bcproxy = l_array[19];
if (v_ax2012_bcproxy != ""){
G_ax2012_bcProxy = v_ax2012_bcproxy;
__Log("***XML- G_ax2012_bcProxy is overruled by Mareon", 3);
}
var v_ID_url = l_array[20];
if (v_ID_url != ""){
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_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_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_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_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_saxton_scope = v_ID_scope;
__Log("***XML- G_ID_saxton_scope is overruled by Mareon", 3);
}
// MARX#76891 VM387219: Registratie in AX2012 of inkooporder aanwezig is in Mareon
var G_company_Id = l_array[27]; // AX-id van interne bedrijf, o.a. nodig in de webservice SupplierPortalPurchOrderDeliveredRequest
if (AX_or_Tobias() == "A")
{
__Log("AX2009", 2);
Ax_2_FACILITOR();
}
if (AX_or_Tobias() == "A12")
{
__Log("AX2012", 2);
Ax2012_2_FACILITOR();
}
if (AX_or_Tobias() == "A365")
{
__Log("AX365", 2);
AX365_2_FACILITOR();
}
if (AX_or_Tobias() == "T")
{
__Log("TOBIAS", 2);
Tobias_2_FACILITOR();
}
if (AX_or_Tobias() == "F")
{
__Log("FACILITOR", 2);
MAREON_2_FACILITOR();
}
if (AX_or_Tobias() == "R")
{
__Log("REMS", 2);
REMS_2_MAREON();
}
if (AX_or_Tobias() == "TQ")
{
__Log("TWINQ", 2);
MAREON_2_TWINQ();
}
if (AX_or_Tobias() == "3P")
{
__Log("3RD PARTY", 2);
MAREON_2_3RDPARTY();
}
if (G_ax_xtractorfolder != "")
{
FACILITOR_2_Xtractor();
}
FCLT_Sync_END();
}
else{
v_last_connect = l_array[3]; // format "2015-07-22T13:00"
v_connect_after = l_array[4]; // format "2015-07-22T12:30:22"
__Log("Connection NOT allowed (yet)", 1);
__Log("Last Connection: " + v_last_connect, 1);
__Log("Connection allowed after: " + v_connect_after, 1);
}
}
__Log("Mareon Adapter version checked: oke", 1);
if (v_mar_connection_allowed == '1'){
// Connection is allowed
__Log("Connection allowed", 1);
if (l_start_stop_date_are_equal || l_force_sync || G_parallelallowed == 1){
// Connection is not multi-threaded (sequentieel dus)
__Log("Check: connection is not multi-threaded: oke", 1);
FCLT_Sync_START();
//MARX#37375: nu- NA de start!!- halen we de nieuwe sync-data nog eens op. Met name hier cruciaal het moment van ophalen, dat MOET na de START van de sync.
// want na de start van de sync is het gegeven 'MAR_SYNC_OPDR_PAST_SECS_STOP' pas correct.
// dit gegeven wordt namelijk gebaseerd op 'sync_date_now' die in de DB in de procedure mar_update_ax_sync is gezet, en dat gebeurt dus in de start-sync. Vandaar!
l_array = F_GetMareonInfo();
var G_mar_sync_opdr_past_days = parseInt(l_array[6]);
var G_mar_sync_opdr_past_secs_start = parseInt(l_array[7]);
var G_mar_sync_opdr_past_secs_stop = parseInt(l_array[8]);
var G_mar_sync_date_now = l_array[12]; // Timestamp *now* in format yyyy-mm-ddThh:mm:ss
var G_mar_sync_date_last = l_array[3]; // Timestamp last connection in format yyyy-mm-ddThh:mm:ss
var G_mar_sync_buffer = parseInt(l_array[13]); // Buffer in seconds, extra time overload (overlap van extra tijd)
var G_mar_communicatielogboek = parseInt(l_array[14]); // Opdrachtgever maakt gebruik van communicatielogboek (AX webservice UpdatePurchStatus beschikbaar)
var G_mar_sync_bijlages_opdrgvr = l_array[16]; // Bijlages vanuit opdrachtgever worden gedeeld met leverancier indien niet leeg/0. Voor Facilitor vullen met de flexprop-key
var G_mar_sync_bijlages_naar_opdrgvr = l_array[17]; // Bijlages vanuit opdrachtnemer worden gedeeld met opdrachtgever indien niet leeg/0. Voor Facilitor vullen met de flexprop-key
//MARX62284: Identityserver gegevens (tbv AX2012) niet in mareon sync.xml
var v_ax2012_bcproxy = l_array[19];
if (v_ax2012_bcproxy != ""){
G_ax2012_bcProxy = v_ax2012_bcproxy;
__Log("***XML- G_ax2012_bcProxy is overruled by Mareon", 3);
}
var v_ID_url = l_array[20];
if (v_ID_url != ""){
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_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_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_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_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_saxton_scope = v_ID_scope;
__Log("***XML- G_ID_saxton_scope is overruled by Mareon", 3);
}
// MARX#76891 VM387219: Registratie in AX2012 of inkooporder aanwezig is in Mareon
var G_company_Id = l_array[27]; // AX-id van interne bedrijf, o.a. nodig in de webservice SupplierPortalPurchOrderDeliveredRequest
if (AX_or_Tobias() == "A")
{
__Log("AX2009", 2);
Ax_2_FACILITOR();
}
if (AX_or_Tobias() == "A12")
{
__Log("AX2012", 2);
Ax2012_2_FACILITOR();
}
if (AX_or_Tobias() == "A365")
{
__Log("AX365", 2);
AX365_2_FACILITOR();
}
if (AX_or_Tobias() == "T")
{
__Log("TOBIAS", 2);
Tobias_2_FACILITOR();
}
if (AX_or_Tobias() == "F")
{
__Log("FACILITOR", 2);
MAREON_2_FACILITOR();
}
if (AX_or_Tobias() == "R")
{
__Log("REMS", 2);
REMS_2_MAREON();
}
if (AX_or_Tobias() == "TQ")
{
__Log("TWINQ", 2);
MAREON_2_TWINQ();
}
if (AX_or_Tobias() == "3P")
{
__Log("3RD PARTY", 2);
MAREON_2_3RDPARTY();
}
if (G_ax_xtractorfolder != "")
{
FACILITOR_2_Xtractor();
}
FCLT_Sync_END();
}
else{
__Log("SYNC may not be multi-threaded", 1);
}
}
else{
v_last_connect = l_array[3]; // format "2015-07-22T13:00"
v_connect_after = l_array[4]; // format "2015-07-22T12:30:22"
__Log("Connection NOT allowed (yet)", 1);
__Log("Last Connection: " + v_last_connect, 1);
__Log("Connection allowed after: " + v_connect_after, 1);
}
}
else{
__Log("Invalid Mareon adapter version", 0);
}

View File

@@ -5,6 +5,9 @@
<logging>0</logging>
<!-- IP van proxy-server indien van toepassing -->
<proxy></proxy>
<!-- SYNC multithreaded options -->
<multiplier_sec_elapsed></multiplier_sec_elapsed>
<parallelallowed></parallelallowed>
</common>
<tobias>
<!-- URL van de Tobias webservice 'TobiasConnect' -->