MARX#62647: Koppeling AX365 - Mareon (Push) - volgorde van soort-notificatie-codes per opdracht omgedraaid/verbeterd via nieuwe functie find_srtnotcode_bij_opdr

svn path=/Mareon/trunk/; revision=49571
This commit is contained in:
Marcel Bourseau
2021-01-27 10:57:30 +00:00
parent 84ad06aea0
commit 95e8f640a3

View File

@@ -16,7 +16,8 @@ function F_GetOpdrachten_Statussen ()
var l_response_JSON = FcltAPI2(G_marx_apikey, "GET", l_url, "", 0, v_suppress_req_logging);
//Array van soort notificatie codes, idee is dat als bij dezelfde opdracht als eerder in deze run is uitgevoerd, wordt de 2e, 3e notify etc overgeslagen.
var l_fac_srtnotificatie_code_LIST = {};
//Deze mtethode werd in 1e instantie gebruikt, echter nu niet meer, we willen de LAATST soort notificatiecode uit de SYNC gebruiken, niet meer de EERSTE!
//var l_fac_srtnotificatie_code_LIST = {};
if (l_response_JSON){
__Log("F_GetOpdrachten_Statussen: GET", 2);
@@ -47,16 +48,16 @@ function F_GetOpdrachten_Statussen ()
if (l_error == 0){
// Geen error bij dezelfde opdracht de vorge keer, dus DOORGAAN met deze
// Maar wel eerst checken of deze soort notificatie bij dezelfde opdracht nog niet in deze sync is geweest, want dan slaan we die over.
if (l_fac_srtnotificatie_code in l_fac_srtnotificatie_code_LIST){
// Ja, deze soort notificatie is dus al uitgevoerd, we gaan geen communicatie naar extern systeem doen,
// Maar wel eerst checken of deze soort notificatie bij dezelfde opdracht straks nog in de array (in deze sync) aan de orde komt, want dan slaan we deze nu over, we willen namelijk de laatste...
if (find_srtnotcode_bij_opdr(l_mld_opdr_key, l_fac_srtnotificatie_code, l_orders, i+1, 0, 1) != -1){
// Ja, deze soort notificatie komt straks nog, we gaan geen communicatie naar extern systeem doen,
// Enkel een OKE-berichtje met bit64 reset van deze notify naar Mareon...
__Log("F_GetOpdrachten_Statussen Bypass: dubbele srtnoti " + l_fac_srtnotificatie_code, 4);
post_do_exec_notification(l_fac_notificatie_key, {api_status_code: 1, api_status_message: "", api_response_message: ""});
}
else{
// We gaan de soort notificaties van dezelfde opdracht registeren in LIJST (Array)
l_fac_srtnotificatie_code_LIST[l_fac_srtnotificatie_code]=1;
// We gaan de soort notificaties van dezelfde opdracht registeren in LIJST (Array), doen daar echter (nu nog) niets mee...
//l_fac_srtnotificatie_code_LIST[l_fac_srtnotificatie_code]=1;
// En communicatie van notify naar extern systeem...
l_error = do_exec_opdrstatus (l_orders[i]);
}
@@ -70,11 +71,22 @@ function F_GetOpdrachten_Statussen ()
else{
//andere opdracht dan de vorige keer
//meteen maar l_error en Array resetten.
//Array is puur ter registratie, we deden voorheen wel iets, maar nu niet meer met deze array, wellicht nog iets om later 'ns een keertje in te gebruiken...
l_error = 0;
l_fac_srtnotificatie_code_LIST = {};
l_fac_srtnotificatie_code_LIST[l_fac_srtnotificatie_code]=1;
// en status natuurlijk gaan verwerken
l_error = do_exec_opdrstatus (l_orders[i]);
//l_fac_srtnotificatie_code_LIST = {};
//l_fac_srtnotificatie_code_LIST[l_fac_srtnotificatie_code]=1;
if (find_srtnotcode_bij_opdr(l_mld_opdr_key, l_fac_srtnotificatie_code, l_orders, i+1, 0, 1) != -1){
// De notificatiecode bij opdracht komt straks nog een keertje voorbij, deze SKIPPEN we, want we willen de laatste...
// Wel willen we deze uit de NQ halen, dus we gaan geen communicatie naar extern systeem doen,
// Enkel een OKE-berichtje met bit64 reset van deze notify naar Mareon...
__Log("F_GetOpdrachten_Statussen Bypass: dubbele srtnoti " + l_fac_srtnotificatie_code, 4);
post_do_exec_notification(l_fac_notificatie_key, {api_status_code: 1, api_status_message: "", api_response_message: ""});
}
else{
// en anders de status natuurlijk gaan verwerken in externe systeem...
l_error = do_exec_opdrstatus (l_orders[i]);
}
}
l_prev_mld_opdr_key = l_mld_opdr_key;
}
@@ -83,6 +95,24 @@ function F_GetOpdrachten_Statussen ()
}
}
// Zoekt/Check of de soort notificatiecode v_srtnot_code bij opdracht v_opdr_key in de array v_array keertje voorkomt, zoekend vanaf array-index v_index_start tot/met v_index_end
// Let op: index van array begint met 0 en eindigt met lengte - 1 ;-),
// Wanneer je de hele array wilt doorzoeken, vul dan v_index_start en v_index_end met waarde 0.
// Als v_opdr_key_sorted = 0, dan wordt de hele array van v_index_start t/m v_index_end doorlopen, als v_opdr_key_sorted = 1, dan betekent dit dat de array gesorteerd is op opdracht-key, en stopt doorlopen van array zodra v_opdr_key ongelijk is.
// Resultaat = -1 indien niet voorkomt, en anders de index (vanaf 0 en hoger) als wel voorkomt.
function find_srtnotcode_bij_opdr(v_opdr_key, v_srtnot_code, v_array, v_index_start, v_index_end, v_opdr_key_sorted){
if (v_index_end == 0){v_index_end = v_array.length;}
for(var i = v_index_start; i < v_index_end; i++)
{
if (v_opdr_key_sorted && v_array[i].mld_opdr_key != v_opdr_key) return(-1);
if(v_array[i].mld_opdr_key == v_opdr_key && v_array[i].fac_srtnotificatie_code==v_srtnot_code) return(i);
}
return(-1);
}
function do_exec_opdrstatus(p_order){
var l_error = 0;