Obrir tiquets a gn6 fent servir el bus SOA de la UPC

dj., 20/03/2014 - 18:26 - Manuel Campano ...

Bus SOAA la intranet de reserves de recursos el PAS i PDI pot trobar i reservar portàtils, tablets, videoprojectors, sales de reunions ... Fa uns mesos se'ns va demanar una ampliació que consisteix en preguntar als usuaris que reserven una sala el següent: "Vols retransmetre o gravar un acte, o fer una videoconferència?". Si l'usuari respon afirmativament l'aplicació obre un tiquet al gN6 a l'àrea que ofereix aquest servei amb les dades de l'usuari, de la reserva i de la sala.

Al catàleg del bus SOA de la UPC vam trobar el servei GestioTiquetsv2 que permet gestionar els tiquets de gN6 i ens vam subscriure. Aquest servei ofereix les següents operacions:

  • AltaTiquet: alta d'un tiquet a un domini de la plataforma gN6.
  • ConsultaTiquets: retorna un llista de tiquets que compleixen el criteri de cerca definits pels paràmetres d'entrada.
  • AfegirComentariTiquet: afegeix un comentari, públic o privat, a un tiquet.
  • ModificarTiquet: modifica la informació d'un tiquet a partir dels paràmetres d'entrada que estiguin informats.
  • AnnexarFitxerTiquet: annexa un fitxer en Base64 a un tiquet.

El següent pas va ser dissenyar un mòdul a Drupal que oferís funcions a la resta de mòduls per poder obrir tiquets. A continuació annexo el codi del .module:

<?php
/**
* @file
* SOA GN6 module.
*
* Les següents variables han d'estar definides a settings.php :
* - soa_gn6_uri : Adreça del web service
* - soa_gn6_username : Nom d'usuari per validar-se al bus SOA
* - soa_gn6_password : Contrasenya per validar-se al bus SOA
*
* @date Feb 2014
* @author Manel Campano
*/

require_once('inc/WSSoapClient.php');

/**
* Alta d'un Tiquet a un Domini de la plataforma gN6.
*/
function soa_gn6_open_ticket($applicant, $subject, $body, $resolver, $product) {
  $uri      = variable_get('soa_gn6_uri', NULL); // Adreça del bus SOA
  // Nom d'usuari per validar-se al bus SOA
  $username = variable_get('soa_gn6_username', NULL);
  // Contrasenya per validar-se al bus SOA
  $password = variable_get('soa_gn6_password', NULL);
  $domain =   variable_get('soa_gn6_domain', NULL);

  $param = array(
      'username'       => $username,
      'password'       => $password,
      'domini'         => $domain,
      'solicitant'     => $applicant,
      'client'         => '',
      'assumpte'       => $subject,
      'descripcio'     => $body,
      'equipResolutor' => $resolver,
      'assignatA'      => '',
      'producte'       => $product,
      'subservei'      => '',
      'urgencia'       => 'GRAVETAT_MITJA',
      // Allowed values: GRAVETAT_BAIXA, GRAVETAT_MITJA, GRAVETAT_ALTA
      'impacte'        => 'II_BAIX',       
      // Allowed values: II_BAIX, II_ALT
      'proces'         => 'PROCES_PTI',    
      // PROCES_AUS, PROCES_RIN, PROCES_PTI,PROCES_ADS, PROCES_DSO, PROCES_ADM
      'procesOrigen'   => 'PROCES_AUS',
      'estat'          => 'TIQUET_STATUS_OBERT',
      // TIQUET_STATUS_OBERT, TIQUET_STATUS_PEND, TIQUET_STATUS_TANCAT
      'ip'             => '',
      'enviarMissatgeCreacio' => 'S',
      'enviarMissatgeTancament' => 'N',
      'imputacioAutomatica' => 'N',
      'infraestructura' => '',
  );

  /* Crida al bus SOA */
  $client = new WSSoapClient($uri, $username, $password);
  $return = 0;
  try {
    $result = $client->AltaTiquet($param);
    if ($result->return->codiRetorn == 1) {
      $return = $result->return->codiTiquet;
      drupal_set_message(t("A gn6 ticket has been opened.") . " " . t("Code") . ": " . $return, 'status');
    } else {
      drupal_set_message("Error WS: " . $result->return->descripcioError, 'error');
    }
  } catch (SoapFault $exception) {
    print_r($exception);
  }
  return $return;
}

Més tard, ens vam donar compte que també calia afegir comentaris al tiquet per tal de poder informar dels canvis que patia una reserva, bàsicament autoritzacions i anul·lacions.

/**
* Afegeix un comentari públic a un tiquet de la plataforma gN6.
*/
function soa_gn6_add_comment_to_ticket($code_ticket, $commentator, $comment) {
  $uri      = variable_get('soa_gn6_uri', NULL);
  $username = variable_get('soa_gn6_username', NULL);
  $password = variable_get('soa_gn6_password', NULL);
  $domain =   variable_get('soa_gn6_domain', NULL);

  $param = array(
      'username'       => $username,
      'password'       => $password,
      'domini'         => $domain,
      'codiTiquet'     => $code_ticket,
      'usuari'         => $commentator,  //CN de l'usuari que crea el comentari
      'descripcio'     => $comment,      // descripció del comentari. Admet HTML
      'tipusComentari' => 'COMENT_TIQUET_PUBLIC', 
      // Allowed values: COMENT_TIQUET_PRIVAT, COMENT_TIQUET_PUBLIC
      'esNotificat'    => 'N',           
      // string [S,N] (“S” per notificar el comentari)
      'destinatarisTo' => '',            
      //string (destinataris de la notificació, separats per comes)
      'destinatarisCc' => '',
      'destinatarisBcc' => '',
  );

  /* Crida al bus SOA */
  $client = new WSSoapClient($uri, $username, $password);
  $return_code = 0;
  try {
    $result      = $client->AfegirComentariTiquet($param);
    $return_code = $result->return->codiRetorn;
    if ($return_code == 1) {
      drupal_set_message(t("A comment has been added to the ticket @code.", array('@code' => $code_ticket)), 'status');
    } else {
      drupal_set_message("Error WS: " . $result->return->descripcioError, 'error');
    }
  } catch (SoapFault $exception) {
    print_r($exception);
  }
  return $return_code;
}

Espero que us sigui d'utilitat i no dubteu en preguntar-me o demanar-me aclariments. 

Comentaris

Per Carles Zapater ... el

Per poder mostrar les excepcions amb l'API de drupal (drupal_set_message) al bloc catch podeu retornar el valor de la variable $exception i un booleà i a la capa de presentació mostrar el missatge amb la funció "drupal_set_message()".

D'aquesta manera no s'executarà la funció "print_r" per pantalla.  

P.e:

... } catch (SoapFault $exception) {
return array(FALSE,$exception);
} ...