logo

NJP

Relanzar un workflow con error

Import · Mar 27, 2018 · article

Hola a todos

Hoy me tocó enfrentarme a una situación nueva, un workflow con error y que no tenía mucha más información que esa en el mapa del workflow, más allá de que había fallado no había generado los "autorizadores" y el item estaba en "waiting for approval".

Lo primero es ir a ver la dashboard "Workflow Operations Dashboard", que nos da bastante información, sobretodo de los contextos de workflow que han fallado.

image

Una vez allí, cuando vamos a ver los que están en error, podemos relanzarlos gracias a un script include OOTB específico para ello:

Workflow().restartWorkflow(glideRecord,boolean);

Según pude ver, este script include y método dice lo siguiente:

            /**
             * Restart workflows associated with a GlideRecord.
             * 
             * If maintainStateFlag is true, then all approvals and tasks will maintain their state. This is used when you want to
             * recalculate the approvals and tasks for a workflow by only adding new approvals and tasks that are required without impacting
             * the current approvals and tasks. (An example of when this would be used is when adding an affected company to a change
             * request. In this case, we want to recalc the approvals so that the new affected company is added as an approver, but none of
             * the existing approvals are affected in any way - that is, we do not want to reset all of the approval processing, we just
             * want to add the one new affected company approval.)
             */
            restartWorkflow: function(/* GlideRecord */current, maintainStateFlag) {
                workflowScriptAPI.restartWorkflow(current, maintainStateFlag);
            },

Cuando el workflow está en error, tenía esto en su mapa: Un mensaje de error y la hora. No había ninguna actividad en marcha

image

Si voy a ver el contexto del workflow con el link de "Show context", no tenemos el botón "Nudge" (que permite relanzarlo luego de usar el script include).

image

Para solucionarlo, segui estos pasos

  1. Crear un fix script que hace restart del workflow
  2. Una vez lanzado el fix script, ir al contexto del workflow y darle al botón de "Nudge"

En mi caso, creé un fix script muy simple (y nada dinámico image pero que me ayudó a solventar la situación:

var gr = new GlideRecord("sc_req_item");
gr.addQuery("sys_id", 'sys_id'); //sys_id de sc_req_item. el sc_req_item lo obtengo de la tabla wf_context con aquellos state = faulted, que es lo mismo que muestra la dashboard de los contextos de workflow con error
gr.query();
if (gr.next()) {
    new Workflow().restartWorkflow(gr,false);
}

Una vez ejecutado esto, el workflow comienza otra vez, pero se posiciona en el "Begin" y no avanza

image

Si vamos de nuevo al contexto, ya tenemos el botón de "Nudge" y eso hace que avance el workflow a la siguiente actividad y el workflow siga su camino

image

image

En mi caso funcionó. Seguramente si el workflow está para otras tablas sea aplicable este workaround.

Espero que os sirva, a mi me salvó y por eso quise compartirlo

Ariel

PD: por favor marque mi respuesta correcta o útil si le he ayudado. También puede poner un marcador. Gracias

View original source

https://www.servicenow.com/community/spain-snug/relanzar-un-workflow-con-error/ta-p/2328375