• Inicio
  • Novedades
  • Academia SAP
  • FAQ
  • Blog
  • Contacto
S4PCADEMY_Logo
  • Inicio
  • Novedades
  • Academia SAP
  • FAQ
  • Blog
  • Contacto
Twitter Linkedin Instagram

S4PCADEMY_Logo
  • Inicio
  • Novedades
  • Academia SAP
  • FAQ
  • Blog
  • Contacto
Twitter Linkedin Instagram
Technical Articles

Cómo crear un flujo de trabajo flexible con aprobación automática e integrarlo con una aplicación basada en RAP

By s4pcademy 


Todos sabemos que el mundo está evolucionando. Así es SAP. 🙂

En la era de SAP ECC, solía haber un generador de flujo de trabajo (Código de transacción – SWDD) que une todos los componentes del flujo de trabajo y el ciclo de aprobación muy estrechamente con todos los componentes básicos.

SAP HANA ideó un diseño de solución aún mejor para el mecanismo de aprobación generalizado mediante el cual el ciclo de aprobación de documentos comerciales ahora se puede configurar dinámicamente.

Hoy en día, la mayor parte del mecanismo de aprobación de documentos estándar se basa en un flujo de trabajo flexible. (por ejemplo, RFQ, cotización de proveedor, contrato de compra, orden de compra y muchos más. Documentos que respaldan el flujo de trabajo flexible | Ayuda SAP Portal)

También puede encontrar la necesidad de crear un mecanismo de aprobación mediante el uso de Flujo de trabajo flexible para un proceso comercial específico para su cliente/proceso organizacional.

Como parte de esta serie de blogs, compartiré el enfoque de desarrollo necesario para crear un flujo de trabajo flexible.

Según el aprobador involucrado en el ciclo de aprobación de documentos comerciales, el flujo de trabajo flexible admite el siguiente tipo de ciclos de aprobación (por diseño):

  • Mecanismo de aprobación automática
    • Este es un escenario/actividad que se ocupa de la actividad de aprobación/rechazo del documento comercial colocado sin intervención humana.
    • Por ejemplo, en una organización podríamos tener algún umbral predefinido en términos de Cantidad/Cantidad/Otro para decidir sobre el requisito de aprobaciones.
    • En el caso de un escenario en el que el documento comercial no exceda esos umbrales o no cumpla con los criterios que requieren aprobación manual, se requieren algunas verificaciones básicas de sanidad para que el documento se considere legítimo.
    • En este escenario, el mecanismo de aprobación automática entrará en escena.
      Esta será el área de enfoque clave del blog actual.
  • Mecanismo de aprobación basado en agentes
    • Este es un escenario/actividad en el que se requerirá una serie más de aprobaciones manuales para que el documento comercial alcance el estado final aprobado/para ser considerado como un documento legítimo.

Paso 1- Cree una clase global agregando las siguientes interfaces como miembro de ella: BI_OBJECT & IF_WORKFLOW. (Esta clase servirá como tipo de objeto principal requerido para el flujo de trabajo flexible)

Clase%20con%20workflow%20interfaces%20relevantes

Clase con interfaces relevantes para el flujo de trabajo

Paso 2- Implemente todos los métodos de interfaz (sin lógica por ahora) y también cree un método llamado WORKITEM_EXECUTE como Public Instance Method sin parámetros ni lógica. (Lo que servirá para el propósito del método de ejecución ficticio durante la ejecución real del elemento de trabajo más adelante).

Dummy%20method%20for%20Automatic%20Workitem%20ejecución

Método ficticio para la ejecución automática de elementos de trabajo

Paso 3-También agregue los siguientes 3 eventos en clase junto con los parámetros:

Evento%20SUBMITTED_FOR_APPROVAL

Evento SUBMITTED_FOR_APPROVAL

Evento%20LIBERADO

Evento LIBERADO

Evento%20RECHAZADO

Evento RECHAZADO

Paso 4-Ir al código de transacción SWDD_ESCENARIO y cree un nuevo flujo de trabajo flexible.

Crear%20Flexible%20Flujo de trabajo

Cree un flujo de trabajo flexible

Paso 5-Cree un elemento contenedor en la clase de referencia del contexto del escenario creada anteriormente, que servirá como el objeto principal requerido en el flujo de trabajo flexible.Crear%20Contenedor%20Elemento

Crear elemento contenedor

Paso 6- Introduzca los datos del proceso en la primera pestaña y asigne el evento de inicio de flujo de trabajo con el evento de clase SUBMITTED_FOR_APPROVAL.

Procesar%20Datos

Procesar datos

Paso 7-Cree 2 clases globales más (de la superclase adecuada, como se muestra en la captura de pantalla a continuación), que servirán como clases de devolución de llamada para el flujo de trabajo. (Clase de datos de definición y clase de datos de tiempo de ejecución)

Devolución de llamada%20Clase%20-%20Definición%20Datos

Clase de devolución de llamada: datos de definición

Devolución de llamada%20Clase%20-%20Tiempo de ejecución%20Datos

Clase de devolución de llamada: datos de tiempo de ejecución

Control%20Datos

Datos de control

Paso 8-Cree una actividad y proporcione un nombre significativo. (Mantenga la ID de la tarea en blanco, el sistema generará una ID de tarea estándar que podemos copiar para crear nuestra propia tarea personalizada)Crear%20an%20Actividad

Crear una actividad

La lista de actividades debería comenzar a parecerse a la siguiente después de la creación:

Actividad%20Lista

Lista de actividades

Paso 9-Método de objeto de mapa creado anteriormente en el nivel de tarea.

Tarea%20Configuración

Configuración de tareas

Paso 10-Configure el Resultado en la pestaña Resultado junto con su naturaleza POSITIVO/NEGATIVO.

Actividad%20Resultado

Resultado de la actividad

Paso 11-Establezca el enlace del nivel de tarea de la siguiente manera:

Actividad%20Enlace

Enlace de actividad

Paso 12-Establezca el enlace de eventos de la siguiente manera en el nivel de eventos de inicio de flujo de trabajo y active el enlace de eventos. (En la pestaña Datos de proceso)

Configuración%20EventLinkage%20and%20Parameters

Configuración de EventLinkage y parámetros

Paso 13-Cargue contenido entregado previamente en la pestaña Control de flujo de trabajo para activar la Aprobación automática (de manera predeterminada, antes de que el paso de flujo de trabajo haya sido configurado por la aplicación de plantilla de flujo de trabajo relevante).

Subir%20Contenido%20pre-entregado

El formato XML para este contenido entregado previamente será el siguiente:

<?xml version="1.0" encoding="UTF-8"?>
<workflow formatVersion="3.0" id="">
    <scenario>Scenario ID e.g., WSXXXXXXXX</scenario>
    <scenarioVersion/>
    <subject>Title</subject>
    <validFrom/>
    <validTo/>
    <processFlow artifactId="">
        <activity artifactId="">
            <step id="$ScenarioVersion$ActivityId" e.g., "$0000$InspAutoapproval"/>
        </activity>
    </processFlow>
</workflow> 

Cargar contenido entregado previamente

Una vez hecho esto, active el flujo de trabajo. Debe generar los componentes de tiempo de ejecución necesarios para que se ejecute el flujo de trabajo.

Una vez que el flujo de trabajo anterior se envía/activa a través de la actividad de creación/cambio de documentos comerciales relevantes, el elemento de trabajo se crea como un proceso de aprobación de flujo de trabajo normal.

Este elemento de trabajo se ejecuta automáticamente ya que no hay intervención humana involucrada.

Internamente activa la llamada a la clase de devolución de llamada que creamos y asignamos anteriormente.

Para realizar cualquier decisión del sistema: aprobar/rechazar y actualizar el documento comercial relevante, es necesario redefinir el siguiente método de clase Runtime Data: if_swf_flex_ifs_run_appl~result_callback.

Puede implementar la lógica comercial requerida para aprobar/rechazar el documento comercial en función de los criterios involucrados al implementar la lógica requerida que se refiere a la siguiente implementación de muestra:

CLASS zcl_blg_insp_wfl_run_appl_base DEFINITION
  PUBLIC
  INHERITING FROM cl_swf_flex_ifs_run_appl_base
  FINAL
  CREATE PUBLIC .

  PUBLIC SECTION.
    METHODS if_swf_flex_ifs_run_appl~result_callback
        REDEFINITION .
  PROTECTED SECTION.
  PRIVATE SECTION.
ENDCLASS.



CLASS ZCL_BLG_INSP_WFL_RUN_APPL_BASE IMPLEMENTATION.


  METHOD if_swf_flex_ifs_run_appl~result_callback.

    DATA: lv_object_reference TYPE sibflpor,
          lv_inspplanuuid     TYPE sysuuid_x16.

    lv_object_reference = CORRESPONDING #( io_context->get_leading_object_reference( ) ).

    " get the Plan for the workflow call.
    IF lv_object_reference IS NOT INITIAL.
      lv_inspplanuuid = lv_object_reference.
      "Read plan details based on UUID
      SELECT SINGLE @abap_true
       FROM zblg_t_insp_tsp
        WHERE uuid      = @lv_inspplanuuid
          AND approvalstatus="W"   "Waiting For approval
          AND isdeleted = @abap_false
        INTO @DATA(lv_exists).
      " is the Plan  is in awaiting approval status, and exist, we will process it.
      IF sy-subrc EQ 0 AND lv_exists = abap_true.
        DATA lv_decision TYPE swc_elem.

        lv_decision = io_result->get_result( )-result.

        "set status to approved if the decision indicated to do so
        IF lv_decision = 'APPROVED'.
          DATA(lv_status) = 'A'.

          "set status to rejection - upon rejection
        ELSEIF lv_decision = 'REJECTED'.
          lv_status="R".
        ENDIF.
        " Take relevant action - upon Approval/Rejection
        UPDATE zblg_t_insp_tsp SET approvalstatus = lv_status
                         WHERE uuid = lv_inspplanuuid.
        " validate the plan could be updated.
        IF sy-subrc <> 0.
          RAISE EXCEPTION TYPE cx_swf_flex_ifs_run_exception
            EXPORTING
              textid = cx_swf_flex_callback_exception=>system_error
              m_id   = CONV string( io_result->get_result( )-wi_id ).
        ENDIF.
      ENDIF.
    ENDIF.
  ENDMETHOD.
ENDCLASS.

Creé una implementación de ejemplo del flujo de trabajo anterior donde una aplicación RAP activará la aprobación del flujo de trabajo una vez que se cree un plan de inspección.

Los siguientes son los componentes básicos necesarios para esta implementación:

Paso 1-Defina una determinación que se activará al guardar durante la operación de creación.

  determination startWorkflow       on save { create; }

Paso 2-Invoque el activador del flujo de trabajo tras la ejecución de la determinación y establezca el estado del objeto original en espera de aprobación.

CLASS lhc_inspectionplan DEFINITION INHERITING FROM cl_abap_behavior_handler.
  PRIVATE SECTION.

    METHODS startworkflow FOR DETERMINE ON SAVE
      IMPORTING keys FOR inspectionplan~startworkflow.

ENDCLASS.

CLASS lhc_inspectionplan IMPLEMENTATION.
 METHOD startworkflow.
    READ ENTITIES OF zi_blg_inspectionplantp IN LOCAL MODE
         ENTITY inspectionplan
          ALL FIELDS WITH CORRESPONDING #( keys )
           RESULT DATA(lt_inspplans)
           FAILED DATA(lt_failed).

    LOOP AT lt_inspplans ASSIGNING FIELD-SYMBOL(<fs_inspplan>).
      IF NEW lu_zi_blg_inspectionplantp( )->start_workflow( iv_inspplanuuid = <fs_inspplan>-inspectionplanuuid ) = abap_false.
        MODIFY ENTITIES OF zi_blg_inspectionplantp IN LOCAL MODE
         ENTITY inspectionplan
            UPDATE FIELDS ( approvalstatus  )
             WITH VALUE #( ( %tky                    = <fs_inspplan>-%tky
                             approvalstatus="W" ) )
             REPORTED DATA(lt_update_reported)
             FAILED DATA(lt_modifyfailed).
      ENDIF.
    ENDLOOP.
  ENDMETHOD.

ENDCLASS.

Paso 3-Cree una clase local y un método de utilidad para invocar el flujo de trabajo cuando se solicite desde la implementación de la determinación anterior.

CLASS lu_zi_blg_inspectionplantp DEFINITION.
  PUBLIC SECTION.
    METHODS start_workflow
      IMPORTING
        !iv_inspplanuuid TYPE sysuuid_x16
      RETURNING
        VALUE(rv_failed) TYPE abap_bool .
ENDCLASS.
CLASS lu_zi_blg_inspectionplantp IMPLEMENTATION.
  METHOD start_workflow.

    CONSTANTS: lc_objecttype TYPE sibftypeid VALUE 'ZBLG_INSP_WORKFLOW',
               lc_event      TYPE sibfevent  VALUE 'SUBMITTED_FOR_APPROVAL'.
    DATA: lv_objectkey  TYPE sibfinstid.

    IF    iv_inspplanuuid IS INITIAL.
      RETURN.
    ENDIF.
    " Get a container for the submitted function
    DATA(lo_event_container) = cl_swf_evt_event=>get_event_container( im_objcateg = cl_swf_evt_event=>mc_objcateg_cl
                                                                      im_objtype  = lc_objecttype
                                                                      im_event    = lc_event ).
    TRY.
        lo_event_container->set( name="IV_OBJECT_ID" value = iv_inspplanuuid ).

        lv_objectkey = iv_inspplanuuid.
        " Raise workflow event
        cl_swf_evt_event=>raise( im_objcateg        = cl_swf_evt_event=>mc_objcateg_cl
                                 im_objtype         = lc_objecttype
                                 im_event           = lc_event
                                 im_objkey          = lv_objectkey
                                 im_event_container = lo_event_container ).
      CATCH cx_swf_evt_invalid_objtype
            cx_swf_evt_invalid_event
            cx_swf_cnt_container.
        rv_failed = abap_true.
    ENDTRY.
  ENDMETHOD.

ENDCLASS.

Paso 1-Tras la creación del plan de inspección, el estado se estableció en En espera de aprobación.

Enviado%20para%20automático%20aprobación

Enviado para aprobación automática

Paso 2-Puede verificar el registro del flujo de trabajo (código de transacción: SWI1) para asegurarse de que la ejecución del flujo de trabajo esté completa.

Flujo de trabajo%20Registro

Registro de flujo de trabajo

Paso 3-Tras la ejecución exitosa, el estado cambiará a Aprobado.

Después de%20Workitem%20ejecución

Después de la ejecución del elemento de trabajo

En la publicación de blog actual, hemos aprendido los conceptos básicos del flujo de trabajo flexible, cómo implementar el escenario de aprobación automática y cómo integrarlo/invocarlo a través de una aplicación basada en RAP.

Para una mayor comprensión, utilice las siguientes referencias que me han ayudado a adquirir conocimientos sobre esta función y a motivarme a escribir esta publicación de blog:

Escribiré blogs sobre los siguientes temas pronto. Manténganse al tanto. –

  • Cómo implementar la aprobación basada en agentes en el flujo de trabajo flexible
  • Cómo generar y configurar la aplicación Fiori requerida para una configuración de flujo de trabajo flexible

Por favor proporcione sus comentarios y haga preguntas en la sección de comentarios.

Saludos,

Shyam Vasani



Source link


aplicaciónaprobaciónautomáticabasadacomoconcrearflexibleflujointegrarloRAPtrabajouna

Artículos relacionados


Omnichannel Promotion Pricing  ·  Omnichannel Promotion Pricing Service  ·  Technical Articles
Precios de promoción omnicanal de SAP: habilite el procesamiento de salida con SAP Cloud Integration
Product Information
Libere todo el potencial de su negocio con SAP Transformation Navigator
Product Information
Integre el centro de tareas de SAP con Concur

Deja tu comentario Cancelar la respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*

*

Empoderar a las empresas reguladas para mejorar las relaciones laborales y la seguridad empresarial
Previo
Impulse sus visualizaciones de SAP BusinessObjects BI 4.3 con los complementos de Need4viz
Siguiente

Madrid

Calle Eloy Gonzalo, 27
Madrid, Madrid.
Código Postal 28010

México

Paseo de la Reforma 26
Colonia Juárez,  Cuauhtémoc
Ciudad de México 06600

Costa Rica

Real Cariari
Autopista General Cañas, 
San José, SJ 40104

Perú

Av. Jorge Basadre 349
San Isidro
Lima, LIM 15073

Twitter Linkedin Instagram
Copyright 2022 | All Right Reserved.
Cookies Para que este sitio funcione adecuadamente, a veces instalamos en los dispositivos de los usuarios pequeños ficheros de datos, conocidos como cookies. La mayoría de los grandes sitios web también lo hacen.
Aceptar
Cambiar ajustes
Configuración de Cookie Box
Configuración de Cookie Box

Ajustes de privacidad

Decida qué cookies quiere permitir. Puede cambiar estos ajustes en cualquier momento. Sin embargo, esto puede hacer que algunas funciones dejen de estar disponibles. Para obtener información sobre eliminar las cookies, por favor consulte la función de ayuda de su navegador. Aprenda más sobre las cookies que usamos.

Con el deslizador, puede habilitar o deshabilitar los diferentes tipos de cookies:

  • Bloquear todas
  • Essentials
  • Funcionalidad
  • Análisis
  • Publicidad

Este sitio web hará:

Este sitio web no:

  • Esencial: recuerde su configuración de permiso de cookie
  • Esencial: Permitir cookies de sesión
  • Esencial: Reúna la información que ingresa en un formulario de contacto, boletín informativo y otros formularios en todas las páginas
  • Esencial: haga un seguimiento de lo que ingresa en un carrito de compras
  • Esencial: autentica que has iniciado sesión en tu cuenta de usuario
  • Esencial: recuerda la versión de idioma que seleccionaste
  • Functionality: Remember social media settings
  • Functionality: Remember selected region and country
  • Analytics: Keep track of your visited pages and interaction taken
  • Analytics: Keep track about your location and region based on your IP number
  • Analytics: Keep track of the time spent on each page
  • Analytics: Increase the data quality of the statistics functions
  • Advertising: Tailor information and advertising to your interests based on e.g. the content you have visited before. (Currently we do not use targeting or targeting cookies.
  • Advertising: Gather personally identifiable information such as name and location
  • Recuerde sus detalles de inicio de sesión
  • Esencial: recuerde su configuración de permiso de cookie
  • Esencial: Permitir cookies de sesión
  • Esencial: Reúna la información que ingresa en un formulario de contacto, boletín informativo y otros formularios en todas las páginas
  • Esencial: haga un seguimiento de lo que ingresa en un carrito de compras
  • Esencial: autentica que has iniciado sesión en tu cuenta de usuario
  • Esencial: recuerda la versión de idioma que seleccionaste
  • Functionality: Remember social media settings
  • Functionality: Remember selected region and country
  • Analytics: Keep track of your visited pages and interaction taken
  • Analytics: Keep track about your location and region based on your IP number
  • Analytics: Keep track of the time spent on each page
  • Analytics: Increase the data quality of the statistics functions
  • Advertising: Tailor information and advertising to your interests based on e.g. the content you have visited before. (Currently we do not use targeting or targeting cookies.
  • Advertising: Gather personally identifiable information such as name and location
Guardar y cerrar