Cómo usar OData desde sistemas externos

<< Clic para mostrar Tabla de Contenidos >>

Navegación:  Bizagi Studio > Bizagi desde aplicaciones externas > API de Bizagi para aplicaciones externas > Servicios OData >

Cómo usar OData desde sistemas externos

Introducción

El siguiente ejemplo muestra como puede crear un código en C# para invocar métodos OData desde un sistema externo. Aunque hay diferentes lenguajes de programación desde donde puede invocar OData, este ejemplo muestra los pasos que necesita hacer.

 

Qué necesita hacer

Tenga en mente que OData se basa en el protocolo OAuth 2.0. Primero usted necesita registrar la aplicación externa en el portal de trabajo para obtener las llaves. Vea la Guía de inicio.

 

OData_Workportal4

 

Le recomendamos usar el tipo de acceso client credentials, y asegurese de que seleccione el scope API. Luego usted necesita realizar el código. Los pasos para invocar un método OData son los siguientes:

 

1. Obtener el token OAuth 2.0.

2. Ejecutar el método. Dependiendo si el método es GET o POST.

 

 

Obtener el token de acceso

El primer paso es obtener el token de acceso OAuth 2.0. Le recomendamos crear una clase para tener un constructor con el token de acceso, y que sea más fácil serializarla y manipularla en el código.

 

Clase con la respuesta OAuth

public class OAuthResponse{
          private string tokenType;
          private string accessToken;
          public string TokenType{
              get{return tokenType;}
          }
          public string AccessToken{
              get{return accessToken;}
          }
          public OAuthResponse(string result){
              JObject resultObject = JObject.Parse(result);
              accessToken = resultObject["access_token"].ToString();
              tokenType = resultObject["token_type"].ToString();
          }
}

 

Crear un método para obtener el token de acceso

Ahora necesita crear un método para obtener el token de acceso. Tenga en cuenta que este método tiene 3 entradas:

uri: URL de su proyecto de Bizagi e.g. http://[Servidor]/[NombreDelProyecto]

clientId: Llave ClientID OAuth 2.0 generada desde el Portal de Trabajo. Ver Guia de Inicio.

clientSecret: Llave ClientSecret OAuth 2.0 generada desde el Portal de Trabajo. Ver Guia de Inicio.

 

public static OAuthResponse AcquireRequestToken(string uri, string clientId, string clientSecret){

         //Set the OAuth keys formated in BASE64
          string authorization = Authorization(clientId, clientSecret);

         //Get the token
          HttpWebRequest request = CreateRequest(uri + "/oauth2/server/token", authorization, "application/x-www-form-urlencoded", "POST");
          SetMethodPost("grant_type=client_credentials&scope=api", request);
          var response = (System.Net.HttpWebResponse)request.GetResponse();{
              using (var reader = new System.IO.StreamReader(response.GetResponseStream())){
                  return new OAuthResponse(reader.ReadToEnd());
              }
          }
}

 

También necesita el siguiente método, el cual define el formato de las llaves OAuth en base64 como es esperado por Bizagi

private static string Authorization(string clientId, string clientSecret){
          string concatenateKeys = clientId + ":" + clientSecret;
          var plainTextBytes = Encoding.UTF8.GetBytes(concatenateKeys);
          return "Basic " + Convert.ToBase64String(plainTextBytes);
}

 

El siguiente paso en el código es invocar el método OData.

 

Invocar un método GET

Luego de obtener el token del método anterior, usted debe ejecutar un servicio OData de Bizagi. Hemos creado otro método en el código llamado ExecuteMethod con los siguientes parámetros:

uri: URL del método de OData dentro del proyecto de Bizagi, e.g. http://[ServerName]/[projectName]/odata/data/processes Usted puede consultar los métodos de nuestro índice de servicios.

token: token obtenido en el método AcquireRequestToken. Tenga en cuenta que este es declarado como un objeto OAuthResponse

method: El método HTTP, defina este como GET.

 

public static void ExecuteMethod(string uri, OAuthResponse token, string method){
          var request = CreateRequest(uri, token.TokenType + " " + token.AccessToken, "application/json", method);
          var response = (System.Net.HttpWebResponse)request.GetResponse();
          var reader = new System.IO.StreamReader(response.GetResponseStream());
          //Service response
          JObject resultObject = JObject.Parse(reader.ReadToEnd());
      }

 

El siguiente método define los headers HTTP para la invocacion:

 

private static HttpWebRequest CreateRequest(string uri, string authorization, string contentType, string method){
          var request = (HttpWebRequest)WebRequest.Create(uri);
          request.Headers.Add("Authorization", authorization);
          request.Headers.Add("Content-Type", contentType);
          request.Method = method;
          return request;
      }

 

 

Invocar un método POST

Luego de obtener el token del método anterior, usted debe ejecutar un servicio OData de Bizagi. Hemos creado otro método en el código llamado ExecuteMethod con los siguientes parámetros:

uri: URL del método de OData dentro del proyecto de Bizagi, e.g. http://[ServerName]/[projectName]/odata/data/processes Usted puede consultar los métodos de nuestro índice de servicios.

token: token obtenido en el método AcquireRequestToken. Tenga en cuenta que este es declarado como un objeto OAuthResponse

method: El método HTTP, defina este como POST.

startParameters: Este es una cadena de tipo JSON que se envía en el cuerpo del mensaje. Esta estructura JSON depende del método a usar. Usted puede consultar nuestro indice de servicios para ver los métodos OData.

 

public static void ExecuteMethod(string uri, OAuthResponse token, string method, string startParameters = null){
          var request = CreateRequest(uri, token.TokenType + " " + token.AccessToken, "application/json", method);
          if (method == "post"){

                 //This sets the body of the requests using the JSON string
              SetMethodPost(startParameters, request);
          }
          var response = (System.Net.HttpWebResponse)request.GetResponse();
          var reader = new System.IO.StreamReader(response.GetResponseStream());
          //Service response
          JObject resultObject = JObject.Parse(reader.ReadToEnd());
      }

 

El siguiente método define el cuerpo para la solicitud HTTP de una invocación POST:

 

private static void SetMethodPost(string startParameters, HttpWebRequest request){

           byte[] body = Encoding.UTF8.GetBytes(startParameters);

           request.ContentLength = body.Length;

           request.GetRequestStream().Write(body, 0, body.Length);

       }