# Reglas de negocio - Acción Ejecutar script Con la acción **Ejecutar script** en las reglas de negocio, puede validar solicitudes y actualizar valores de campos para automatizar los flujos de trabajo de las solicitudes. Puede usar scripts para validar solicitudes que involucren condiciones complejas o solicitudes que usen entradas de application de terceros. Puede ejecutar scripts de reglas de negocio en solicitudes entrantes a través del navegador, la API, dispositivos móviles y correo. ## Casos de uso: - ### Actualizar campos de la solicitud según valores de campos en un módulo diferente o en una application. Un usuario registra una solicitud de servicio para un activo. En este caso, puede escribir un script para verificar automáticamente la disponibilidad del activo, luego asignarlo a la solicitud y actualizar el estado del activo en el módulo de **Activos**. - ### Detener una operación de solicitud en cualquier momento. Puede definir fácilmente qué no está permitido para un solicitante o un técnico, ya sea la modificación de datos o la operación misma en cualquier etapa determinada del procesamiento de la solicitud. Un usuario registra una solicitud de servicio para una nueva laptop. Durante el procesamiento de esta solicitud, puede usar la ejecución de scripts de Reglas de negocio en los siguientes casos: - Después de que el aprobador apruebe la solicitud, el técnico o el solicitante no deben poder cambiar la entrada de la solicitud. - No se debe permitir que el técnico cambie el estado de la solicitud a **En espera de compra** a menos que la solicitud esté aprobada. - Cuando el técnico entregue el artículo al solicitante, solo se le debe permitir cambiar el estado de la solicitud a **Resuelto** y no a **Cerrado**. Solo el solicitante debe poder cerrar la solicitud después de verificar el artículo recibido. - ### Detener una solicitud desde su propia creación. Para evitar la duplicación de solicitudes cuando el mismo solicitante genera una solicitud para la misma categoría, subcategoría y artículo. ## Para agregar un comando en una regla de negocio - Vaya a **Acciones**, haga clic en Seleccionar **Acciones personalizadas** >> **Ejecutar script**. - En el cuadro de texto que se muestra, introduzca el nombre del archivo que contiene el script y haga clic en **Guardar**. ### Configuración de ejemplo: Considere el caso de generar un ticket de Jira desde ServiceDesk Plus. Para configurar un script personalizado para esta acción, 1. Cree un archivo de texto con el comando que se indica a continuación: ``` py CreateJiraTicket.py $COMPLETE_V3_JSON_FILE ``` 2. Guarde el archivo como **create-jira-ticket.txt** y colóquelo en el directorio **[SDP_HOME]/integration/custom_scripts/executor_files**. 3. Al configurar la acción personalizada, introduzca el nombre del archivo en el campo del ejecutor. 4. Haga clic en **Guardar** después de proporcionar todos los demás detalles. ![Configuración de ejemplo](https://www.manageengine.com/userfiles/866/14262/ckfinder/images/qu/2021_10_18_11_05_441.png) Durante la ejecución, la application obtendrá el comando del archivo de texto indicado. ## Parámetro admitido—$COMPLETE_V3_JSON_FILE $COMPLETE_V3_JSON_FILE denota la ruta de un archivo que contiene los detalles completos de la solicitud, así como los valores anteriores y actualizados de los campos en formato JSON. El archivo es temporal y se eliminará automáticamente después de que se ejecute el script. El archivo JSON temporal se crea en el directorio `SDP_Home\integration\custom_scripts\request\`, y el nombre del archivo será `.json`. **Estructura de $COMPLETE_V3_JSON_FILE** ```json { "request": { }, "diff": { "old": { "request": { "priority": { "id": "4", "name": "Alta" }, "urgency": { "id": "3", "name": "Normal" }, "impact_details": "Impacto alto para servidores" } }, "new": { "request": { "priority": { "id": "1", "name": "Baja" }, "urgency": { "id": "4", "name": "Baja" }, "impact_details": "Impacto bajo para servidores" } } }, "LOGIN_NAME": "administrator", "LOGGEDIN_USER_TYPE": "Técnico", "LOGGEDIN_USER_NAME": "administrator", "OPERATION_TYPE": "add" } ``` ## Entrada proporcionada al archivo temporal $COMPLETE_V3_JSON_FILE La entrada está en formato JSON. Aquí, la clave **request** contiene los campos proporcionados por el usuario y los campos completados por el sistema en formato de API V3. ### Información adicional proporcionada en el archivo de entrada a. LOGIN_NAME b. LOGGEDIN_USER_NAME c. LOGIN_USER_ID d. LOGGEDIN_USER_TYPE e. OPERATION_TYPE ## Formato JSON de salida para scripts personalizados El script para el archivo de solicitudes debe devolver un JSON que contenga el estado de éxito/fracaso y un mensaje que se mostrará en la pestaña de historial de la solicitud. Formato general: ```json { "result": "success", "message": "Mensaje" } ``` - Result denota el estado de éxito/fracaso de la acción. - Message es la información que se mostrará en la pestaña de historial de la solicitud. El script del servidor debe escribir el JSON de salida (si existe) en el mismo archivo temporal que se proporciona al script. No debe invocar llamadas a API externas para actualizar la misma solicitud, ya que esto no permitirá que los valores actualizados se transfieran a las reglas de negocio en cascada. ## Operaciones admitidas Puede realizar operaciones de **Actualización** y **Negación** utilizando el retorno JSON. Todos los campos que se pueden actualizar mediante la API de solicitudes también se pueden actualizar mediante scripts personalizados. **Ejemplo de operación de actualización** ```json { "result": "success", "message": "Script de Python de ejemplo", "operation": [ { "OPERATION_NAME": "UPDATE", "INPUT_DATA": [ { "request": { "urgency": { "name": "Alta" }, "group": { "name": "Red" }, "priority": { "name": "Alta" } } } ] } ] } ``` **Ejemplo de operación Negate** ```json { "result": "success", "operation": [ { "OPERATION_NAME": "NEGATE", "REASON": "Motivo de la negación" } ] } ``` Haga clic [aquí](https://www.manageengine.com/latam/service-desk/help/adminguide/sample_python_script.html) para ver el script de ejemplo para el siguiente caso de uso: No se debe permitir que el técnico cambie el estado de la solicitud a **En espera de compra** a menos que la solicitud esté aprobada. Para obtener más información sobre cómo escribir un script personalizado, haga clic [aquí](https://www.manageengine.com/latam/service-desk/help/adminguide/writing_custom_script_for_business_rules.html).