# Complemento de acción externa
En este documento se tratan los siguientes temas:
- [Acerca del complemento de acción externa](#acerca-del-complemento-de-acción-externa)
- [Integración con aplicaciones de terceros](#integración-con-aplicaciones-de-terceros)
- [Configuración de su integración](#configuración-del-complemento)
- [Operaciones de solicitud compatibles de forma predeterminada](#operaciones-de-solicitud-compatibles-de-forma-predeterminada)
- [Integración predeterminada (integración con JIRA)](#integración-predeterminada-integración-con-jira)
## Propósito de este documento
Este documento proporciona información procedimental para que los desarrolladores creen un complemento y establezcan la integración entre ServiceDesk Plus y varias otras aplicaciones de terceros.
## Acerca del complemento de acción externa
Un flujo de trabajo completo de una solicitud requiere que el equipo de soporte realice distintas tareas. Ocasionalmente, el equipo de soporte puede involucrar aplicaciones de terceros para llevar a cabo ciertas tareas accediendo a las aplicaciones correspondientes, lo que puede exceder el límite de la aplicación.
Por lo tanto, para superar el tedioso proceso de incorporar aplicaciones de terceros para realizar tareas, como la integración con rastreadores de incidencias, la creación de cuentas de Active Directory y la creación de nuevas cuentas de correo, puede aprovechar la opción de complemento de acción externa en ServiceDesk Plus. Esta opción ayuda al equipo de soporte a realizar varias operaciones relacionadas con terceros directamente desde la página de **Solicitudes** con solo hacer clic en el menú **Acciones**.
**Escenario:**
Considere una organización que usa ServiceDesk Plus para su soporte al cliente y JIRA para el seguimiento de errores. Aquí es donde entra en juego el marco del complemento de acción externa, con el cual pueden crear una integración entre ServiceDesk Plus y JIRA. Como resultado, pueden crear incidencias en JIRA desde el menú **Acciones** de la página de **Solicitudes**.

Habilidades necesarias para desarrollar el complemento de acción externa:
- Lenguaje de marcado extensible (XML)
- Notación de objetos de JavaScript (JSON)
- Java (específicamente los conceptos de interfaz e implementación)
## Configuración del complemento
El complemento está diseñado para tener una clase de implementación y puede invocarse a través de un menú. El menú se puede configurar en el módulo **Administración** de ServiceDesk Plus.
- Clase de implementación
- Configuración del menú
### Clase de implementación
La clase Java debe extender `DefaultActionInterface` y proporcionar la implementación mediante el método `execute`. Las clases de importación necesarias están disponibles en `AdventNetHelpDesk.jar` y `AdventNetServiceDeskCommon.jar` que se encuentran en:
`[SCP_HOME]\applications\extracted\AdventNetSupportCenter.eear\AdventNetHelpDesk.ear\`
```java
package com.manageengine.servicedesk.actionplugin.sample;
import com.manageengine.servicedesk.actionplugin.executor.ActionInterface;
import com.manageengine.servicedesk.actionplugin.executor.ExecutorData;
public class SampleActionImplementation extends DefaultActionInterface {
public JSONObject execute(ExecutorData executorData) throws Exception {
ExecutorData data = executorData;
ActionMenuData menuData = data.getActionMenuData();
String menuName = (String) menuData.getMenuName();
JSONObject scpValuesObj = data.getDataJSON();
// Puede colocar aquí su implementación
// El tipo de retorno debe ser JSON
}
}
```
**El método Execute:**
La implementación se definirá en el método `execute` con el parámetro objeto `ExecutorData`:
- Método: `Execute (ExecutorData)`
- Devuelve: `JSONObject`
**Datos del ejecutor:**
El objeto `ExecutorData` es un parámetro del método `Execute`. Con esto, podemos obtener los detalles sobre el menú que se invoca mediante el método `getActionMenuData()`. Esto devuelve un objeto llamado `ActionMenuData`.
i) **ActionMenuData** – Proporciona información sobre el menú desde el cual se invoca la acción.
- Método: `getActionMenuData()`
- Devuelve: `ActionMenuData`
A continuación se muestran los métodos disponibles para extraer valores y sus respectivos tipos de datos:
| Parámetro | Valor devuelto |
|---|---|
| **getMenuName**
Devuelve el nombre del menú de acción que se invoca. | String |
| **getDisplayText**
Devuelve el nombre para mostrar del menú que se invoca. | String |
| **getExecutorClass**
Devuelve el nombre de la clase de ejecución de Java especificada para este menú. | String |
| **getAllowedRoles**
Devuelve la lista de roles que tienen permitido usar este menú. | ArrayList |
| **getAllowedTemplates**
Devuelve la lista de plantillas en las que este menú estará disponible. | ArrayList |
ii) **Datos JSON** – Los detalles de la solicitud desde la cual se activó el menú se pueden obtener invocando el método `getDataJSON` en `ExecutorData`. Esto devolverá los detalles como un objeto JSON:
- Método: `getDataJSON()`
- Devuelve: `JSONObject`
Un ejemplo de datos se vería como el siguiente:
```json
{
"WORKORDERID": "1",
"REQUESTER": "Guest",
"CREATEDBY": "administrator",
"CREATEDTIME": "1469685688321",
"DUEBYTIME": "1469692888321",
"RESPONSEDUEBYTIME": "-1",
"FR_DUETIME": "-1",
"RESPONDEDTIME": "0",
"RESOLVEDTIME": "0",
"COMPLETEDTIME": "0",
"SHORTDESCRIPTION": "",
"TIMESPENTONREQ": "0hrs 0min",
"SUBJECT": "Testing for Bulk SMS",
"REQUESTTEMPLATE": "Default Request",
"MODE": "E-Mail",
"SLA": "Medium SLA",
"ASSET": "",
"DEPARTMENT": " HR Department",
"EDITORID": "null",
"EDITING_STATUS": "0",
"IS_CATALOG_TEMPLATE": "false",
"SITE": "Singapore Support",
"ISVIPUSER": "No",
"SERVICE": "",
"CATEGORY": "Software",
"SUBCATEGORY": "MS Office",
"ITEM": "Install",
"TECHNICIAN": "Heather Graham",
"TECHNICIAN_LOGINNAME": "Heather",
"STATUS": "Open",
"PRIORITY": "Medium",
"LEVEL": "Tier 2",
"IMPACT": "",
"URGENCY": "High",
"IMPACTDETAILS": "-",
"REQUESTTYPE": "Incident",
"APPROVAL_STATUS": "",
"CLOSURECODE": "",
"CLOSURECOMMENTS": "",
"FCR": "false",
"YETTOREPLYCOUNT": "",
"GROUP": "Hardware Problems",
"DESCRIPTION": "",
"Test": ""
}
```
## Operaciones de solicitud compatibles de forma predeterminada
Con esta información, los clientes pueden escribir su propio código de implementación para realizar la operación necesaria. Ahora, existen dos formas de actualizar un ticket:
1. Usar la compatibilidad con la API REST disponible en SDP y actualizar la solicitud o realizar operaciones como agregar un worklog, notas, resolución, etc.
2. Usar la **funcionalidad de retorno predeterminada compatible con el marco del complemento de acción**.
El método `execute` devuelve un objeto JSON. De forma predeterminada, se admite **agregar notas** y **actualizar una solicitud** si el JSON devuelto cumple con el formato compatible.
### a. Agregar notas a una solicitud
```json
{
"message":"Solicitud agregada correctamente",
"result":"success",
"operation":[
{
"INPUT_DATA": [
{
"notes": {
"notestext":"El ticket se ha creado en JIRA y la información se ha completado en SDP"
}
}
],
"OPERATIONNAME":"ADD_NOTE"
}
]
}
```
### b. Actualizar una solicitud
```json
{
"message":"Solicitud agregada correctamente",
"result":"success",
"operation":[
{
"INPUT_DATA": [
{
"Jira ID":"35",
"Jira Key":"SDP-3",
"self":"http://jira-server/rest/api/2/issue/35"
}
],
"OPERATIONNAME":"UPDATE_REQUEST"
}
]
}
```
## Integración predeterminada (integración con JIRA)
**Para configurar el menú Acciones de solicitud**
```xml
```
**Para la integración con JIRA**
**Nota:** Se proporciona una **implementación predeterminada para JIRA**. Para esto, los clientes deben definir **otro XML** que tendrá las **implementaciones específicas de JIRA**.
```xml
```