{ ------------------------------------------------------------------ PROGRAMA : MaintainX_API OBJETIVO : Programa que ejecuta los POST, GET Y PUT ENTRE MAINTAINX Y GÉNERO PROGRAMADOR : Ing. Elvis García. FECHA REALIZACION : Agosto 15, 2024. ------------------------------------------------------------------ } OPTIONS SHORT CIRCUIT IMPORT com IMPORT util SCHEMA smarmotech DEFINE url, token STRING --DEFINE result STRING DEFINE http_req com.HTTPRequest DEFINE http_resp com.HTTPResponse DEFINE json_response STRING DEFINE arr_GET RECORD --recuperar un activo en especifico asset RECORD id INTEGER, name VARCHAR(100), description VARCHAR(200), locationId INTEGER, parentId INTEGER, creatorId INTEGER, createdAt DATETIME YEAR TO FRACTION, updatedAt DATETIME YEAR TO FRACTION, attachments DYNAMIC ARRAY OF STRING, criticalityId INTEGER, childrenIds DYNAMIC ARRAY OF INTEGER, teamIds DYNAMIC ARRAY OF INTEGER, assetTypes DYNAMIC ARRAY OF STRING, extraFields RECORD model VARCHAR(100), ID_Transacciones INT, codigo_ABR VARCHAR(100), ID_Sistema_Contable STRING END RECORD, vendorIds DYNAMIC ARRAY OF INTEGER, status RECORD id INTEGER, status VARCHAR(50), startedAt DATETIME YEAR TO FRACTION, description VARCHAR(200), downtimeType STRING, createdAt DATETIME YEAR TO FRACTION, updatedAt DATETIME YEAR TO FRACTION END RECORD END RECORD END RECORD DEFINE all_assets RECORD --Para llamar todos los activos assets DYNAMIC ARRAY OF RECORD id INTEGER, name VARCHAR(100), description VARCHAR(200), parentId INTEGER, criticalityId INTEGER, locationId INTEGER, createdAt DATETIME YEAR TO FRACTION, updatedAt DATETIME YEAR TO FRACTION, creatorId INTEGER END RECORD, nextCursor VARCHAR(50), nextPageUrl VARCHAR(200) END RECORD DEFINE arr_POST RECORD --Para crear un activo en maintainX name VARCHAR(100), description VARCHAR(200), barcode VARCHAR(100), criticalityId INTEGER, parentId INTEGER, locationId INTEGER, teamIds DYNAMIC ARRAY OF INTEGER, assetTypes DYNAMIC ARRAY OF STRING, extraFields RECORD Model VARCHAR(100), ID_Transacciones INT, Codigo_ABR VARCHAR(100), ID_Sistema_Contable STRING END RECORD, vendorIds DYNAMIC ARRAY OF INTEGER END RECORD DEFINE repuestoAPI RECORD --Repuestos record name VARCHAR(100), description VARCHAR(200), area VARCHAR(100), unitCost INTEGER, availableQuantity INTEGER, minimumQuantity INTEGER, barcode VARCHAR(100), locationId INTEGER, partTypes DYNAMIC ARRAY OF STRING, assetIds DYNAMIC ARRAY OF INTEGER, teamIds DYNAMIC ARRAY OF INTEGER, extraFields RECORD exercitation_5c VARCHAR(100), esse1 VARCHAR(100), anim_13 VARCHAR(100) END RECORD, vendorIds DYNAMIC ARRAY OF INTEGER END RECORD DEFINE answer RECORD id INT END RECORD DEFINE usuarios, clave, cmd STRING MAIN CALL ARG_VAL(1) RETURNING usuarios CALL ARG_VAL(2) RETURNING clave CONNECT TO "smarmotech" USER usuarios USING clave --CALL ApiMaintainX('GET', NULL,NULL) --TODOS LOS ACTIVOS --CALL ApiMaintainX('GET', 4655907,NULL) --UN ACTIVO ESPECIFICO --CALL ApiMaintainX('POST', NULL, NULL) --CREAR UN ACTIVO --CALL ApiMaintainX('PATCH', 6186251, NULL) --ACTUALIZAR UN ACTIVO --CALL ApiMaintainX('DELETE', 6186251) --Eliminar un activo CALL add_repuestos() --AGREGAR REPUESTOS DE GENERO A MAINTAINX --CALL delete_repuestos() --ELIMINAR REPUESTOS END MAIN FUNCTION ApiMaintainC(metodo, idApi, Data) --FUNCION PARA COMPRAS DEFINE data RECORD LIKE cotb00001.* DEFINE response RECORD name STRING, description STRING, phoneNumbers DYNAMIC ARRAY OF STRING END RECORD DEFINE i INTEGER, metodo STRING, idAPi STRING, answer INTEGER DEFINE post_response RECORD id INTEGER END RECORD LET url = "https://api.getmaintainx.com/v1/vendors" LET token = "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOjUyNDIwMCwib3JnYW5pemF0aW9uSWQiOjIwNDA2MCwiaWF0IjoxNzIyNjAzOTQ3LCJzdWIiOiJSRVNUX0FQSV9BVVRIIiwianRpIjoiYTc3NjQzY2EtYWEzNy00MzQ0LWJlMmEtYTA2ZTM4OTVjZjA0In0.EmlDZmbojh0MW_We_GX829zMNKIsn4W8Q6qK60xfWFw" IF idApi IS NOT NULL THEN LET url = url || '/' || idApi END IF LET http_req = com.HTTPRequest.Create(url) CALL http_req.setConnectionTimeout(10) CALL http_req.setCharset("UTF-8") CALL http_req.setHeader("Authorization", token) CALL http_req.setHeader("Content-Type", "application/json") CALL http_req.setHeader("accept", "application/json") CASE metodo WHEN 'GET' TRY CALL http_req.setMethod(metodo) CALL http_req.doRequest() LET http_resp = http_req.getResponse() IF http_resp.getStatusCode() != 200 THEN CALL show_sync_err(http_resp.getStatusDescription()) ELSE LET json_response = http_resp.getTextResponse() IF idApi IS NOT NULL THEN CALL util.JSON.parse(json_response, arr_GET) CALL display_asset(arr_GET.*) LET answer = 1 ELSE CALL util.JSON.parse(json_response, all_assets) CALL display_all_assets(all_assets.*) LET answer = 1 END IF END IF CATCH DISPLAY SFMT("HTTP request error: STATUS=%1 (%2)", STATUS, SQLCA.SQLERRM) END TRY EXIT CASE WHEN 'POST' TRY LET response.name = data.nom_sp LET response.description = "CODIGO: " || data.cod_sp || "-" || data.cod_sp_sec || ", DIRECCION: " || data.dir_sp LET response.phoneNumbers[1] = data.tel_sp LET json_response = util.JSON.stringify(response) DISPLAY json_response CALL http_req.setMethod(metodo) CALL http_req.doTextRequest(json_response) LET http_resp = http_req.getResponse() IF http_resp.getStatusCode() != 201 THEN CALL show_sync_err(http_resp.getStatusDescription()) ELSE LET json_response = http_resp.getTextResponse() CALL util.JSON.parse(json_response, post_response) DISPLAY SFMT("Se ha creado el proveedor con ID: %1", post_response.id) LET answer = post_response.id END IF CATCH DISPLAY SFMT("HTTP request error: STATUS=%1 (%2)", STATUS, SQLCA.SQLERRM) END TRY EXIT CASE WHEN 'PATCH' TRY LET response.NAME = data.nom_sp LET response.description = "CODIGO: " || DATA.cod_sp || "-" || data.cod_sp_sec || ", DIRECCION: " || data.dir_sp LET response.phoneNumbers[1] = data.tel_sp LET json_response = util.JSON.stringify(response) DISPLAY json_response CALL http_req.setMethod(metodo) CALL http_req.doTextRequest(json_response) LET http_resp = http_req.getResponse() IF http_resp.getStatusCode() != 200 AND http_resp.getStatusCode() != 404 THEN CALL show_sync_err(http_resp.getStatusDescription()) ELSE DISPLAY "Se ha actualizado el proveedor con exito" LET answer = 1 END IF CATCH DISPLAY SFMT("HTTP request error: STATUS=%1 (%2)", STATUS, SQLCA.SQLERRM) END TRY EXIT CASE WHEN 'DELETE' TRY CALL http_req.setMethod(metodo) CALL http_req.doRequest() LET http_resp = http_req.getResponse() IF http_resp.getStatusCode() != 204 AND http_resp.getStatusCode() != 404 THEN CALL show_sync_err(http_resp.getStatusDescription()) ELSE DISPLAY "Se ha dado de baja el activo con exito" LET answer = 1 END IF CATCH DISPLAY SFMT("HTTP request error: STATUS=%1 (%2)", STATUS, SQLCA.SQLERRM) END TRY EXIT CASE OTHERWISE DISPLAY "Nothing happened..." EXIT CASE END CASE RETURN answer END FUNCTION FUNCTION ApiMaintainR(metodo, idApi, repuestos) --FUNCION PARA REPUESTOS DEFINE repuestos RECORD cod_n INT, cod_grupo INT, cod_tipo INT, cod_sec INT, descrip_esp STRING, descrip_eng STRING, unidad_med VARCHAR(10), existencia NUMERIC(10, 5), existencia_min NUMERIC(10, 5), dia_llegada SMALLINT, categoria CHAR(1), status_t CHAR(1), us_crea CHAR(50), fech_crea DATETIME YEAR TO FRACTION, us_mod CHAR(50), fech_mod DATETIME YEAR TO FRACTION, codid INT, cuenta CHAR(14), id_maintainX INT, enviarMX CHAR(5) END RECORD DEFINE i INTEGER, metodo STRING, idAPi STRING, answer INT DEFINE post_response RECORD id INTEGER END RECORD LET url = "https://api.getmaintainx.com/v1/parts" LET token = "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOjUyNDIwMCwib3JnYW5pemF0aW9uSWQiOjIwNDA2MCwiaWF0IjoxNzIyNjAzOTQ3LCJzdWIiOiJSRVNUX0FQSV9BVVRIIiwianRpIjoiYTc3NjQzY2EtYWEzNy00MzQ0LWJlMmEtYTA2ZTM4OTVjZjA0In0.EmlDZmbojh0MW_We_GX829zMNKIsn4W8Q6qK60xfWFw" IF idApi IS NOT NULL THEN LET url = url || '/' || idApi END IF LET http_req = com.HTTPRequest.Create(url) CALL http_req.setConnectionTimeout(10) CALL http_req.setCharset("UTF-8") CALL http_req.setHeader("Authorization", token) CALL http_req.setHeader("Content-Type", "application/json") CALL http_req.setHeader("accept", "application/json") INITIALIZE answer TO NULL CASE metodo WHEN 'GET' TRY CALL http_req.setMethod(metodo) CALL http_req.doRequest() LET http_resp = http_req.getResponse() IF http_resp.getStatusCode() != 200 THEN CALL show_sync_err(http_resp.getStatusDescription()) ELSE LET json_response = http_resp.getTextResponse() IF idApi IS NOT NULL THEN CALL util.JSON.parse(json_response, repuestoAPI) --CALL display_asset(repuestoAPI.*) LET answer = 1 ELSE CALL util.JSON.parse(json_response, all_assets) CALL display_all_assets(all_assets.*) LET answer = 1 END IF END IF CATCH CALL fgl_winmessage( "CATCH ERROR MESSAGE", "HTTP request error: STATUS=" || STATUS || " (" || SQLCA.SQLERRM || ")", "stop") END TRY EXIT CASE WHEN 'POST' TRY LET repuestoAPI.name = repuestos.cod_n || "-" || repuestos.cod_grupo || "-" || repuestos.cod_tipo || "-" || repuestos.cod_sec || " " || repuestos.descrip_esp LET repuestoAPI.description = repuestos.descrip_esp LET repuestoAPI.availableQuantity = repuestos.existencia LET repuestoAPI.minimumQuantity = repuestos.existencia_min LET repuestoAPI.assetIds[1] = 6210945 LET json_response = util.JSON.stringify(repuestoAPI) DISPLAY json_response CALL http_req.setMethod(metodo) CALL http_req.doTextRequest(json_response) LET http_resp = http_req.getResponse() IF http_resp.getStatusCode() != 201 THEN CALL show_sync_err(http_resp.getStatusDescription()) ELSE LET json_response = http_resp.getTextResponse() CALL util.JSON.parse(json_response, post_response) DISPLAY SFMT("Se ha creado el activo con ID: %1", post_response.id) LET answer = post_response.id END IF CATCH CALL fgl_winmessage( "CATCH ERROR MESSAGE", "HTTP request error: STATUS=" || STATUS || " (" || SQLCA.SQLERRM || ")", "stop") END TRY EXIT CASE WHEN 'PATCH' TRY LET repuestoAPI.name = repuestos.cod_n || "-" || repuestos.cod_grupo || "-" || repuestos.cod_tipo || "-" || repuestos.cod_sec || " " || repuestos.descrip_esp LET repuestoAPI.description = repuestos.descrip_esp LET repuestoAPI.availableQuantity = repuestos.existencia LET repuestoAPI.minimumQuantity = repuestos.existencia_min --LET repuestoAPI.assetIds[1] = 6210945 LET json_response = util.JSON.stringify(repuestoAPI) --DISPLAY json_response CALL http_req.setMethod(metodo) CALL http_req.doTextRequest(json_response) LET http_resp = http_req.getResponse() IF http_resp.getStatusCode() != 200 AND http_resp.getStatusCode() != 404 THEN CALL show_sync_err(http_resp.getStatusDescription()) ELSE DISPLAY "Se ha actualizado el activo con éxito" LET answer = 1 END IF CATCH CALL fgl_winmessage( "CATCH ERROR MESSAGE", "HTTP request error: STATUS=" || STATUS || " (" || SQLCA.SQLERRM || ")", "stop") END TRY EXIT CASE WHEN 'DELETE' TRY CALL http_req.setMethod(metodo) CALL http_req.doRequest() LET http_resp = http_req.getResponse() IF http_resp.getStatusCode() != 204 AND http_resp.getStatusCode() != 404 THEN CALL show_sync_err(http_resp.getStatusDescription()) ELSE DISPLAY "Se ha dado de baja el activo con exito" LET answer = 1 END IF CATCH CALL fgl_winmessage( "CATCH ERROR MESSAGE", "HTTP request error: STATUS=" || STATUS || " (" || SQLCA.SQLERRM || ")", "stop") END TRY EXIT CASE OTHERWISE DISPLAY "Nothing happened..." EXIT CASE END CASE RETURN answer END FUNCTION FUNCTION ApiMaintainX(metodo, idApi, Data) --FUNCION PARA ACTIVOS DEFINE Data RECORD codigo INT, descripcion1 STRING, cuenta_no CHAR(8), cta_depr CHAR(8), cta_gasto CHAR(8), departamento SMALLINT, fech_compra DATE, duracion INT, fech_elim DATE, referencia STRING, fabricante STRING, status_t CHAR(1), us_crea STRING, fech_crea DATE, us_mod STRING, fech_mod DATE, sucid INT, id_MaintainX INT, id_maquina INT, desc_maquina STRING END RECORD DEFINE i INTEGER, metodo STRING, idAPi , respuesta STRING, answer INTEGER DEFINE post_response RECORD id INTEGER END RECORD LET url = "https://api.getmaintainx.com/v1/assets" LET token = "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOjUyNDIwMCwib3JnYW5pemF0aW9uSWQiOjIwNDA2MCwiaWF0IjoxNzIyNjAzOTQ3LCJzdWIiOiJSRVNUX0FQSV9BVVRIIiwianRpIjoiYTc3NjQzY2EtYWEzNy00MzQ0LWJlMmEtYTA2ZTM4OTVjZjA0In0.EmlDZmbojh0MW_We_GX829zMNKIsn4W8Q6qK60xfWFw" IF idApi IS NOT NULL THEN LET url = url || '/' || idApi END IF LET http_req = com.HTTPRequest.Create(url) CALL http_req.setConnectionTimeout(10) CALL http_req.setCharset("UTF-8") CALL http_req.setHeader("Authorization", token) CALL http_req.setHeader("Content-Type", "application/json") CALL http_req.setHeader("accept", "application/json") CASE metodo WHEN 'GET' TRY CALL http_req.setMethod(metodo) CALL http_req.doRequest() LET http_resp = http_req.getResponse() IF http_resp.getStatusCode() != 200 THEN CALL show_sync_err(http_resp.getStatusDescription()) ELSE LET json_response = http_resp.getTextResponse() IF idApi IS NOT NULL THEN CALL util.JSON.parse(json_response, arr_GET) CALL display_asset(arr_GET.*) LET answer = 1 ELSE CALL util.JSON.parse(json_response, all_assets) CALL display_all_assets(all_assets.*) LET answer = 1 END IF END IF CATCH DISPLAY SFMT("HTTP request error: STATUS=%1 (%2)", STATUS, SQLCA.SQLERRM) END TRY EXIT CASE WHEN 'POST' TRY LET arr_POST.name = data.descripcion1 LET arr_POST.description = data.descripcion1 {LET arr_POST.barcode = NULL LET arr_POST.criticalityId = NULL LET arr_POST.parentId = NULL LET arr_POST.locationId = data.sucid} {FOR i = 1 TO 1 LET arr_POST.teamIds[i] = NULL END FOR} {FOR i = 1 TO 1 LET arr_POST.assetTypes[i] = "Tipo1" END FOR} LET arr_POST.extraFields.model = data.descripcion1 LET arr_POST.extraFields.ID_Transacciones = NULL LET arr_POST.extraFields.codigo_ABR = NULL LET arr_POST.extraFields.ID_Sistema_Contable = data.codigo { FOR i = 1 TO 1 LET arr_POST.vendorIds[i] = 1 END FOR } LET json_response = util.JSON.stringify(arr_POST) DISPLAY json_response CALL http_req.setMethod(metodo) CALL http_req.doTextRequest(json_response) LET http_resp = http_req.getResponse() IF http_resp.getStatusCode() != 201 THEN CALL show_sync_err(http_resp.getStatusDescription()) ELSE LET json_response = http_resp.getTextResponse() CALL util.JSON.parse(json_response, post_response) DISPLAY SFMT("Se ha creado el activo con ID: %1", post_response.id) LET answer = post_response.id END IF CATCH DISPLAY SFMT("HTTP request error: STATUS=%1 (%2)", STATUS, SQLCA.SQLERRM) END TRY EXIT CASE WHEN 'PATCH' TRY LET arr_POST.name = data.descripcion1 LET arr_POST.description = data.descripcion1 {LET arr_POST.barcode = NULL LET arr_POST.criticalityId = NULL LET arr_POST.parentId = NULL LET arr_POST.locationId = data.sucid} {FOR i = 1 TO 1 LET arr_POST.teamIds[i] = NULL END FOR} {FOR i = 1 TO 1 LET arr_POST.assetTypes[i] = "Tipo1" END FOR} LET arr_POST.extraFields.model = data.descripcion1 LET arr_POST.extraFields.ID_Transacciones = NULL LET arr_POST.extraFields.codigo_ABR = NULL LET arr_POST.extraFields.ID_Sistema_Contable = data.codigo { FOR i = 1 TO 1 LET arr_POST.vendorIds[i] = 1 END FOR } LET json_response = util.JSON.stringify(arr_POST) LET cmd = 'Powershell -ExecutionPolicy Bypass -File "F:/MARMOTECHC/copia/patch_request.ps1" -jsonData ','', json_response, '',' -apiUrl "', url, '"' RUN cmd RETURNING respuesta CALL util.JSON.parse(respuesta, arr_GET) DISPLAY arr_get.asset.* IF Arr_GET.asset.id <> NULL THEN DISPLAY "WELL DONE" LET answer = 1 ELSE DISPLAY "SOMETHING HAPPENED" END IF {CALL http_req.setMethod(metodo) CALL http_req.doTextRequest(json_response) LET http_resp = http_req.getResponse() IF http_resp.getStatusCode() != 200 AND http_resp.getStatusCode() != 404 THEN CALL show_sync_err(http_resp.getStatusDescription()) ELSE DISPLAY "Se ha actualizado el activo con exito" LET answer = 1 END IF} CATCH DISPLAY SFMT("HTTP request error: STATUS=%1 (%2)", STATUS, SQLCA.SQLERRM) END TRY EXIT CASE WHEN 'DELETE' TRY CALL http_req.setMethod(metodo) CALL http_req.doRequest() LET http_resp = http_req.getResponse() IF http_resp.getStatusCode() != 204 AND http_resp.getStatusCode() != 404 THEN CALL show_sync_err(http_resp.getStatusDescription()) ELSE DISPLAY "Se ha dado de baja el activo con exito" LET answer = 1 END IF CATCH DISPLAY SFMT("HTTP request error: STATUS=%1 (%2)", STATUS, SQLCA.SQLERRM) END TRY EXIT CASE OTHERWISE DISPLAY "Nothing happened..." EXIT CASE END CASE RETURN answer END FUNCTION FUNCTION add_repuestos() --ID donde iran todos los repuestos: 6210945 DEFINE repuestos DYNAMIC ARRAY OF RECORD cod_n INT, cod_grupo INT, cod_tipo INT, cod_sec INT, descrip_esp STRING, {descrip_eng STRING, unidad_med VARCHAR(10),} existencia NUMERIC(10, 5), existencia_min NUMERIC(10, 5), {dia_llegada SMALLINT, categoria CHAR(1), status_t CHAR(1), us_crea CHAR(50), fech_crea DATETIME YEAR TO FRACTION, us_mod CHAR(50), fech_mod DATETIME YEAR TO FRACTION, codid INT, cuenta CHAR(14),} id_maintainX INT, enviarMX CHAR(5) END RECORD, i , j INT, flag BOOLEAN DEFINE maquina DYNAMIC ARRAY OF RECORD codigo INT, nombre STRING END RECORD LET url = "https://api.getmaintainx.com/v1/parts" LET token = "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOjUyNDIwMCwib3JnYW5pemF0aW9uSWQiOjIwNDA2MCwiaWF0IjoxNzIyNjAzOTQ3LCJzdWIiOiJSRVNUX0FQSV9BVVRIIiwianRpIjoiYTc3NjQzY2EtYWEzNy00MzQ0LWJlMmEtYTA2ZTM4OTVjZjA0In0.EmlDZmbojh0MW_We_GX829zMNKIsn4W8Q6qK60xfWFw" LET http_req = com.HTTPRequest.Create(url) CALL http_req.setConnectionTimeout(10) CALL http_req.setCharset("UTF-8") CALL http_req.setHeader("Authorization", token) CALL http_req.setHeader("Content-Type", "application/json") CALL http_req.setHeader("accept", "application/json") CALL http_req.setMethod('POST') DECLARE buscar CURSOR FOR SELECT DISTINCT a.cod_n, a.cod_grupo, a.cod_Tipo, a.cod_sec, b.descrip_esp, isnull(b.existencia, 0) AS existencia, isnull(b.exist_min, 0) AS existencia_min FROM irtb00006 a, irtb00002 b, irtb00009 c WHERE a.cod_n = b.cod_n AND a.cod_grupo = b.cod_Grupo AND a.cod_Tipo = b.cod_tipo AND a.cod_sec = b.cod_sec AND a.maquina IS NOT NULL AND a.maquina = c.codigo AND a.status_t IS NULL AND b.id_maintainX IS NULL LET i = 1 FOREACH buscar INTO repuestos[i].* INITIALIZE repuestoAPI TO null LET repuestoAPI.name = repuestos[i].cod_n || "-" || repuestos[i].cod_grupo || "-" || repuestos[i].cod_tipo || "-" || repuestos[i].cod_sec || " " || repuestos[i].descrip_esp LET repuestoAPI.description = repuestos[i].descrip_esp LET repuestoAPI.availableQuantity = repuestos[i].existencia LET repuestoAPI.minimumQuantity = repuestos[i].existencia_min LET repuestoAPI.assetIds[1] = 6210945 DECLARE buscar3 CURSOR FOR --BUSCANDO MAQUINAS DE ESTE REPUESTO SELECT DISTINCT a.maquina, c.nombre FROM irtb00006 a, irtb00002 b, irtb00009 c WHERE a.cod_n = b.cod_n AND a.cod_grupo = b.cod_Grupo AND a.cod_Tipo = b.cod_tipo AND a.cod_sec = b.cod_sec AND a.maquina IS NOT NULL AND a.maquina = c.codigo AND a.status_t IS NULL AND b.cod_n = repuestos[i].cod_n AND b.cod_grupo = repuestos[i].cod_grupo AND b.cod_tipo = repuestos[i].cod_tipo AND b.cod_sec = repuestos[i].cod_sec LET j = 1 FOREACH buscar3 INTO maquina[j].* LET repuestoAPI.partTypes[j] = "(",maquina[j].codigo," - ",maquina[j].nombre,")" LET j = j + 1 END FOREACH LET json_response = util.JSON.stringify(repuestoAPI) --DISPLAY json_response TRY CALL http_req.doTextRequest(json_response) LET http_resp = http_req.getResponse() IF http_resp.getStatusCode() != 201 THEN CALL show_sync_err(http_resp.getStatusDescription()) DISPLAY "Se ha salido del programa" LET flag = FALSE RETURN ELSE LET json_response = http_resp.getTextResponse() CALL util.JSON.parse(json_response, answer) DISPLAY SFMT("Se ha creado un repuesto con ID: %1", answer.id) UPDATE irtb00002 SET id_maintainx = answer.id, enviarMX = 'SI' WHERE cod_n = repuestos[i].cod_n AND cod_grupo = repuestos[i].cod_grupo AND cod_tipo = repuestos[i].cod_tipo AND cod_sec = repuestos[i].cod_sec IF STATUS < 0 THEN DISPLAY "No se hizo el update" END IF LET flag = TRUE END IF CATCH DISPLAY SFMT("HTTP request error: STATUS=%1 (%2)", STATUS, SQLCA.SQLERRM) END TRY IF flag = FALSE THEN RETURN END IF LET i = i + 1 END FOREACH END FUNCTION FUNCTION delete_repuestos() DEFINE id_maintain DYNAMIC ARRAY OF INT, i INT, flag BOOLEAN DECLARE buscar2 CURSOR FOR SELECT DISTINCT id_maintainX FROM irtb00002 WHERE id_maintainx IS NOT NULL LET i = 1 FOREACH buscar2 INTO id_maintain[i] LET url = "https://api.getmaintainx.com/v1/parts/", id_maintain[i] LET token = "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOjUyNDIwMCwib3JnYW5pemF0aW9uSWQiOjIwNDA2MCwiaWF0IjoxNzIyNjAzOTQ3LCJzdWIiOiJSRVNUX0FQSV9BVVRIIiwianRpIjoiYTc3NjQzY2EtYWEzNy00MzQ0LWJlMmEtYTA2ZTM4OTVjZjA0In0.EmlDZmbojh0MW_We_GX829zMNKIsn4W8Q6qK60xfWFw" LET http_req = com.HTTPRequest.Create(url) CALL http_req.setConnectionTimeout(-1) CALL http_req.setCharset("UTF-8") CALL http_req.setHeader("Authorization", token) CALL http_req.setHeader("Content-Type", "application/json") CALL http_req.setHeader("accept", "application/json") CALL http_req.setMethod('DELETE') TRY CALL http_req.doRequest() LET http_resp = http_req.getResponse() IF http_resp.getStatusCode() != 204 AND http_resp.getStatusCode() != 404 THEN CALL show_sync_err(http_resp.getStatusDescription()) LET flag = FALSE RETURN ELSE DISPLAY SFMT("ID %1 Eliminado", id_maintain[i]) UPDATE irtb00002 SET id_maintainx = NULL, enviarMX = NULL WHERE id_maintainx = id_maintain[i] IF STATUS < 0 THEN DISPLAY "No se hizo el update" END IF LET flag = TRUE END IF CATCH DISPLAY SFMT("HTTP request error: STATUS=%1 (%2)", STATUS, SQLCA.SQLERRM) END TRY IF flag != TRUE THEN RETURN END IF LET i = i + 1 END FOREACH END FUNCTION FUNCTION display_asset(asset) DEFINE asset RECORD id INTEGER, name VARCHAR(100), description VARCHAR(200), locationId INTEGER, parentId INTEGER, creatorId INTEGER, createdAt DATETIME YEAR TO FRACTION, updatedAt DATETIME YEAR TO FRACTION, attachments DYNAMIC ARRAY OF STRING, criticalityId INTEGER, childrenIds DYNAMIC ARRAY OF INTEGER, teamIds DYNAMIC ARRAY OF INTEGER, assetTypes DYNAMIC ARRAY OF STRING, extraFields RECORD model VARCHAR(100), ID_Transacciones INT, codigo_ABR VARCHAR(100), ID_Sistema_Contable INT END RECORD, vendorIds DYNAMIC ARRAY OF INTEGER, status RECORD id INTEGER, status VARCHAR(50), startedAt DATETIME YEAR TO FRACTION, description VARCHAR(200), downtimeType STRING, createdAt DATETIME YEAR TO FRACTION, updatedAt DATETIME YEAR TO FRACTION END RECORD END RECORD IF asset.id IS NOT NULL THEN DISPLAY SFMT("ID: %1", asset.id) DISPLAY SFMT("Name: %1", asset.name) DISPLAY SFMT("Description: %1", asset.description) DISPLAY SFMT("Location ID: %1", asset.locationId) DISPLAY SFMT("Created At: %1", asset.createdAt) DISPLAY SFMT("Updated At: %1", asset.updatedAt) DISPLAY SFMT("Creator ID: %1", asset.creatorId) DISPLAY SFMT("ID - Sistema Contable: %1", asset.extraFields.ID_Sistema_Contable) DISPLAY SFMT("Model: %1", asset.extraFields.model) DISPLAY SFMT("ID_transaccion: %1", asset.extraFields.ID_Transacciones) DISPLAY SFMT("Codigo_ABR: %1", asset.extraFIelds.codigo_ABR) DISPLAY SFMT("Status: %1", asset.status.status) DISPLAY "-----------------------------" ELSE DISPLAY "El arreglo volvio vacio" END IF END FUNCTION FUNCTION display_all_assets(all_assets) DEFINE all_assets RECORD assets DYNAMIC ARRAY OF RECORD id INTEGER, name VARCHAR(100), description VARCHAR(200), parentId INTEGER, criticalityId INTEGER, locationId INTEGER, createdAt DATETIME YEAR TO FRACTION, updatedAt DATETIME YEAR TO FRACTION, creatorId INTEGER END RECORD, nextCursor VARCHAR(50), nextPageUrl VARCHAR(200) END RECORD DEFINE i INTEGER FOR i = 1 TO all_assets.assets.getLength() DISPLAY SFMT("ID: %1", all_assets.assets[i].id) DISPLAY SFMT("Name: %1", all_assets.assets[i].name) DISPLAY SFMT("Description: %1", all_assets.assets[i].description) DISPLAY SFMT("Parent ID: %1", all_assets.assets[i].parentId) DISPLAY SFMT("Criticality ID: %1", all_assets.assets[i].criticalityId) DISPLAY SFMT("Location ID: %1", all_assets.assets[i].locationId) DISPLAY SFMT("Created At: %1", all_assets.assets[i].createdAt) DISPLAY SFMT("Updated At: %1", all_assets.assets[i].updatedAt) DISPLAY SFMT("Creator ID: %1", all_assets.assets[i].creatorId) DISPLAY "-----------------------------" END FOR DISPLAY SFMT("NextCursor: %1", all_assets.nextCursor) DISPLAY SFMT("NextPageUrl: %1", all_assets.nextPageUrl) END FUNCTION FUNCTION show_sync_err(msg) DEFINE msg STRING DISPLAY "ERROR: ", msg --CALL fgl_winmessage("ERROR", msg, "error") END FUNCTION