Saltar a contenido

API Web

Flexygo API Web es una interfaz de programación de aplicaciones para acceder a objetos y procesos autorizados externamente desde el panel de control ubicado en Área de Trabajo de Administrador > Seguridad > WebAPI o simplemente haz clic aquí.

Esta API sigue la Iniciativa OpenAPI y se pueden generar SDK con Swagger Codegen utilizando su actual Definición de Esquema.

Es altamente recomendado utilizar HTTPS.

Autenticación OAuth

Token de acceso

El Token de Acceso es una credencial que puede ser utilizada por una aplicación para acceder a una API. Debes ser transmitido en un encabezado de Autorización HTTP a la API para permitir que los usuarios externos llamen a los métodos de la API.

Puedes solicitar un token de acceso utilizando dos formas:

Enviando credenciales implícitas de usuario

Solicitud:

JavaScript
let username='myuser';
let pass='mypass';
$.ajax({
    type: 'POST',
    url: './token',
    data: {grant_type: 'password', username: username, password: pass},
    success: function (response) {alert('Success!')},
    error: function (error) { alert('Fail!')}
});

Respuesta

JavaScript
HTTP/1.1 200 OK
Content-Type: application/json
{
    "access_token":"ALLgqj...rAxRvWAkjsQ",
    "token_type":"bearer",
    "expires_in":29,
    "refresh_token":"68b....fc97a1"
}
Enviando token de credenciales base 64 en el encabezado de autorización

Solicitud

JavaScript
let username='myuser';
let pass='mypass';  
let b64Token = flexygo.history.Base64.encode(username+':'+pass);
$.ajax({
    type: 'POST',
    url: './token',
    data: {grant_type: 'password'},
    success: function (response) {alert('Success!')},
    error: function (error) { alert('Fail!')},
    beforeSend: function (xhr, settings) { xhr.setRequestHeader('Authorization', 'Basic '+b64Token); }
);

Respuesta

JavaScript
HTTP/1.1 200 OK
Content-Type: application/json
{
    "access_token":"ALLgqj...rAxRvWAkjsQ",
    "token_type":"bearer",
    "expires_in":29,
    "refresh_token":"68b....fc97a1"
}

Token de refresco

Un Token de Refresco es un tipo especial de token que contiene la información necesaria para obtener un nuevo Token de Acceso. Puede ser usado para obtener un nuevo Token de Acceso para evitar la expiración sin enviar las credenciales del usuario nuevamente.

Solicitud

JavaScript
let refreshToken='68b....fcasd7a1'
let accessToken='xxaasddfgqj...rAasadjsQ';
$.ajax({
    type: 'POST',
    url: './token',
    data: {grant_type: 'refresh_token',refresh_token: refreshToken},
    success: function (response) {alert('Success!')},
    error: function (error) { alert('Fail!')},
    beforeSend: function (xhr, settings) { xhr.setRequestHeader('Authorization', 'Bearer ' + accessToken); }
);

Respuesta

JavaScript
HTTP/1.1 200 OK
Content-Type: application/json
{
    "access_token":"Aadfasdfgqj...rAasdfjsQ",
    "token_type":"bearer",
    "expires_in":29,
    "refresh_token":"68b....fc97a1"
}

Métodos de la API Web

Descripción Método Url Parámetros de Url Datos Código
Listar colección GET webapi/list/{ObjectName} ?filter={filter?}&page={page?}&pageSize={pageSize?}&orderBy={orderBy?} </>
Listar colección utilizando vista GET webapi/list/{ObjectName}/{ViewName} ?filter={filter?}&page={page?}&pageSize={pageSize?}&orderBy={orderBy?} </>
Obtener objeto por id GET webapi/object/{ObjectName}/{Id} </>
Obtener objeto por filtro GET webapi/object/{ObjectName} ?filter={filter} </>
Insertar Objeto POST webapi/object/{ObjectName} data:JsonObject </>
Actualizar objeto por id PUT webapi/object/{ObjectName}/{Id} data:JsonObject </>
Actualizar objeto por filtro PUT webapi/object/{ObjectName} ?filter={filter?} data:JsonObject </>
Eliminar objeto por id DELETE webapi/object/{ObjectName}/{Id} </>
Eliminar objeto por filtro DELETE webapi/object/{ObjectName} ?filter={filter?} </>
Ejecutar proceso con objeto por id PUT webapi/exec/{ProcessName}/{ObjectName}/{Id} data:JsonObject </>
Ejecutar proceso con objeto por filtro PUT webapi/exec/{ProcessName}/{ObjectName} ?filter={filter?} data:JsonObject </>
Ejecutar proceso sin objeto PUT webapi/exec/{ProcessName} data:JsonObject </>

Petición:

JavaScript
let objectName='sysObject';
let filter='ObjectName=\'AHORA_Documento\'';
let page=0;
let pageSize=500;
let orderBy='IsCollection';

let accessToken='xxaasddfgqj...rAasadjsQ';
let apiUrl='./webapi/list/' + objectName;

apiUrl += '?filter=' + encodeURIComponent(filter); 
apiUrl += '&page=' + encodeURIComponent(page); 
apiUrl += '&pageSize=' + encodeURIComponent(pageSize); 
apiUrl += '&orderBy=' + encodeURIComponent(orderBy); 

$.ajax({
type: 'GET',
url: apiUrl,
data: null,
crossDomain: true,
contentType: 'application/json; charset=utf-8',
success: function (response) { alert('Success'); console.log(response); },
error: function (error) { alert('Fail'); console.log(error); },
beforeSend: function (xhr, settings) { xhr.setRequestHeader('Authorization', 'Bearer ' + accessToken); }
});

Respuesta:

JSON
HTTP/1.1 200 OK
Content-Type: application/json
[
{"Property1":"Value1","PropertyN":"ValueN"},
{"Property1":"Value1","PropertyN":"ValueN"}
]

Petición:

JavaScript
let objectName='sysObject';
let viewName = 'sysCollections'
let filter='ObjectName=\'AHORA_Documento\'';
let page=0;
let pageSize=500;
let orderBy='IsCollection';

let accessToken='xxaasddfgqj...rAasadjsQ';
let apiUrl='./webapi/list/' + objectName + '/' + viewName;

apiUrl += '?filter=' + encodeURIComponent(filter); 
apiUrl += '&page=' + encodeURIComponent(page); 
apiUrl += '&pageSize=' + encodeURIComponent(pageSize); 
apiUrl += '&orderBy=' + encodeURIComponent(orderBy); 

$.ajax({
type: 'GET',
url: apiUrl,
data: null,
crossDomain: true,
contentType: 'application/json; charset=utf-8',
success: function (response) { alert('Success'); console.log(response); },
error: function (error) { alert('Fail'); console.log(error); },
beforeSend: function (xhr, settings) { xhr.setRequestHeader('Authorization', 'Bearer ' + accessToken); }
});

Respuesta:

JSON
HTTP/1.1 200 OK
  Content-Type: application/json
  [
    {"Property1":"Value1","PropertyN":"ValueN"},
    {"Property1":"Value1","PropertyN":"ValueN"}
  ]

Petición:

JavaScript
let objectName='sysTmpTest';
let objectId=0

let accessToken='xxaasddfgqj...rAasadjsQ';
let apiUrl='./webapi/object/' + objectName + '/' + objectId;

$.ajax({
type: 'GET',
url: apiUrl,
data: null,
crossDomain: true,
contentType: 'application/json; charset=utf-8',
success: function (response) { alert('Success'); console.log(response); },
error: function (error) { alert('Fail'); console.log(error); },
beforeSend: function (xhr, settings) { xhr.setRequestHeader('Authorization', 'Bearer ' + accessToken); }
});

Respuesta:

JSON
HTTP/1.1 200 OK
Content-Type: application/json
{  
"Properties":{  
    "Property1":{  
        "Text":"",
        "Value":null,
        "Label":"Property1"
    },
    "PropertyN":{  
        "Text":"",
        "Value":null,
        "Label":"PropertyN"
    }
},
"ObjectName":null,
"ObjectWhere":null,
"JavaScript":null,
"Message":null
}

Petición:

JavaScript
let objectName='sysTmpTest';
let filter='TestId=0';

let accessToken='xxaasddfgqj...rAasadjsQ';
let apiUrl='./webapi/object/' + objectName;
apiUrl += '?filter=' + encodeURIComponent(filter); 

$.ajax({
    type: 'GET',
    url: apiUrl,
    data: null,
    crossDomain: true,
    contentType: 'application/json; charset=utf-8',
    success: function (response) { alert('Success'); console.log(response); },
    error: function (error) { alert('Fail'); console.log(error); },
    beforeSend: function (xhr, settings) { xhr.setRequestHeader('Authorization', 'Bearer ' + accessToken); }
});

Respuesta:

JSON
HTTP/1.1 200 OK
Content-Type: application/json
{  
    "Properties":{  
        "Property1":{  
            "Text":"",
            "Value":null,
            "Label":"Property1"
        },
        "PropertyN":{  
            "Text":"",
            "Value":null,
            "Label":"PropertyN"
        }
    },
    "ObjectName":null,
    "ObjectWhere":null,
    "JavaScript":null,
    "Message":null
}

Petición:

JavaScript
let objectName='sysTmpTest';  
let properties={'TestId': 1,'Descrip': 'Prueba'}

let accessToken='xxaasddfgqj...rAasadjsQ';
let apiUrl='./webapi/object/' + objectName;

$.ajax({
    type: 'POST',
    url: apiUrl,
    data: JSON.stringify(properties),
    crossDomain: true,
    contentType: 'application/json; charset=utf-8',
    success: function (response) { alert('Success'); console.log(response); },
    error: function (error) { alert('Fail'); console.log(error); },
    beforeSend: function (xhr, settings) { xhr.setRequestHeader('Authorization', 'Bearer ' + accessToken); }
});

Respuesta:

JSON
HTTP/1.1 200 OK
Content-Type: application/json
{  
    "Properties":{  
        "Property1":{  
            "Text":"",
            "Value":null,
            "Label":"Property1"
        },
        "PropertyN":{  
            "Text":"",
            "Value":null,
            "Label":"PropertyN"
        }
    },
    "ObjectName":"sysTmpTest",
    "ObjectWhere":"[_Test].[TestId] = 1",
    "JavaScript":null,
    "Message":null
}

Petición:

JavaScript
let objectName='sysTmpTest';  
let objectId=1
let properties={'Descrip':'Prueba actualizada id'}

let accessToken='xxaasddfgqj...rAasadjsQ';
let apiUrl='./webapi/object/' + objectName + '/' + objectId;

$.ajax({
    type: 'PUT',
    url: apiUrl,
    data: JSON.stringify(properties),
    crossDomain: true,
    contentType: 'application/json; charset=utf-8',
    success: function (response) { alert('Success'); console.log(response); },
    error: function (error) { alert('Fail'); console.log(error); },
    beforeSend: function (xhr, settings) { xhr.setRequestHeader('Authorization', 'Bearer ' + accessToken); }
});

Respuesta:

JSON
HTTP/1.1 200 OK
Content-Type: application/json
{  
    "Properties":{  
        "Property1":{  
            "Text":"",
            "Value":null,
            "Label":"Property1"
        },
        "PropertyN":{  
            "Text":"",
            "Value":null,
            "Label":"PropertyN"
        }
    },
    "ObjectName":"sysTmpTest",
    "ObjectWhere":"[_Test].[TestId] = 1",
    "JavaScript":null,
    "Message":null
}

Petición:

JavaScript
let objectName='sysTmpTest';  
let filter='TestId=1';
let properties={"Descrip":"Prueba actualizada filtro"}

let apiUrl='./webapi/object/' + objectName;
apiUrl += '?filter=' + encodeURIComponent(filter); 

$.ajax({
    type: 'PUT',
    url: apiUrl,
    data: JSON.stringify(properties),
    crossDomain: true,
    contentType: 'application/json; charset=utf-8',
    success: function (response) { alert('Success'); console.log(response); },
    error: function (error) { alert('Fail'); console.log(error); },
    beforeSend: function (xhr, settings) { xhr.setRequestHeader('Authorization', 'Bearer ' + accessToken); }
});

Respuesta:

JSON
HTTP/1.1 200 OK
Content-Type: application/json
{  
    "Properties":{  
        "Property1":{  
            "Text":"",
            "Value":null,
            "Label":"Property1"
        },
        "PropertyN":{  
            "Text":"",
            "Value":null,
            "Label":"PropertyN"
        }
    },
    "ObjectName":"sysTmpTest",
    "ObjectWhere":"[_Test].[TestId] = 1",
    "JavaScript":null,
    "Message":null
}

Petición:

JavaScript
let objectName='sysTmpTest';  
let objectId=1

let apiUrl='./webapi/object/' + objectName + '/' + objectId;

$.ajax({
    type: 'DELETE',
    url: apiUrl,
    data: null,
    crossDomain: true,
    contentType: 'application/json; charset=utf-8',
    success: function (response) { alert('Success'); console.log(response); },
    error: function (error) { alert('Fail'); console.log(error); },
    beforeSend: function (xhr, settings) { xhr.setRequestHeader('Authorization', 'Bearer ' + accessToken); }
});

Respuesta:

JSON
HTTP/1.1 200 OK
Content-Type: application/json
{  
   "Properties":null,
   "ObjectName":null,
   "ObjectWhere":null,
   "JavaScript":null,
   "Message":null
}

Petición:

JavaScript
let objectName='sysTmpTest';  
let filter='TestId=1';

let apiUrl='./webapi/object/' + objectName;
apiUrl += '?filter=' + encodeURIComponent(filter); 

$.ajax({
    type: 'DELETE',
    url: apiUrl,
    data: null,
    crossDomain: true,
    contentType: 'application/json; charset=utf-8',
    success: function (response) { alert('Success'); console.log(response); },
    error: function (error) { alert('Fail'); console.log(error); },
    beforeSend: function (xhr, settings) { xhr.setRequestHeader('Authorization', 'Bearer ' + accessToken); }
});

Respuesta:

JSON
HTTP/1.1 200 OK
Content-Type: application/json
{  
   "Properties":null,
   "ObjectName":null,
   "ObjectWhere":null,
   "JavaScript":null,
   "Message":null
}

Petición:

JavaScript
let processName='MyProcess';  
let objectName='sysTmpTest';  
let objectId=1
let processParams = {"Param1":"ParamValue"}

let apiUrl='./webapi/exec/' + processName + '/' + objectName + '/' + objectId;

$.ajax({
    type: 'POST',
    url: apiUrl,
    data: JSON.stringify(processParams),
    crossDomain: true,
    contentType: 'application/json; charset=utf-8',
    success: function (response) { alert('Success'); console.log(response); },
    error: function (error) { alert('Fail'); console.log(error); },
    beforeSend: function (xhr, settings) { xhr.setRequestHeader('Authorization', 'Bearer ' + accessToken); }
});

Respuesta:

JSON
HTTP/1.1 200 OK
Content-Type: application/json
{
    "Success":true,
    "SuccessMessage":"",
    "WarningMessage":"",
    "LastException":null,
    "JSCode":null,
    "JSFile":"",
    "CloseParamWindow":false,
    "Refresh":false
}

Petición:

JavaScript
let processName='MyProcess';  
let objectName='sysTmpTest';  
let filter='TestId=1';
let processParams = {"Param1":"ParamValue"}

let apiUrl='./webapi/exec/' + processName + '/' + objectName;
apiUrl += '?filter=' + encodeURIComponent(filter); 

$.ajax({
    type: 'POST',
    url: apiUrl,
    data: JSON.stringify(processParams),
    crossDomain: true,
    contentType: 'application/json; charset=utf-8',
    success: function (response) { alert('Success'); console.log(response); },
    error: function (error) { alert('Fail'); console.log(error); },
    beforeSend: function (xhr, settings) { xhr.setRequestHeader('Authorization', 'Bearer ' + accessToken); }
});

Respuesta:

JSON
HTTP/1.1 200 OK
Content-Type: application/json
{
    "Success":true,
    "SuccessMessage":"",
    "WarningMessage":"",
    "LastException":null,
    "JSCode":null,
    "JSFile":"",
    "CloseParamWindow":false,
    "Refresh":false
}

Petición:

JavaScript
let processName='MyProcess';  
let processParams = {"Param1":"ParamValue"}

let apiUrl='./webapi/exec/' + processName

$.ajax({
    type: 'POST',
    url: apiUrl,
    data: JSON.stringify(processParams),
    crossDomain: true,
    contentType: 'application/json; charset=utf-8',
    success: function (response) { alert('Success'); console.log(response); },
    error: function (error) { alert('Fail'); console.log(error); },
    beforeSend: function (xhr, settings) { xhr.setRequestHeader('Authorization', 'Bearer ' + accessToken); }
});

Respuesta:

JSON
HTTP/1.1 200 OK
Content-Type: application/json
{
    "Success":true,
    "SuccessMessage":"",
    "WarningMessage":"",
    "LastException":null,
    "JSCode":null,
    "JSFile":"",
    "CloseParamWindow":false,
    "Refresh":false
}