# Plug-in de ação externa
Os seguintes tópicos são discutidos neste documento:
- [Sobre o Plug-in de Ação Externa](https://www.manageengine.com/br/service-desk/help/adminguide/api/external-action-plugin.html#ext%20act%20plug-in)
- [Integração com aplicativos de terceiros](https://www.manageengine.com/br/service-desk/help/adminguide/api/external-action-plugin.html#integ)
- [Configurando sua integração](https://www.manageengine.com/br/service-desk/help/adminguide/api/external-action-plugin.html#implement)
- [Operações de solicitação suportadas por padrão](https://www.manageengine.com/br/service-desk/help/adminguide/api/external-action-plugin.html#default%20req)
- [Integração padrão (integração com o JIRA)](https://www.manageengine.com/br/service-desk/help/adminguide/api/external-action-plugin.html#jira)
## Objetivo deste documento
Este documento fornece informações processuais para que desenvolvedores criem um plug-in e estabeleçam integração entre o ServiceDesk Plus e vários outros aplicativos de terceiros.
## Sobre o Plug-in de Ação Externa
Um fluxo de trabalho completo de solicitação exige que diferentes tarefas sejam executadas pela equipe de suporte. Ocasionalmente, a equipe de suporte pode envolver aplicativos de terceiros para realizar determinadas tarefas acessando os aplicativos em questão, o que pode exceder o limite do aplicativo.
Assim, para superar o processo trabalhoso de trazer aplicativos de terceiros para executar tarefas, como integração com rastreador de problemas, criação de conta no Active Directory e criação de nova conta de e-mail, você pode utilizar a opção Plug-in de Ação Externa no ServiceDesk Plus. Essa opção ajuda a equipe de suporte a realizar várias operações relacionadas a terceiros diretamente da página **Solicitações**, apenas clicando no menu **Ações**.
**Cenário:**
Considere uma organização que usa o ServiceDesk Plus para o suporte ao cliente e o JIRA para rastreamento de bugs. É aqui que a estrutura de plug-in de ação externa entra em ação, por meio da qual eles podem criar integração entre o ServiceDesk Plus e o JIRA. Como resultado, eles podem criar problemas no JIRA a partir do menu **Ações** da página **Solicitações**.

Habilidades necessárias para desenvolver o Plug-in de Ação Externa
É necessário conhecimento nas seguintes áreas para trabalhar no plug-in:
- Extensible Markup Language (XML)
- JavaScript Object Notation (JSON)
- Java (especificamente conceitos de Interface e Implementação)
## Configurando o Plug-in
O plug-in foi projetado para ter uma classe de implementação e pode ser invocado por meio de um menu. O menu pode ser configurado no módulo **Admin** do ServiceDesk Plus.
- Classe de implementação
- Configuração de menu
### Classe de implementação
A classe Java deve estender `DefaultActionInterface` e fornecer a implementação por meio do método `execute`. As classes de importação necessárias estão disponíveis em `AdventNetHelpDesk.jar` e `AdventNetServiceDeskCommon.jar`, encontrados em:
```
"[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();
//Você pode colocar sua implementação aqui
//O tipo de retorno deve ser JSON
}
}
```
**O método Execute:**
A implementação será definida no método `execute` com o parâmetro objeto `ExecutorData`:
- Método: `Execute (ExecutorData)`
- Retorna: `JSONObject`
**Dados do Executor:**
O objeto `ExecutorData` é um parâmetro para o método Execute. Usando-o, podemos obter os detalhes do menu que é invocado por meio do método `getActionMenuData()`. Isso retornará um objeto chamado `ActionMenuData`.
i) **ActionMenuData** - Fornece informações sobre o menu a partir do qual a ação é invocada.
- Método: `getActionMenuData()`
- Retorna: `ActionMenuData`
Abaixo estão os métodos disponíveis para extrair valores e seus respectivos tipos de dados:
| Parâmetro | Valor de retorno |
|---|---|
| **getMenuName**
Retorna o nome do menu de ação que é invocado. | String |
| **getDisplayText**
Retorna o nome de exibição do menu que é invocado. | String |
| **getExecutorClass**
Retorna o nome da classe de execução Java especificada para este menu. | String |
| **getAllowedRoles**
Retorna a lista de funções que têm permissão para usar este menu. | ArrayList |
| **getAllowedTemplates**
Retorna a lista de modelos nos quais este menu estará disponível. | ArrayList |
ii) **Dados JSON** - Os detalhes da solicitação a partir da qual o menu foi acionado podem ser obtidos invocando o método `getDataJSON` em `ExecutorData`. Isso retornará os detalhes como um objeto JSON:
- Método: `getDataJSON()`
- Retorna: `JSONObject`
Um exemplo de dados seria como abaixo:
```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": ""
}
```
## Operações de solicitação suportadas por padrão
Com essas informações, os clientes podem escrever seu próprio código de implementação para executar a operação necessária. Agora, existem duas maneiras de atualizar um ticket. A primeira opção é usar o suporte à API REST disponível no SDP e atualizar a solicitação ou executar operações como adicionar um registro de trabalho, notas, resolução etc. A segunda é usar a **funcionalidade de retorno padrão suportada pela estrutura do plug-in de ação**.
O método `execute` retorna um objeto JSON. Por padrão, **a adição de notas** e **a atualização de uma solicitação** são suportadas se o JSON retornado estiver em conformidade com o formato suportado.
### a. Adicionando notas a uma solicitação
```json
{
"message":"Solicitação adicionada com sucesso",
"result":"success",
"operation":[
{
"INPUT_DATA":[
{
"notes":{
"notestext":"O ticket foi criado no JIRA e as informações foram preenchidas no SDP"
}
}
],
"OPERATIONNAME":"ADD_NOTE"
}
]
}
```
### b. Atualizando uma solicitação
```json
{
"message":"Solicitação adicionada com sucesso",
"result":"success",
"operation":[
{
"INPUT_DATA":[
{
"Jira ID":"35",
"Jira Key":"SDP-3",
"self":"http://jira-server/rest/api/2/issue/35"
}
],
"OPERATIONNAME":"UPDATE_REQUEST"
}
]
}
```
## Integração padrão (integração com o JIRA)
**Para configurar o menu Ações da Solicitação**
```xml
```
**Para integração com o JIRA**
**Observação:** Forneceremos uma **implementação padrão para o JIRA**. Para isso, os clientes precisam definir **outro xml** que terá as **implementações específicas do JIRA**.
```xml
```