{"id":16406,"date":"2024-02-05T09:56:44","date_gmt":"2024-02-05T15:56:44","guid":{"rendered":"https:\/\/sada.services\/?p=16406"},"modified":"2024-02-05T09:56:44","modified_gmt":"2024-02-05T15:56:44","slug":"flowable-enviar-senal-de-un-flujo-a-otro","status":"publish","type":"post","link":"https:\/\/sada.services\/?p=16406","title":{"rendered":"flowable: enviar se\u00f1al de un flujo a otro"},"content":{"rendered":"\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Flujo que espera la se\u00f1al: Flujo Plan de Aporte<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Para este tenemos el flujo de aportes<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-large\"><img fetchpriority=\"high\" decoding=\"async\" width=\"1024\" height=\"413\" src=\"https:\/\/sada.services\/wp-content\/uploads\/2024\/02\/Seleccion_215-1024x413.png\" alt=\"\" class=\"wp-image-16407\" srcset=\"https:\/\/sada.services\/wp-content\/uploads\/2024\/02\/Seleccion_215-1024x413.png 1024w, https:\/\/sada.services\/wp-content\/uploads\/2024\/02\/Seleccion_215-300x121.png 300w, https:\/\/sada.services\/wp-content\/uploads\/2024\/02\/Seleccion_215-768x310.png 768w, https:\/\/sada.services\/wp-content\/uploads\/2024\/02\/Seleccion_215-1536x619.png 1536w, https:\/\/sada.services\/wp-content\/uploads\/2024\/02\/Seleccion_215.png 1602w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Cuando los planes est\u00e1n en estado de verificados Unidad Superior pasan a una tarea de espera de aprobaci\u00f3n de los planes de acciones y es aqu\u00ed donde debemos enviar la se\u00f1al del flujo de acciones<\/li>\n\n\n\n<li>Adem\u00e1s esta configurado as\u00ed:<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"1024\" height=\"178\" src=\"https:\/\/sada.services\/wp-content\/uploads\/2024\/02\/Seleccion_216-1024x178.png\" alt=\"\" class=\"wp-image-16408\" srcset=\"https:\/\/sada.services\/wp-content\/uploads\/2024\/02\/Seleccion_216-1024x178.png 1024w, https:\/\/sada.services\/wp-content\/uploads\/2024\/02\/Seleccion_216-300x52.png 300w, https:\/\/sada.services\/wp-content\/uploads\/2024\/02\/Seleccion_216-768x134.png 768w, https:\/\/sada.services\/wp-content\/uploads\/2024\/02\/Seleccion_216.png 1528w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li>donde tiene este id<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>waitForApprovalAporteEstrategico<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Luego la siguiente caja lo que hace es la aprobaci\u00f3n de los planes e aportes <\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"579\" height=\"430\" src=\"https:\/\/sada.services\/wp-content\/uploads\/2024\/02\/Seleccion_217.png\" alt=\"\" class=\"wp-image-16409\" srcset=\"https:\/\/sada.services\/wp-content\/uploads\/2024\/02\/Seleccion_217.png 579w, https:\/\/sada.services\/wp-content\/uploads\/2024\/02\/Seleccion_217-300x223.png 300w\" sizes=\"(max-width: 579px) 100vw, 579px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Este tiene una Extresion<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1501\" height=\"237\" src=\"https:\/\/sada.services\/wp-content\/uploads\/2024\/02\/Seleccion_219.png\" alt=\"\" class=\"wp-image-16411\" srcset=\"https:\/\/sada.services\/wp-content\/uploads\/2024\/02\/Seleccion_219.png 1501w, https:\/\/sada.services\/wp-content\/uploads\/2024\/02\/Seleccion_219-300x47.png 300w, https:\/\/sada.services\/wp-content\/uploads\/2024\/02\/Seleccion_219-1024x162.png 1024w, https:\/\/sada.services\/wp-content\/uploads\/2024\/02\/Seleccion_219-768x121.png 768w\" sizes=\"(max-width: 1501px) 100vw, 1501px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Con la siguiente informaci\u00f3n<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>#{planAporteEstrategicoServiceImpl.actualizarEstadoDesdeFlujo(execution,\"ESTADO_FORMULACION_PAE\",\"cr.ac.una.cgi.sigesa.ppi.ppe.service.EstadoFormulacionPAEService\",estadoFormulacionPAEServiceImpl.obtenerEstadoAprobado().getId(),\"NOMBRE\")}<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Que los que hace es llamar al service (NOTA: No debe ser el Bean): planAporteEstrategicoServiceImpl<\/li>\n\n\n\n<li>Y mandar a llamar a la funci\u00f3n actualizarEstadoDesdeFlujo<\/li>\n\n\n\n<li>y mandando \u00abexecution\u00bb en veces del los normal que es la entidad del bean<\/li>\n\n\n\n<li>Este m\u00e9todo actualiza lso planes de aportes con la siguiente funci\u00f3n<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>\/**\n     * Metodo invocado desde el flujo de Plan de Aportes que actualizar el estado del plan a aprobado\n     *\n     * @param execution\n     * @param columnName\n     * @param serviceClass\n     * @param nextStatus\n     * @param columnaTablaEstado\n     * @throws Exception\n     *\/\n    @Override\n    public void actualizarEstadoDesdeFlujo(DelegateExecution execution, String columnName, String serviceClass, Long nextStatus, String columnaTablaEstado) throws Exception {\n        \n        try{\n            \n            logger.info(\"Ingresa al Plan Aporte Estrategico = \" + execution.getProcessInstanceBusinessKey());\n            Long id = Long.valueOf(execution.getProcessInstanceBusinessKey());\n            PlanAporteEstrategico planAporteEstrategico = this.find(id);\n            this.actualizarEstado(planAporteEstrategico, columnName, serviceClass, nextStatus, columnaTablaEstado);\n\n        }catch(Exception ex){\n            System.out.println(ex);            \n        }\n    }<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\"><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Flujo Padre (quien envia se\u00f1al): Flujo de Acci\u00f3nes<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>El flujo esta constituido de la siguiente forma:<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"449\" src=\"https:\/\/sada.services\/wp-content\/uploads\/2024\/02\/Seleccion_220-1024x449.png\" alt=\"\" class=\"wp-image-16412\" srcset=\"https:\/\/sada.services\/wp-content\/uploads\/2024\/02\/Seleccion_220-1024x449.png 1024w, https:\/\/sada.services\/wp-content\/uploads\/2024\/02\/Seleccion_220-300x132.png 300w, https:\/\/sada.services\/wp-content\/uploads\/2024\/02\/Seleccion_220-768x337.png 768w, https:\/\/sada.services\/wp-content\/uploads\/2024\/02\/Seleccion_220.png 1358w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li>El proceso se va a dar de la siguiente forma <\/li>\n\n\n\n<li>cuando le den aprobar el flujo se verirfican varias condicciones entre ellas que todos los planes de aportes esten en estado de \u00abVerificado unidad Superior\u00bb es decir que todos los planes esten aqu\u00ed<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"413\" src=\"https:\/\/sada.services\/wp-content\/uploads\/2024\/02\/Seleccion_215-1-1024x413.png\" alt=\"\" class=\"wp-image-16413\" srcset=\"https:\/\/sada.services\/wp-content\/uploads\/2024\/02\/Seleccion_215-1-1024x413.png 1024w, https:\/\/sada.services\/wp-content\/uploads\/2024\/02\/Seleccion_215-1-300x121.png 300w, https:\/\/sada.services\/wp-content\/uploads\/2024\/02\/Seleccion_215-1-768x310.png 768w, https:\/\/sada.services\/wp-content\/uploads\/2024\/02\/Seleccion_215-1-1536x619.png 1536w, https:\/\/sada.services\/wp-content\/uploads\/2024\/02\/Seleccion_215-1.png 1602w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Si es as\u00ed se llama a la siguiente caja <\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"587\" height=\"350\" src=\"https:\/\/sada.services\/wp-content\/uploads\/2024\/02\/Seleccion_221.png\" alt=\"\" class=\"wp-image-16414\" srcset=\"https:\/\/sada.services\/wp-content\/uploads\/2024\/02\/Seleccion_221.png 587w, https:\/\/sada.services\/wp-content\/uploads\/2024\/02\/Seleccion_221-300x179.png 300w\" sizes=\"(max-width: 587px) 100vw, 587px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Que tiene una expression <\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"767\" height=\"260\" src=\"https:\/\/sada.services\/wp-content\/uploads\/2024\/02\/Seleccion_222.png\" alt=\"\" class=\"wp-image-16415\" srcset=\"https:\/\/sada.services\/wp-content\/uploads\/2024\/02\/Seleccion_222.png 767w, https:\/\/sada.services\/wp-content\/uploads\/2024\/02\/Seleccion_222-300x102.png 300w\" sizes=\"(max-width: 767px) 100vw, 767px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li>C\u00f3digo<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>#{planAccionEstrategicaBean.finalizarFlujo(planAccionEstrategicaBean.entity,\"ESTADO_FORMULACION_PXE\",\"cr.ac.una.cgi.sigesa.ppi.ppe.service.EstadoFormulacionPXEService\",estadoFormulacionPXEServiceImpl.obtenerEstadoAprobado().getId(),\"NOMBRE\")}<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Este metodo va a actualizar el estado del plan de accion y mandar a aprobar los planes de aportes<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>\/**\n     * Metodo que finaliza el Plan de Acci\u00f3n y sus Planes de Aportes Vinculados\n     *\n     * @param entity\n     * @param columnName\n     * @param serviceClass\n     * @param nextStatus\n     * @param columnaTablaEstados\n     * @author Gustavo Matamoros Gonz\u00e1lez\n     * @since 02\/02\/24\n     *\/\n    @Override\n    public void finalizarFlujo(PlanAccionEstrategica entity, String columnName, String serviceClass, Long nextStatus, String columnaTablaEstados) {\n\n        \/\/ Actualizar el estado del Plan de Acci\u00f3n\n        entity = actualizarEstado(entity, columnName, serviceClass, nextStatus, columnaTablaEstados);\n\n        \/\/ Mandar a aprobar los Planes de Aporte Vinculados\n        this.aprobarPlanesDeAporteEstrategico(entity);\n\n    }<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>La funci\u00f3n de aprobarPlanesDeAporteEstrategico va obtener los planes de aportes vinculados al de acci\u00f3n<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>\/**\n     * Metodo que obtiene los planes de Aporte vinculados y les envia la se\u00f1al para que continuen el flujo\n     *\n     * @param planAccionEstrategica\n     * @author Gustavo Matamoros Gonz\u00e1lez\n     * @since 02\/02\/24\n     *\/\n    private void aprobarPlanesDeAporteEstrategico(PlanAccionEstrategica planAccionEstrategica) {\n\n            \/\/ Obtenemos la lista de acciones\n            List&lt;AccionEstrategica> listaDeAcciones;\n            listaDeAcciones = planAccionEstrategica.getListaAccionesEstrategica();\n\n            \/\/Lista de Planes de Aportes Estrategicos por Aprobar\n            List&lt;PlanAporteEstrategico> listaPlanesAporteEstrategicosPorAprobar = new ArrayList();\n\n            \/\/ Si existen acciones\n            if (!listaDeAcciones.isEmpty()) {\n                for (AccionEstrategica accionEstrategica : listaDeAcciones) {\n\n                    \/\/ Si existen Aportes Estrategicos\n                    if (!accionEstrategica.getAporteEstrategicoList().isEmpty()) {\n                        List&lt;AporteEstrategico> listaDeAportes;\n                        listaDeAportes = accionEstrategica.getAporteEstrategicoList();\n                        for (AporteEstrategico aporteEstrategico : listaDeAportes){\n\n                            \/\/ Obtener el plan de Aporte Estrategico y agregarlo a la lista\n                            PlanAporteEstrategico planAporteEstrategico = aporteEstrategico.getPlanAporteEstrategico();\n\n                            \/\/ Verificar si el plan ya est\u00e1 en la lista\n                            if (!listaPlanesAporteEstrategicosPorAprobar.contains(planAporteEstrategico)) {\n                                \/\/ Si no est\u00e1 presente, agr\u00e9galo a la lista\n                                listaPlanesAporteEstrategicosPorAprobar.add(planAporteEstrategicoService.find(planAporteEstrategico.getId()));\n                            }\n                        }\n                    }\n                }\n\n                \/\/Mandar a Aprobar los Planes de Aportes Estrategicos\n                if(!listaPlanesAporteEstrategicosPorAprobar.isEmpty()){\n                    for (PlanAporteEstrategico planAporteEstrategico: listaPlanesAporteEstrategicosPorAprobar){\n                        \/\/ Enviar Se\u00f1al\n                        this.enviarSenialDesdeFlujo(planAporteEstrategico);\n                    }\n                }\n            }\n\n\n    }<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Y les va a enviar la se\u00f1al con esta funci\u00f3n<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>\/**\n     * Metodo que envia la se\u00f1al a los planes de aporte para que continuen el flujo\n     *\n     * @param planAporteEstrategico\n     * @author Gustavo Matamoros Gonz\u00e1lez\n     * @since 02\/02\/24\n     *\/\n    public void enviarSenialDesdeFlujo(PlanAporteEstrategico planAporteEstrategico) {\n\n        \/\/Obtener la instancia ID\n        String processInstanceId = flowableService.getProcessInstanceId(planAporteEstrategico.getClass().getSimpleName(), String.valueOf(planAporteEstrategico.getId()));\n        \n        \/\/ Enviar la se\u00f1al\n        flowableService.sendSignal(processInstanceId, \"waitForApprovalAporteEstrategico\");\n   \n    }<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Flujo que espera la se\u00f1al: Flujo Plan de Aporte Flujo Padre (quien envia se\u00f1al): Flujo de Acci\u00f3nes<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[607,443],"tags":[604,608,444],"class_list":["post-16406","post","type-post","status-publish","format-standard","hentry","category-flowable","category-sigesa","tag-flowable","tag-senal","tag-sigesa"],"blocksy_meta":[],"_links":{"self":[{"href":"https:\/\/sada.services\/index.php?rest_route=\/wp\/v2\/posts\/16406","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sada.services\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sada.services\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sada.services\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/sada.services\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=16406"}],"version-history":[{"count":1,"href":"https:\/\/sada.services\/index.php?rest_route=\/wp\/v2\/posts\/16406\/revisions"}],"predecessor-version":[{"id":16416,"href":"https:\/\/sada.services\/index.php?rest_route=\/wp\/v2\/posts\/16406\/revisions\/16416"}],"wp:attachment":[{"href":"https:\/\/sada.services\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=16406"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sada.services\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=16406"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sada.services\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=16406"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}