terça-feira, 26 de setembro de 2017

CRM-GT - Consumo de Web Api usando Javascript

Este artigo tem como objetivo documentar o uso de um importante recurso do meu sistema de gerenciamento com o cliente, o CRM-GT. Este recurso se chama Web Api, e serve como um [conector] entre o sistema CRMGT e qualquer sistema legado.

Esta é a URL principal de consumo REST: /api/CRMGT/QueryXML

Com este conector, você pode efetuar todo CRUD de operações. Portanto, segue abaixo o uso prático deste recurso, usando Javascript/JQuery.


Para obter o Token de acesso (OAuth)

function getToken() {
    var param = {
        "orgName": "CRMGT1",
        "clientId": "+n8c++NABWZrkldVUaf0XYH2T2lG5xvUhZEVxFz46/4=__5@_",
        "clientSecret": "7RclDz1Ilbp3jyOuXJNnyfaK3bW+MIt5fU0BL1f46to=__0@_"
    };

    $.ajax({
        type: 'GET',
        url: 'https://crm-gt.com:82/api/CRMGT/GetToken',
        data: param,
  dataType: 'json',
  async: false,
  beforeSend: function(xmlHttpRequest) {
   xmlHttpRequest.withCredentials = true;
  },
  success: function (data, textStatus, jqXHR) {
   token = data.token;
  },
  error: function (jqXHR, textStatus, errorThrown) {
   debugger;
  }
    });
}

Considerações importantes sobre o token.
- Ele expira a cada 3 horas.
- O [clientId] e o [clientSecret] são criados por Organização. O administrador da organização cria estas chaves e as disponibiliza para obtenção do Token.

Para efetuar um SELECT

function selectRecords() {
    var xmlSELECT =
        "<select>" +
            "<organization name='CRMGT1' />" +
            "<table name='account' alias='tb1' />" +
            "<fields>" +
            "    <field name='tb1.AccountId' label='ID' />" +
            "    <field name='tb1.Name' />" +
            "    <field name='tb1.AccountNumber' />" +
            "</fields>" +
            "<filter type='and'>" +
            "    <condition field='tb1.StatusCode' operator='=' value='1' />" +
            "</filter>" +
        "</select>";

    var param = {
        "Type": "GET",
        "xmlContent": xmlSELECT
    };

    $.ajax({
        type: 'POST',
        url: "https://crm-gt.com:82/api/CRMGT/QueryXML",
        data: param,
        dataType: 'json',
        contentType: "application/x-www-form-urlencoded; charset=utf-8",
        beforeSend: function (xhr) {
            xhr.setRequestHeader("Authorization", "Bearer " + token);
        },
        success: function (data, textStatus, jqXHR) {
            if (textStatus == "success") {
        // JSON que representa os [registros] retornados
                var json = JSON.parse(data.Result);
            }

        },
        error: function (jqXHR, textStatus, errorThrown) {
            debugger;
        }
    });

}

Para efetuar um CREATE

function createRecord() {
 var xmlINSERT =
  "<insert>" +
   "<organization name='CRMGT1' />" +
   "<table name='account' isNN='false' setInternalFields='true' setWorkflowTrigger='false' />" +
   "<records>" +
   "    <record>" +
   "        <fields>" +
   "            <field name='accountid' type='uniqueidentifier' value='NEWID' />" +
   "            <field name='name' type='string' value='Create sample 1...' />" +
   "            <field name='AccountNumber' type='string' value='1' />" +
   "            <field name='ownerid' type='uniqueidentifier' lookuptable='user' lookupsearchfield='name' value='system' />" +
" </fields>" + " </record>" + " <record>" + " <fields>" + " <field name='accountid' type='uniqueidentifier' value='NEWID' />" + " <field name='name' type='string' value='Create sample 2...' />" + " <field name='AccountNumber' type='string' value='2' />" + " </fields>" + " </record>" + "</records>" + "</insert>"; var param = { "Type": "SET", "xmlContent": xmlINSERT
};

    $.ajax({
        type: 'POST',
        url: "https://crm-gt.com:82/api/CRMGT/QueryXML",        data: param,
        dataType: 'json',
        contentType: "application/x-www-form-urlencoded; charset=utf-8",
        beforeSend: function (xhr) {
            xhr.setRequestHeader("Authorization", "Bearer " + token);
        },
success: function (data, textStatus, jqXHR) { }, error: function (jqXHR, textStatus, errorThrown) { } }); }

Para efetuar um UPDATE

function updateRecord() {

 var xmlUPDATE =
  "<update>" +
  " <organization name='CRMGT1' />" +
  " <table name='account' setWorkflowTrigger='false' />" +
  " <set>" +
  "  <field name='name' type='string' value='UPDATED - Create sample 1...' />" +
  " </set>" +
  " <filter type='and'>" +
  "  <condition field='name' operator='=' value='Create sample 1...' />" +
  " </filter>" +
  "</update>";

    var param = {
        "Type": "SET",
        "xmlContent": xmlUPDATE
};

    $.ajax({
        type: 'POST',
        url: "https://crm-gt.com:82/api/CRMGT/QueryXML",        data: param,
        dataType: 'json',
        contentType: "application/x-www-form-urlencoded; charset=utf-8",
        beforeSend: function (xhr) {
            xhr.setRequestHeader("Authorization", "Bearer " + token);
        },
success: function (data, textStatus, jqXHR) { }, error: function (jqXHR, textStatus, errorThrown) { } }); }

Para efetuar um DELETE

function deleteRecord() {

 var xmlDELETE =
  "<delete>" +
  " <organization name='CRMGT1' />" +
  " <table name='account' setWorkflowTrigger='false' />" +
  " <filter type='and'>" +
  "  <condition field='name' operator='like' value='%Create sample%' />" +
  " </filter>" +
  "</delete>";

    var param = {
        "Type": "SET",
        "xmlContent": xmlDELETE
};

    $.ajax({
        type: 'POST',
        url: "https://crm-gt.com:82/api/CRMGT/QueryXML",        data: param,
        dataType: 'json',
        contentType: "application/x-www-form-urlencoded; charset=utf-8",
        beforeSend: function (xhr) {
            xhr.setRequestHeader("Authorization", "Bearer " + token);
        },
success: function (data, textStatus, jqXHR) { }, error: function (jqXHR, textStatus, errorThrown) { } }); }

Um comentário:

<< Ao enviar um comentário, favor clicar na opção [Enviar por e-mail comentários de acompanhamento para gtezini@gmail.com] >>