HMSyncTOC("index.html", "api_odata_example.htm");

Ejemplo de código con C# para usar OData

<< Haga clic para mostrar la tabla de contenido >>

Ejemplo de código con C# para usar OData

 

Ejemplo de código con C# para usar OData

  •     Introducción
  •     Qué necesita hacer
  •     Obtener el token de autorización
  •         Clase con una respuesta OAuth
  •         Cree un método para obtener el token de acceso
  •     Invocar un método GET
  •     Invocar un método POST
  • Introducción

    El siguiente ejemplo muestra cómo puede crear un código en C# para invocar métodos OData desde un sistema externo. Aunque existen diferentes lenguajes de programación desde donde puede invocar OData, este ejemplo muestra los pasos de codificación que debe cumplir.

     

    Qué necesita hacer

    Recuerde que OData se basa en el protocolo OAuth 2.0. Primero debe registrar la aplicación externa en el Portal de Trabajo para obtener las llaves. Ver Guía de inicio.

     

    OData_Workportal4

     

    Recomendamos utilizar las credenciales de cliente de tipo Grant y asegúrese de seleccionar la API en el scope. Luego, debe comenzar a codificar. Los pasos de codificación para invocar un método OData son los siguientes:

     

    1. Obtener el token OAuth 2.0.

    2. Ejecute el método. Dependiendo del método, debe establecer una invocación GET o POST.

     

    Obtener el token de autorización

    El primer paso es obtener un token de acceso OAuth 2.0. Recomendamos crear una clase para crear un constructor con el token de acceso, para que sea más fácil de serializar y manipular.

     

    Clase con una 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();
     }
    }

     

    Cree 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 tres entradas:

    uri: URL de su proyecto Bizagi, p.ej: http://[Servidor]/[Proyecto]

    ClientId: Llave Client ID de OAuth 2.0 generada desde el Portal de Trabajo de Bizagi. Ver Guía de inicio.

    ClientSecret: Llave Client Secret de OAuth 2.0 generada desde el Portal de Trabajo de Bizagi. Ver Guía 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 que formatea las llaves de OAuth en BASE64 como lo esperaba 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

    Después de obtener el token del método anterior, debe ejecutar el servicio Bizagi OData. Hemos creado otro método llamado ExecuteMethod con las siguientes entradas:

    uri: URL del método ODATA dentro de su proyecto Bizagi, p.ej, http://[Servidor]/[Proyecto]/odata/data/processes. Puede consultar nuestro índice de servicios para ver nuestros métodos OData.

    token: token obtenido en el método AcquireRequestToken. Tenga en cuenta que esto se declara como un objeto OAuthResponse.

    method: El método HTTP, configúrelo 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());
    }
     

    Este método establece encabezados HTTP para la invocación:

     
    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

    Después de obtener el token, debe ejecutar el servicio Bizagi OData. Hemos creado otro método llamado ExecuteMethod con las siguientes entradas:

    uri: URL del método ODATA dentro de su proyecto Bizagi Proyecto Bizagi, p.ej: http://[Servidor]/[Proyecto]/odata/searches(fde242da-qaadr23).

    token: token obtenido en el método AcquireRequestToken. Tenga en cuenta que esto se declara como un objeto OAuthResponse.

    method: El método HTTP, configúrelo como POST.

    startParameters: Esta es una entrada de tipo JSON string enviada como el cuerpo del mensaje. La estructura del JSON depende del método. Puede consultar nuestro índice de servicios para ver nuestros 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 establece el cuerpo de la solicitud HTTP para 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);

    }

    En este articulo