FlowAPI - com escopo, global

  • Versão de lançamento: Yokohama
  • Atualizado 30 de jan. de 2025
  • 44 min. de leitura
  • A FlowAPI fornece métodos para executar ações, fluxos ou subfluxos em scripts do lado do servidor usando métodos de bloqueio ou de não bloqueio.

    Acesse métodos FlowAPI em scripts globais e com escopo usando o namespace sn_fd. Crie chamadas para seus fluxos usando a ação Snippet de código em Workflow Studio ou use os métodos detalhados aqui para atualizar os scripts manualmente.

    Nota:
    Em instâncias separadas por domínio, fluxos, subfluxos e ações acionadas por esta API são executados no domínio do usuário que iniciou o script. Por exemplo, se um usuário no domínio Acme iniciar um script que aciona um fluxo, o fluxo será executado no domínio Acme e só poderá acessar dados da Acme, mesmo se o fluxo for executado como o Usuário do sistema.
    Nota:
    Para otimizar o desempenho da instância, evite chamar esses métodos de um script de regra de negócio assíncrono. Em vez disso, crie um registro de trabalho agendado na IU Workflow Studio.

    FlowAPI - cancel (cadeia de caracteres contextId, motivo da cadeia de caracteres)

    Cancela um fluxo, subfluxo ou ação pausada ou em execução.

    Tabela 1. Parâmetros
    Nome Tipo Descrição
    contextId Cadeia de caracteres Sys_id do registro de detalhes de execução para o fluxo, subfluxo ou ação. Acesse os detalhes da execução navegando até a guia Execuções de fluxo em Workflow Studioou passe o sys_id do registro de contexto retornado pelos métodos startFlow(), startSubflow()ou startAction().
    Nota:
    Pode haver um pequeno atraso no cancelamento se o contexto de destino estiver sendo executado em um nó diferente da instância. Os contextos em execução no mesmo nó são cancelados imediatamente. Os contextos em execução em outro nó devem aguardar primeiro o cancelamento para ser encaminhado para o nó apropriado.
    motivo Cadeia de caracteres Opcional. Motivo para cancelar o fluxo, subfluxo ou ação. Aparece no campo Mensagem da tabela Entradas de log do mecanismo de fluxo [sys_flow_log].
    Tabela 2. Retornos
    Tipo Descrição
    vazio

    Este exemplo usa o valor de retorno do método startFlow() para cancelar quaisquer fluxos de longa execução.

    (function() { 
    
    var now_GR = new GlideRecord('incident'); 
    now_GR.addQuery('number', 'INC0000050'); 
    now_GR.query(); 
    now_GR.next(); 
    
          try { 
              var inputs = {}; 
              inputs['current'] = now_GR; // GlideRecord of table: 
              inputs['table_name'] = 'incident'; 
    
              // Starts the flow asynchronously.
              var result = sn_fd.FlowAPI.getRunner()
              .flow('global.myFlow')
              .inBackground()
              .withInputs(inputs)
              .run();
    
              var contextId = result.getContextId();
              var dateRun = result.getDate();
              var domainUsed = result.getDomainId();
              var flowName = result.getFlowObjectName();
              var flowObjectType = result.getFlowObjectType(); 
    
          } catch (ex) { 
              var message = ex.getMessage(); 
              gs.error(message); 
          } 
    })();
    
     
    // Call the cancel() method using the context Id returned from the startFlow() method
    sn_fd.FlowAPI.cancel(contextId, 'Flow took too long to execute.');

    Este exemplo cancela todos os fluxos chamados de Fluxo de teste.

    var now_GR = new GlideRecord("sys_flow_context");
    now_GR.addQuery("name", "Test Flow");
    now_GR.query();
    
    while (now_GR.next()) {
    sn_fd.FlowAPI.cancel(now_GR.getUniqueValue(), 'Canceling Test Flows');
    } 

    FlowAPI - executeAction(cadeia de caracteres nome, entradas de mapa, tempo limite de número)

    Executa uma ação de um script do lado do servidor de forma síncrona.

    Execute uma ação de dentro de uma regra de negócio, inclusão de script ou qualquer outro script do lado do servidor. As ações executadas usando este método são executadas de forma síncrona, portanto, o método tem acesso às saídas criadas pela ação. Use startAction para executar uma ação de forma assíncrona.
    Nota:
    Esta API foi substituída por ScriptableFlowRunner - com escopo, o que descontinua os métodos existentes usados para criar objetos e executar Workflow Studio fluxos e ações. Use o método getRunner() na classe FlowAPI para retornar um objeto ScriptableFlowRunner e usar os métodos associados. Use os métodos ScriptableFlowRunner se precisar oferecer suporte à separação de domínio.
    Nota:
    Este método executa a ação como o usuário que inicia a sessão.
    Tabela 3. Parâmetros
    Nome Tipo Descrição
    nome Cadeia de caracteres O escopo e o nome da ação a ser executada, por exemplo, global.action_name.
    entradas Mapa Pares de nome-valor que definem entradas de ação. Use o nome da entrada, não o rótulo da entrada.
    timeout Número Opcional. Tempo limite em milissegundos. Este valor substitui o tempo limite padrão de 30 segundos especificado pela propriedade do sistema com.glide.hub.flow_api.default_execution_time. Depois que o tempo limite expirar, uma exceção será lançada.
    Tabela 4. Retornos
    Tipo Descrição
    Objeto As saídas de ação.

    Neste exemplo, o script usa sn_fd.FlowAPI.executeAction para executar uma ação chamada actionforpassword2test no escopo global. Uma variável chamada entradas contém as entradas para a ação. Nesse caso, um nome e uma senha. As saídas da ação são armazenadas na variável de saídas, que, neste caso, é um objeto de senha criptografado. O código é encapsulado em uma instrução de tentativa/catch para capturar quaisquer erros que possam ocorrer quando o fluxo é executado.

    (function() {
    	
      try {
        var inputs = {};
        inputs['name'] = ; // String 
        inputs['password2'] = ; // Password (2 Way Encrypted) 
    		
        // Execute Synchronously: Run in foreground. Code snippet has access to outputs.
        // var timeout = ; //timeout in ms
        //sn_fd.FlowAPI.executeAction('global.actionforpassword2test', inputs, timeout)
        var outputs = sn_fd.FlowAPI.executeAction('global.actionforpassword2test', inputs);
    
        // Get Outputs:
        // Note: outputs can only be retrieved when executing synchronously.
        var output = outputs['output']; // Password (2 Way Encrypted)
    		
      } catch (ex) {
        var message = ex.getMessage();
        gs.error(message);
      }
    })();

    FlowAPI - executeActionQuick(cadeia de caracteres nome, entradas de mapa, tempo limite de número)

    Executa uma ação de um script do lado do servidor de forma síncrona a partir da sessão do usuário atual sem criar detalhes de execução ou outros registros relacionados. Melhore o desempenho eliminando a sobrecarga de manutenção de registros. Use esta API para aumentar a velocidade do processamento de alto volume, por exemplo, várias execuções por segundo, em um ambiente de produção.

    Emissão de relatórios e registros gerados
    Este método não cria detalhes de execução e registros de contexto, independentemente das configurações Workflow Studio.
    Aguardar suporte
    Este método não é compatível com a pausa da ação para aguardar as condições. Não há suporte para etapas que pausam para condições de espera, como Solicitar aprovação ou Aguardar condição.
    Suporte ao MID Server
    Este método não é compatível com a pausa de uma ação para ser executada em um MID Server.
    Nota:
    Esta API foi substituída por ScriptableFlowRunner - com escopo, o que descontinua os métodos existentes usados para criar objetos e executar Workflow Studio fluxos e ações. Use o método getRunner() na classe FlowAPI para retornar um objeto ScriptableFlowRunner e usar os métodos associados. Use os métodos ScriptableFlowRunner se precisar oferecer suporte à separação de domínio.
    Tabela 5. Parâmetros
    Nome Tipo Descrição
    nome Cadeia de caracteres Escopo e nome interno da ação a ser executada. Por exemplo, global.action_name. Localize o campo Nome interno na lista de ações Workflow Studio.
    entradas Mapa Pares de nome-valor que definem entradas de ação. Você pode encontrar as entradas de ação disponíveis e os tipos de dados necessários em Entradas na descrição da ação. Use o nome da entrada, não o rótulo da entrada. Por exemplo, {'table':'incident','sys_id':'a39d8e3cf0212300964feeefe80ff0ed'}.
    timeout Número

    Opcional. Tempo limite em milissegundos. Este valor substitui o tempo limite padrão de 30 segundos especificado pela propriedade do sistema com.glide.hub.flow_api.default_execution_time. Depois que o tempo limite expirar, uma exceção será lançada.

    Tabela 6. Retornos
    Tipo Descrição
    Objeto Objeto que contém saídas definidas pela ação. Você pode encontrar as saídas da ação em Saídas na descrição da ação.
    (function() {
      try {
    
        var grIncident = new GlideRecord('incident');
        grIncident.get('57af7aec73d423002728660c4cf6a71c');
    
        var inputs = {};
        inputs['variable'] = grIncident;
    
        var outputs = sn_fd.FlowAPI.executeActionQuick('global.update_record_test', inputs);
    
        // Get Outputs:
        // Note: outputs can only be retrieved when executing synchronously.
        var output1 = outputs['output1']; 
    
      } catch (ex) { 
        var message = ex.getMessage();
        gs.error(message);
        }
    	
    })();

    FlowAPI - executeDataStreamAction (nome da cadeia de caracteres, entradas de mapa, tempo limite de número)

    Executa uma ação de fluxo de dados de forma síncrona a partir de um script do lado do servidor e retorna um objeto ScriptableDataStream.

    Para obter mais informações sobre ações de fluxo de dados, consulte Ações e paginação de fluxo de dados.

    Nota:
    Esta API foi substituída por ScriptableFlowRunner - com escopo, o que descontinua os métodos existentes usados para criar objetos e executar Workflow Studio fluxos e ações. Use o método getRunner() na classe FlowAPI para retornar um objeto ScriptableFlowRunner e usar os métodos associados. Use os métodos ScriptableFlowRunner se precisar oferecer suporte à separação de domínio.
    Nota:
    Sempre encapsule a lógica de fluxo de dados em um bloco tentar/capturar para detectar erros. Sempre inclua uma declaração final que termina com o método close() da classe ScriptableDataStream para fechar o fluxo de dados e evitar problemas de desempenho.
    Tabela 7. Parâmetros
    Nome Tipo Descrição
    nome Cadeia de caracteres O escopo e o nome da ação de fluxo de dados a ser executada. Por exemplo, global.data_stream_action_name.
    entradas Mapa Pares de nome-valor que definem entradas de ação. Use o nome da entrada, não o rótulo da entrada. Se a ação não tiver entradas, não inclua este parâmetro.
    timeout Número Opcional. Quantidade de tempo antes que a ação expire. Depois que o tempo limite expirar, uma exceção será lançada. O tempo limite se aplica somente ao método executeDataStreamAction, não aos métodos na classe ScriptableDataStream.

    Padrão: 30000, especificado pela propriedade do sistema com.glide.hub.flow_api.default_execution_time

    Unidade: Milissegundos

    Tabela 8. Retornos
    Tipo Descrição
    ScriptableDataStream Um objeto usado para iterar itens no fluxo de dados. Use os métodos na classe ScriptableDataStream para interagir com este objeto. Consulte API ScriptableDataStream.

    Este exemplo cria um registro de incidente para cada item retornado no fluxo de dados.

    (function() {
    	
      try {
    
        // Execute Data Stream Action. 
        var stream = sn_fd.FlowAPI.executeDataStreamAction('x_my_scope.data_stream_name');
    
        // Process each item in the data stream
        while (stream.hasNext()) {
    
          // Get a single item from the data stream.
          var item = stream.next();
    
          // Use the item. 
          var now_GR = new GlideRecord('incident');
          now_GR.setValue('number',item.id);
          now_GR.setValue('short_description',item.name);
          now_GR.insert();
    		
          // By default, this code snippet will terminate after 10 items.
          // Remove or modify this limit after testing your code.
          if (stream.getItemIndex() >= 9) {
            break;
          }
        }
      } catch (ex) {
        var message = ex.getMessage();
        gs.error(message);
      } finally {
        stream.close();
      }
    	
    })();

    FlowAPI - executeFlow(cadeia de caracteres nome, entradas de mapa, tempo limite de número)

    Executa um fluxo de um script do lado do servidor de forma síncrona.

    Execute um fluxo de dentro de uma regra de negócio, inclusão de script ou qualquer outro script do lado do servidor. Os fluxos executados usando este método são executados de forma síncrona. Use startFlow para executar um fluxo de forma assíncrona.
    Nota:
    Esta API foi substituída por ScriptableFlowRunner - com escopo, o que descontinua os métodos existentes usados para criar objetos e executar Workflow Studio fluxos e ações. Use o método getRunner() na classe FlowAPI para retornar um objeto ScriptableFlowRunner e usar os métodos associados. Use os métodos ScriptableFlowRunner se precisar oferecer suporte à separação de domínio.
    Nota:
    Este método executa o fluxo como o usuário especificado nas propriedades de fluxo.
    Tabela 9. Parâmetros
    Nome Tipo Descrição
    nome Cadeia de caracteres O escopo e o nome do fluxo a ser executado, por exemplo, global.flow_name.
    entradas Mapa Pares de nome-valor que definem entradas de gatilho. Use o nome da entrada, não o rótulo da entrada.
    timeout Número Opcional. Tempo limite em milissegundos. Este valor substitui o tempo limite padrão de 30 segundos especificado pela propriedade do sistema com.glide.hub.flow_api.default_execution_time. Depois que o tempo limite expirar, uma exceção será lançada.
    Tabela 10. Retornos
    Tipo Descrição
    Nenhum(a) A operação normal não produz nenhum valor de retorno.
    Exceção A API lança uma exceção quando um fluxo chamado de forma síncrona é pausado. A execução atual está no estado de espera. Na maioria dos casos, a exceção é removida quando o fluxo é retomado. No entanto, a API não pode retomar um fluxo que foi enviado para um MID Server.

    Este exemplo usa sn_fd.FlowAPI.executeFlow para executar um fluxo global chamado test_flow. Este fluxo normalmente é acionado quando um registro na tabela de incidentes é atualizado. Como você está ativando o fluxo a partir de um script, forneça essas informações. O código cria uma variável de entradas que contém o registro atual e a tabela do registro. O código é encapsulado em uma instrução de tentativa/catch para capturar quaisquer erros que possam ocorrer quando o fluxo é executado.

    (function() {
      try {
        var inputs = {};
        inputs['current'] = ; // GlideRecord of table:  
        inputs['table_name'] = 'incident';
    
        // Execute Synchronously: Run in foreground.
        // var timeout = ; //timeout in ms
        //sn_fd.FlowAPI.executeFlow('global.test_flow', inputs, timeout)
        sn_fd.FlowAPI.executeFlow('global.test_flow', inputs);
      } catch (ex) {
        var message = ex.getMessage();
        gs.error(message);
      }
    })();

    FlowAPI - executeFlowQuick(cadeia de caracteres nome, entradas de mapa, tempo limite de número)

    Executa um fluxo, subfluxo, ação ou ação de Fluxo de dados de um script do lado do servidor de forma síncrona ou assíncrona sem criar detalhes de execução ou outros registros relacionados. Melhora o desempenho ao eliminar a sobrecarga de manutenção de registros. Use esta API para aumentar a velocidade do processamento de alto volume, por exemplo, várias execuções por segundo, em um ambiente de produção.

    Emissão de relatórios e registros gerados
    Este método não cria detalhes de execução e registros de contexto, independentemente das configurações Workflow Studio.
    Executar como usuário
    Este método executa o fluxo como o usuário que inicia a sessão. Não há suporte para definir o fluxo para ser executado como o usuário do sistema ou representar um usuário.
    Aguardar suporte
    Este método não é compatível com a pausa do fluxo para aguardar as condições. Ações ou lógica de fluxo que pausam para condições de espera, como Solicitar aprovação, Aguardar condição ou Aguardar uma duração, não são compatíveis.
    Suporte ao MID Server
    Este método não é compatível com a pausa de um fluxo para ser executado a partir de um MID Server.
    Nota:
    Esta API foi substituída por ScriptableFlowRunner - com escopo, o que descontinua os métodos existentes usados para criar objetos e executar Workflow Studio fluxos e ações. Use o método getRunner() na classe FlowAPI para retornar um objeto ScriptableFlowRunner e usar os métodos associados. Use os métodos ScriptableFlowRunner se precisar oferecer suporte à separação de domínio.
    Tabela 11. Parâmetros
    Nome Tipo Descrição
    nome Cadeia de caracteres Escopo e nome interno do fluxo a ser executado. Por exemplo, global.flow_name. Localize o campo Nome interno na lista de fluxos Workflow Studio.
    entradas Mapa Pares de nome-valor que definem entradas de gatilho. Você pode encontrar as entradas de gatilho disponíveis e os tipos de dados necessários na seção Gatilho do fluxo. Use o nome da entrada, não o rótulo da entrada. Por exemplo, {'table':'incident','sys_id':'a39d8e3cf0212300964feeefe80ff0ed'}.
    timeout Número Opcional. Tempo limite em milissegundos. Este valor substitui o tempo limite padrão de 30 segundos especificado pela propriedade do sistema com.glide.hub.flow_api.default_execution_time. Depois que o tempo limite expirar, uma exceção será lançada.
    Tabela 12. Retornos
    Tipo Descrição
    vazio
    (function() {
    	
      try {
        var grIncident = new GlideRecord('incident');
        grIncident.get('ed92e8d173d023002728660c4cf6a7bc');
    
        var inputs = {};
        inputs['current'] = grIncident;
        inputs['table_name'] = 'incident';
    		
        sn_fd.FlowAPI.executeFlowQuick('global.test_quick_flow', inputs);
    		
      } catch (ex) {
        var message = ex.getMessage();
        gs.error(message);
    	}
    	
    })();

    FlowAPI - executeSubflow (cadeia de caracteres nome, entradas de mapa, tempo limite de número)

    Executa um subfluxo de um script do lado do servidor de forma síncrona.

    Execute um subfluxo de dentro de uma regra de negócio, inclusão de script ou qualquer outro script do lado do servidor. Os subfluxos executados usando este método são executados de forma síncrona. Use startSubflow para executar um subfluxo de forma assíncrona.
    Nota:
    Esta API foi substituída por ScriptableFlowRunner - com escopo, o que descontinua os métodos existentes usados para criar objetos e executar Workflow Studio fluxos e ações. Use o método getRunner() na classe FlowAPI para retornar um objeto ScriptableFlowRunner e usar os métodos associados. Use os métodos ScriptableFlowRunner se precisar oferecer suporte à separação de domínio.
    Nota:
    Este método executa o fluxo como o usuário especificado nas propriedades de fluxo.
    Tabela 13. Parâmetros
    Nome Tipo Descrição
    nome Cadeia de caracteres O escopo e o nome do subfluxo a ser executado, por exemplo, global.subflow_name.
    entradas Mapa Pares de nome-valor que definem entradas de subfluxo. Use o nome da entrada, não o rótulo da entrada.
    timeout Número Opcional. Tempo limite em milissegundos. Este valor substitui o tempo limite padrão de 30 segundos especificado pela propriedade do sistema com.glide.hub.flow_api.default_execution_time. Depois que o tempo limite expirar, uma exceção será lançada.
    Tabela 14. Retornos
    Tipo Descrição
    Objeto Objeto que contém as saídas de subfluxo.
    Exceção A API lança uma exceção quando um fluxo chamado de forma síncrona é pausado. A execução atual está no estado de espera. Na maioria dos casos, a exceção é removida quando o fluxo é retomado. No entanto, a API não pode retomar um fluxo que foi enviado para um MID Server.

    Neste exemplo, o script usa sn_fd.FlowAPI.executeSubflow para executar um subfluxo chamado subflowTest no escopo global. Uma variável chamada entradas contém as entradas para o subfluxo. Nesse caso, um nome e uma senha. O código é encapsulado em uma instrução de tentativa/catch para capturar quaisquer erros que possam ocorrer quando o fluxo é executado.

    
    (function() {
    	
    	try {
    		var inputs = {};
    		inputs['name'] = ; // String 
    		inputs['password2'] = ; // Password (2 Way Encrypted) 
    		
    		// Execute Synchronously: Run in foreground.
    		// var timeout = ; //timeout in ms
                  //sn_fd.FlowAPI.executeSubflow('global.subflowTest', inputs, timeout)
                  var outputs = sn_fd.FlowAPI.executeSubflow('global.subflowTest', inputs);
    		
    	} catch (ex) {
    		var message = ex.getMessage();
    		gs.error(message);
    	}	
    })();

    FlowAPI - executeSubflowQuick(cadeia de caracteres nome, entradas de mapa, tempo limite de número)

    Execute um subfluxo de um script do lado do servidor de forma síncrona a partir da sessão do usuário atual sem criar detalhes de execução ou outros registros relacionados. Melhore o desempenho eliminando a sobrecarga de manutenção de registros. Use esta API para aumentar a velocidade do processamento de alto volume, por exemplo, várias execuções por segundo, em um ambiente de produção.

    Emissão de relatórios e registros gerados
    Este método não cria detalhes de execução e registros de contexto, independentemente das configurações Workflow Studio.
    Executar como usuário
    Este método executa o fluxo como o usuário que inicia a sessão. Não há suporte para definir o fluxo para ser executado como o usuário do sistema ou representar um usuário.
    Aguardar suporte
    Este método não é compatível com a pausa do fluxo para aguardar as condições. Ações ou lógica de fluxo que pausam para condições de espera, como Solicitar aprovação, Aguardar condição ou Aguardar uma duração, não são compatíveis.
    Suporte ao MID Server
    Este método não é compatível com a pausa de um fluxo para ser executado a partir de um MID Server.
    Nota:
    Esta API foi substituída por ScriptableFlowRunner - com escopo, o que descontinua os métodos existentes usados para criar objetos e executar Workflow Studio fluxos e ações. Use o método getRunner() na classe FlowAPI para retornar um objeto ScriptableFlowRunner e usar os métodos associados. Use os métodos ScriptableFlowRunner se precisar oferecer suporte à separação de domínio.
    Tabela 15. Parâmetros
    Nome Tipo Descrição
    nome Cadeia de caracteres Escopo e nome interno do subfluxo a ser executado. Por exemplo, global.subflow_name. Localize o campo Nome interno na lista de Workflow Studio subfluxos.
    entradas Mapa Pares de nome-valor que definem entradas de subfluxo. Você pode encontrar as entradas de subfluxo disponíveis e os tipos de dados necessários em Entradas no subfluxo. Use o nome da entrada, não o rótulo da entrada. Por exemplo, {'table':'incident','sys_id':'a39d8e3cf0212300964feeefe80ff0ed'}.
    timeout Número Opcional. Tempo limite em milissegundos. Este valor substitui o tempo limite padrão de 30 segundos especificado pela propriedade do sistema com.glide.hub.flow_api.default_execution_time. Depois que o tempo limite expirar, uma exceção será lançada.
    Tabela 16. Retornos
    Tipo Descrição
    Objeto Objeto que contém saídas definidas pelo subfluxo. Você pode encontrar as saídas do subfluxo em Entradas e saídas de subfluxo na descrição do subfluxo.
    (function() {
    
      try {
        var grIncident = new GlideRecord('incident');
        grIncident.get('57af7aec73d423002728660c4cf6a71c');
    
        var inputs = {};
        inputs['variable'] = grIncident;
    
        var outputs = sn_fd.FlowAPI.executeSubflowQuick('global.test_quick_run_subflow', inputs);
    
        // Get Outputs:
        // Note: outputs can only be retrieved when executing synchronously.
        var output1 = outputs['output1']; 
    		
      } catch (ex) {
        var message = ex.getMessage();
        gs.error(message);
        }
    	
    })();

    FlowAPI - getErrorMessage(cadeia de caracteres contextId)

    Retorna as mensagens de erro produzidas por um fluxo, subfluxo ou ação. Este método não pode retornar mensagens de fluxos, subfluxos ou ações executadas com a API quick().

    Tabela 17. Parâmetros
    Nome Tipo Descrição
    contextId Cadeia de caracteres O sys_id do fluxo, subfluxo ou ação cujas mensagens de erro você deseja obter.
    Tabela 18. Retornos
    Tipo Descrição
    Cadeia de caracteres A última operação executada e a mensagem de erro produzida.

    Este exemplo inicia um subfluxo global chamado test_error_subflow e retorna todas as mensagens de erro que ele produz. Normalmente, um único script não executa um fluxo e recebe suas mensagens de erro. Normalmente, outro script ou Workflow Studio já teria executado o fluxo. O código é encapsulado em uma instrução de tentativa/catch para capturar quaisquer erros que possam ocorrer quando o fluxo é executado.

    (function() {
    
      try {
        // Gather inputs to call flow
        var inputs = {};
        inputs['ah_task'] = myTaskRecord; // GlideRecord of table: task
        inputs['ah_comment'] ='Test Comment' ; // String
    
        // Call flow with known errors
        var contextId = sn_fd.FlowAPI.startSubflow('global.test_error_subflow', inputs);
    
        // Get flow error message
        var errormsg = sn_fd.FlowAPI.getErrorMessage(contextId);
        return errormsg;
    
      } catch (ex) {
        var message = ex.getMessage();
        gs.error(message);
      }
    })();
    

    Saída:

    Operation (test_error_flow.574033f6db6811102166e2291396199f.274073f6db6811102166e22913961908.0be0d916c31332002841b63b12d3ae13) failed with error: com.snc.process_flow.exception.OpException: Value of field record is not a GlideRecord
    at com.snc.process_flow.operation.FieldValue.getGlideRecord(FieldValue.java:145)
    at com.snc.process_flow.operation.CRUDOperation.getInputValidGlideRecord(CRUDOperation.java:54)
    at com.snc.process_flow.operation.RecordDeleteOperation.run(RecordDeleteOperation.java:26)
    at com.snc.process_flow.engine.Operation.execute(Operation.java:212)
    at com.snc.process_flow.engine.restricted_caller_access.ExecuteWithCallerAccessTracking.executeWithMetaStack(ExecuteWithCallerAccessTracking.java:31)
    at com.snc.process_flow.engine.ProcessEngine.executeOps(ProcessEngine.java:570)
    at com.snc.process_flow.engine.ProcessEngine.runInternal(ProcessEngine.java:476)
    at com.snc.process_flow.engine.ProcessEngine.run(ProcessEngine.java:462)
    at com.snc.process_flow.engine.ProcessAutomation.run(ProcessAutomation.java:86)
    at com.snc.process_flow.engine.GlideProcessAutomation.runSync(GlideProcessAutomation.java:155)
    at com.snc.process_flow.engine.GlideProcessAutomation.runWithDomain(GlideProcessAutomation.java:270)
    at com.snc.process_flow.engine.GlideProcessAutomation.lambda$runAsUserSync$1(GlideProcessAutomation.java:237)
    at com.snc.process_flow.engine.PFSessionClone.run(PFSessionClone.java:70)
    at com.snc.process_flow.engine.GlidePFSession.runPlanAsUserSession(GlidePFSession.java:42)
    at com.snc.process_flow.engine.GlideProcessAutomation.runAsUserSync(GlideProcessAutomation.java:235)
    at com.snc.process_flow.engine.GlideProcessAutomation.messageFlow(GlideProcessAutomation.java:330)
    at com.snc.process_flow.engine.GlideProcessAutomation.messageFlow(GlideProcessAutomation.java:309)
    at com.snc.process_flow.engine.ProcessHubEventHandler.doSendMessage(ProcessHubEventHandler.java:475)
    at com.snc.process_flow.engine.ProcessHubEventHandler.process(ProcessHubEventHandler.java:119)
    at com.snc.process_flow.engine.ProcessHubEventHandler.process(ProcessHubEventHandler.java:91)
    at com.snc.process_flow.engine.FlowEventManager.processEvents(FlowEventManager.java:122)
    at com.glide.job.EventHandlerJob.execute(EventHandlerJob.java:38)
    at com.glide.schedule.JobExecutor.lambda$executeJob$0(JobExecutor.java:129)
    at com.snc.db.data_replicate.replicator.DataReplicationAdvisors.runInOriginatorContext(DataReplicationAdvisors.java:73)
    at com.glide.schedule.JobExecutor.lambda$inDataReplicationContext$2(JobExecutor.java:159)
    at com.glide.schedule.JobExecutor.executeJob(JobExecutor.java:132)
    at com.glide.schedule.JobExecutor.execute(JobExecutor.java:116)
    at com.glide.schedule_v2.SchedulerWorkerThread.executeJob(SchedulerWorkerThread.java:338)
    at com.glide.schedule_v2.SchedulerWorkerThread.lambda$process$0(SchedulerWorkerThread.java:220)
    at com.glide.worker.TransactionalWorkerThread.executeInTransaction(TransactionalWorkerThread.java:35)
    at com.glide.schedule_v2.SchedulerWorkerThread.process(SchedulerWorkerThread.java:220)
    at com.glide.schedule_v2.SchedulerWorkerThread.run(SchedulerWorkerThread.java:101)

    FlowAPI – getFlowStages(String scopedFlowName)

    Retorne uma cadeia de caracteres JSON que contém a lista de fases de fluxo.

    Tabela 19. Parâmetros
    Nome Tipo Descrição
    scopedFlowName Cadeia de caracteres O escopo da aplicação e o nome do fluxo cujas fases você deseja obter.
    Tabela 20. Retornos
    Tipo Descrição
    Cadeia de caracteres Cadeia de caracteres no formato JSON que lista as fases do fluxo por seus valores de registro de fase.

    Este exemplo mostra como obter as fases do fluxo de solicitação de item do Catálogo de serviços.

    (function() {
    
      try {
        // Name of flow with stages
        var flowName = "service_catalog_item_request";
    
        // Get flow stages
        var flowStages = sn_fd.FlowAPI.getFlowStages(flowName);
        //Print JSON as info message  
        gs.info(flowStages);
        return flowStages;
    
      } catch (ex) {
        var message = ex.getMessage();
        gs.error(message);
      }
    })();
    

    Saída:

    A cadeia de caracteres JSON contém pares de nome-valor para um campo de fase. Para obter mais informações, consulte .

    [
      {
        "label": "Manager Approval",
        "value": "manager_approval",
        "type": "standard",
        "duration": "1970-01-03 00:00:00",
        "states": {
          "pending": "Pending - has not started",
          "inprogress": "In progress",
          "skipped": "Skipped",
          "complete": "Completed",
          "error": "Error"
        },
        "flow": "30f3d26187e92300e0ef0cf888cb0b91",
        "alwaysShow": true,
        "order": 0
      },
      {
        "label": "Set current stage state to:  [Error]",
        "value": "Set current stage state to:  [Error]",
        "type": "error",
        "duration": "1970-01-01 00:00:00",
        "states": {
          "pending": "Pending - has not started",
          "inprogress": "In progress",
          "skipped": "Skipped",
          "complete": "Completed",
          "error": "Error"
        },
        "flow": "30f3d26187e92300e0ef0cf888cb0b91",
        "alwaysShow": false,
        "order": 0
      },
      {
        "label": "Dept. Head Approval",
        "value": "Dept. Head Approval",
        "type": "standard",
        "duration": "1970-01-03 00:00:00",
        "states": {
          "pending": "Pending - has not started",
          "inprogress": "In progress",
          "skipped": "Skipped",
          "complete": "Completed",
          "error": "Error"
        },
        "flow": "30f3d26187e92300e0ef0cf888cb0b91",
        "alwaysShow": true,
        "order": 1
      },
      {
        "label": "CIO Approval",
        "value": "CIO Approval",
        "type": "standard",
        "duration": "1970-01-03 00:00:00",
        "states": {
          "pending": "Pending - has not started",
          "inprogress": "In progress",
          "skipped": "Skipped",
          "complete": "Completed",
          "error": "Error"
        },
        "flow": "30f3d26187e92300e0ef0cf888cb0b91",
        "alwaysShow": true,
        "order": 2
      },
      {
        "label": "Order Fulfillment",
        "value": "Order Fulfillment",
        "type": "standard",
        "duration": "1970-01-05 00:00:00",
        "states": {
          "pending": "Pending - has not started",
          "inprogress": "In progress",
          "skipped": "Skipped",
          "complete": "Completed",
          "error": "Error"
        },
        "flow": "30f3d26187e92300e0ef0cf888cb0b91",
        "alwaysShow": true,
        "order": 3
      },
      {
        "label": "Backordered",
        "value": "Backordered",
        "type": "standard",
        "duration": "1970-01-15 00:00:00",
        "states": {
          "pending": "Pending - has not started",
          "inprogress": "In progress",
          "skipped": "Skipped",
          "complete": "Completed",
          "error": "Error"
        },
        "flow": "30f3d26187e92300e0ef0cf888cb0b91",
        "alwaysShow": true,
        "order": 4
      },
      {
        "label": "Deployment",
        "value": "Deployment",
        "type": "standard",
        "duration": "1970-01-02 00:00:00",
        "states": {
          "pending": "Pending - has not started",
          "inprogress": "In progress",
          "skipped": "Skipped",
          "complete": "Completed",
          "error": "Error"
        },
        "flow": "30f3d26187e92300e0ef0cf888cb0b91",
        "alwaysShow": true,
        "order": 5
      },
      {
        "label": "Request Cancelled",
        "value": "Request Cancelled",
        "type": "standard",
        "duration": "1970-01-01 00:00:00",
        "states": {
          "pending": "Pending - has not started",
          "inprogress": "In progress",
          "skipped": "Skipped",
          "complete": "Completed",
          "error": "Error"
        },
        "flow": "30f3d26187e92300e0ef0cf888cb0b91",
        "alwaysShow": true,
        "order": 6
      },
      {
        "label": "Completed",
        "value": "complete",
        "type": "standard",
        "duration": "1970-01-01 00:00:00",
        "states": {
          "pending": "Pending - has not started",
          "inprogress": "In progress",
          "skipped": "Skipped",
          "complete": "Completed",
          "error": "Error"
        },
        "flow": "30f3d26187e92300e0ef0cf888cb0b91",
        "alwaysShow": true,
        "order": 7
      }
    ]

    FlowAPI - getOutputs(cadeia de caracteres contextId)

    Retorna as saídas de uma ação ou subfluxo concluído.

    Você pode usar os valores de retorno dos métodos startAction() oustartSubflow() como o parâmetro contextId.
    Nota:
    Esta API foi substituída por ScriptableFlowRunner - com escopo, o que descontinua os métodos existentes usados para criar objetos e executar Workflow Studio fluxos e ações. Use o método getRunner() na classe FlowAPI para retornar um objeto ScriptableFlowRunner e usar os métodos associados. Use os métodos ScriptableFlowRunner se precisar oferecer suporte à separação de domínio.
    Tabela 21. Parâmetros
    Nome Tipo Descrição
    contextId Cadeia de caracteres O sys_id da ação ou subfluxo cujas saídas você deseja obter.
    Tabela 22. Retornos
    Tipo Descrição
    Objeto Objeto que contém as saídas de ação ou subfluxo.

    Este exemplo inicia um subfluxo global chamado test_subflow, aguarda a conclusão do fluxo e obtém seus valores de saída. Normalmente, um único script não executa um fluxo e obtém seus valores de saída. Como um fluxo pode não ser concluído antes da chamada getOutputs(), este exemplo usa um tempo de espera. Normalmente, outro script ou Workflow Studio já teria executado o fluxo. O código é encapsulado em uma instrução de tentativa/catch para capturar quaisquer erros que possam ocorrer quando o fluxo é executado.

    (function() {
    
      try {
        // Gather inputs to call flow
        var inputs = {};
        inputs['ah_task'] = myTaskRecord; // GlideRecord of table: task
        inputs['ah_comment'] ='Test Comment' ; // String
    
        // Call flow
        var contextId = sn_fd.FlowAPI.startSubflow('global.test_subflow', inputs);
    
        // Wait for the flow to finish running
    
        // Get flow outputs
        var outputs = sn_fd.FlowAPI.getOutputs(contextId);
        var output1 = outputs['output1'];
        return output1;
    
      } catch (ex) {
        var message = ex.getMessage();
        gs.error(message);
      }
    })();
    

    FlowAPI - getRunner()

    Retorna um objeto do construtor ScriptableFlowRunner para um fluxo ou ação que você deseja executar.

    Tabela 23. Parâmetros
    Nome Tipo Descrição
    Nenhum
    Tabela 24. Retorna
    Tipo Descrição
    ScriptableFlowRunner Objeto de construtor usado para executar uma ação Workflow Studio, fluxo ou subfluxo.

    Este exemplo executa um fluxo de forma síncrona.

    
    (function() {
      try {
    
        var inputs = {}; 
    
        inputs['sys_id'] = '57af7aec73d423002728660c4cf6a71c';  // Pass the record's sys_id in as input.  
    
        var result = sn_fd.FlowAPI.getRunner()  // Create a ScriptableFlowRunner builder object.
          .action('global.markapproved')        // Run the global scope action named markapproved.
          .inForeground()
          .inDomain('TOP/ACME')                 // Run the action from the TOP/ACME domain.                               
          .withInputs(inputs)
          .run();                               // Run the action and return a FlowRunnerResult object.
    
        var contextId = result.getContextId();  // Retrieve the context ID from the result
        var dateRun = result.getDate();
        var domainUsed = result.getDomainId();  // Retrieve the Domain ID from the result.
        var flowName = result.getFlowObjectName();
        var flowObjectType = result.getFlowObjectType();
    
        var outputs = result.getOutputs();            // Retrieve any outputs from the action execution.
        var newApprovalStatus = outputs['approval'];  // Echo back the approval status for verification.
    		
      } catch (ex) {
        var message = ex.getMessage();
        gs.error(message);
      }
    	
    })();
       

    FlowAPI - getStatus(cadeia de caracteres contextId)

    Retorna o status de um fluxo, subfluxo ou ação.

    Tabela 25. Parâmetros
    Nome Tipo Descrição
    contextId Cadeia de caracteres O sys_id do fluxo, subfluxo ou ação cujo status você deseja obter.
    Tabela 26. Retornos
    Parâmetro Tipo Descrição
    <Object> Objeto Objeto que contém o estado atual do fluxo, subfluxo ou ação como pares de nome-valor.
    {
        "hasLookupError": Boolean,
        "errorMessage": "String",
        "contextStatus": {Object}
      }
    <Object>.hasSearchError Booliano Sinalizador que indica se houve um problema ao pesquisar o status do contexto do fluxo, subfluxo ou ação.
    {
        "hasLookupError": false,
        "errorMessage": "",
        "contextStatus": {Object}
      }
    <Object>.errorMessage Cadeia de caracteres Mensagem de erro retornada pela operação de pesquisa de contexto. Este parâmetro é nulo quando hasLookupError é falso.
    {
        "hasLookupError": false,
        "errorMessage": "",
        "contextStatus": {Object}
      }
    <Object>.contextStatus Objeto Objeto que contém detalhes de estado sobre o fluxo, subfluxo ou ação consultada.
    {
        "hasLookupError": false,
        "errorMessage": "",
        "contextStatus": {
          "state": "COMPLETE",
          "errorState": "NONE"
        }
      }
    <Object>.contextStatus.estado Cadeia de caracteres Estado do fluxo, subfluxo ou contexto de ação. Alguns valores de estado fornecem informações adicionais em parâmetros relacionados.
    • COMPLETE fornece informações adicionais no parâmetro errorState
    • ERRO fornece informações adicionais no parâmetro message
    • CANCELLED fornece informações adicionais no parâmetro canceledReason
    • IN_PROgress fornece informações adicionais no parâmetro isRunOnMid
    • WAITING fornece informações adicionais no parâmetro waitingOn
    {
        "hasLookupError": false,
        "errorMessage": "",
        "contextStatus": {
          "state": "COMPLETE",
          "errorState": "NONE"
        }
      }
    <Object>.contextStatus.errorState Cadeia de caracteres Estado de conclusão do fluxo produzido pelo processamento de erros de fluxo. A API só gera este parâmetro quando o fluxo, subfluxo ou ação está no estado CONCLUÍDO.
    • ERRO_CAUGHT
    • ERRO_IGNOADO
    {
        "hasLookupError": false,
        "errorMessage": "",
        "contextStatus": {
          "state": "COMPLETE",
          "errorState": "ERROR_CAUGHT"
        }
      }
    <Object>.contextStatus.message Cadeia de caracteres Mensagem de erro retornada pelo fluxo, subfluxo ou ação. A API só gera este parâmetro quando o fluxo, subfluxo ou ação está no estado ERRO.
    {
        "hasLookupError": false,
        "errorMessage": "",
        "contextStatus": {
          "state": "ERROR",
          "message": "Error:  Error Message! (Process Automation.LOG; line 1)"
        }
      }
    <Object>.contextStatus.canceledReason Cadeia de caracteres Mensagem de cancelamento retornada pelo fluxo, subfluxo ou ação. A API só gera este parâmetro quando o fluxo, subfluxo ou ação está no estado CANCELADO.
    {
        "hasLookupError": false,
        "errorMessage": "",
        "contextStatus": {
          "state": "CANCELLED",
          "canceledReason": "User has requested to stop executing the flow"
        }
      }
    <Object>.contextStatus.isRunOnMid Booliano Sinalizador que indica se o fluxo, subfluxo ou ação é executado em um ambiente do MID Server. A API só gera este parâmetro quando o fluxo, subfluxo ou ação está no estado EM ANDAMENTO.
    {
        "hasLookupError": false,
        "errorMessage": "",
        "contextStatus": {
          "state": "IN_PROGRESS",
          "isRunOnMid": true
        }
      }
      }
    <Object>.contextStatus.waitingOn Matriz Lista de itens que o fluxo, subfluxo ou ação atual está aguardando. A API só gera este parâmetro quando o fluxo, subfluxo ou ação está no estado WAITING.
    {
        "hasLookupError": false,
        "errorMessage": "",
        "contextStatus": {
          "state": "WAITING",
          "waitingOn": [
            {
              "order":"1",
              "stepType": "TIMER",
              "endTime": 1713627497643
            },
            {
              "order":"5",
              "stepType": "WAIT_FOR_CONDITION_WITH_TIMEOUT",
              "table": "incident",
              "condition": "sys_id=10e8b43243200210338774d6ebb8f22d^short_description=112",
              "endTime": 1713645497800
            }
          ]
        }
      }
    <Object>.contextStatus.aguardando.ordem Cadeia de caracteres Número da etapa de fluxo do item que está fazendo com que o fluxo aguarde. Se a ação em espera for uma ação personalizada em um fluxo, a ordem também incluirá um ponto e o número da etapa da ação personalizada pela qual o fluxo está aguardando.
    {
        "hasLookupError": false,
        "errorMessage": "",
        "contextStatus": {
          "state": "WAITING",
          "waitingOn": [
            {
              "order":"1",
              "stepType": "TIMER",
              "endTime": 1713627497643
            },
            {
              "order":"5",
              "stepType": "WAIT_FOR_CONDITION_WITH_TIMEOUT",
              "table": "incident",
              "condition": "sys_id=10e8b43243200210338774d6ebb8f22d^short_description=112",
              "endTime": 1713645497800
            }
          ]
        }
      }
    <Object>.contextStatus.waitingOn.stepType Cadeia de caracteres Tipo de ação ou etapa de fluxo que está fazendo com que o fluxo, subfluxo ou ação aguarde. A API só gera este parâmetro quando o fluxo, subfluxo ou ação está no estado WAITING. Veja alguns exemplos comuns.
    • AGUARDE_PARA_CONDIÇÃO
    • WAIT_FOR_CONDITION_WITH_TIMEOUT
    • SOLICITAR_PARA_APROVAÇÃO
    • CRIAR_TAS_COM_AGUARDAR
    • TEMPORIZADOR
    • ANS_TIMER
    • SUBFLUXO
    <Object>.contextStatus.aguardando.tabela Cadeia de caracteres Nome da tabela que contém o registro que o fluxo, subfluxo ou ação está aguardando. A API só gera este parâmetro quando o fluxo, subfluxo ou ação está no estado WAITING e o stepType é WAIT_FOR_CONDITION, WAIT_FOR_CONDITION_WITH_TIMEOUT, ASK_FOR_APPROVAL ou CREATE_TASK_WITH_WAIT.
    {
        "hasLookupError": false,
        "errorMessage": "",
        "contextStatus": {
          "state": "WAITING",
          "waitingOn": [
              {
              "order":"1",
              "stepType": "WAIT_FOR_CONDITION",
              "table": "incident",
              "condition": "sys_id=1347723243200210338774d6ebb8f285^short_description=1238"
              }
            ]
        }
      }
    <Object>.contextStatus.aguardando.condição Cadeia de caracteres Condição de consulta do registro que o fluxo, subfluxo ou ação está aguardando. A API só gera este parâmetro quando o fluxo, subfluxo ou ação está no estado AGUARDANDO e há uma condição que deve ser atendida para continuar a execução.
    {
        "hasLookupError": false,
        "errorMessage": "",
        "contextStatus": {
          "state": "WAITING",
          "waitingOn": [
              {
              "order":"1",
              "stepType": "WAIT_FOR_CONDITION",
              "table": "incident",
              "condition": "sys_id=1347723243200210338774d6ebb8f285^short_description=1238"
              }
            ]
        }
      }
    <Object>.contextStatus.waitingOn.endTime Números inteiros Hora de término em que o fluxo, subfluxo ou ação está aguardando. A API só gera este parâmetro quando o fluxo, subfluxo ou ação está no estado WAITING e o stepType é WAIT_FOR_CONDITION_WITH_TIMEOUT, TIMER ou SLA_TIMER.
    {
        "hasLookupError": false,
        "errorMessage": "",
        "contextStatus": {
        "state": "WAITING",
        "waitingOn": [
            {
              "order":"3",
              "stepType": "SLA_TIMER",
              "endTime": 1713574610000
            }
        ]
        }
      }
    <Object>.contextStatus.waitingOn.approvalRule Cadeia de caracteres Regra de aprovação que o fluxo, subfluxo ou ação está aguardando. A API só gera este parâmetro quando o fluxo, subfluxo ou ação está no estado WAITING e o stepType é ASK_FOR_APPROVAL.
    {
        "hasLookupError": false,
        "errorMessage": "",
        "contextStatus": {
          "state": "WAITING",
          "waitingOn": [
            {
              "order":"3",
              "stepType": "ASK_FOR_APPROVAL",
              "table": "incident",
              "condition": "sys_id=3bd89703372002103387963174924b20^approvalINapproved,rejected,cancelled",
              "approvalRule": "ApprovesAnyU[a8f98bb0eb32010045e1a5115206fe3a,71826bf03710200044e0bfc8bcbe5d3b]"
            }
          ]
        }
      }
    <Object>.contextStatus.waitingOn.contextId Cadeia de caracteres O sys_id do subfluxo que o fluxo ou o subfluxo está aguardando. A API só gera este parâmetro quando o fluxo ou subfluxo está no estado WAITING e o stepType é SUBFLOW.
    {
        "hasLookupError": false,
        "errorMessage": "",
        "contextStatus": {
        "state": "WAITING",
        "waitingOn": [
            {
              "order":"1",
              "stepType": "SUBFLOW",
              "contextId": "0f724aabd921021020291a665e07e44a"
            }
          ]
        }
      }

    Este exemplo executa um fluxo que contém Faça o seguinte na lógica de fluxo paralelo. Normalmente, um único script não executa um fluxo e recebe suas mensagens de erro. Normalmente, outro script ou Workflow Studio já teria executado o fluxo.

    (function() {
      try {
        var result = sn_fd.FlowAPI.getRunner()  // Create a ScriptableFlowRunner builder object.
          .flow('global.test_do_in_parallel')   // Run the global scope flow named do_in_parallel.
          .run();                               // Run the flow and return a FlowRunnerResult object.
    
        var contextId = result.getContextId();  // Retrieve the context ID from the result
    
        var flowStatus = sn_fd.FlowAPI
          .getStatus(contextId);                // Retrieve any outputs from the flow execution.
    
        JSON.stringfy(flowStatus);              // Convert object to string
        return flowStatus;
    		
      } catch (ex) {
        var message = ex.getMessage();
        gs.error(message);
      }
    	
    })();
    Saída:
    {
        "hasLookupError": false,
        "errorMessage": "",
        "contextStatus": {
          "state": "WAITING",
          "waitingOn": [
            {
              "order":"1",
              "stepType": "TIMER",
              "endTime": 1713627497643
            },
            {
              "order":"5",
              "stepType": "WAIT_FOR_CONDITION_WITH_TIMEOUT",
              "table": "incident",
              "condition": "sys_id=10e8b43243200210338774d6ebb8f22d^short_description=112",
              "endTime": 1713645497800
            }
          ]
        }
      }

    FlowAPI - hasApprovals(String scopedFlowName)

    Verifica se um fluxo em um determinado escopo contém ações Solicitar aprovação.

    O método hasApprovals() determina se um fluxo em um determinado escopo contém ações Solicitar aprovação. Este método também verifica se alguma ação Solicitar aprovação no fluxo está aninhada nos blocos de lógica de fluxo If. Para obter mais informações, consulte Ações Solicitar aprovação.

    Tabela 27. Parâmetros
    Nome Tipo Descrição
    scopedFlowName Cadeia de caracteres Escopo e nome interno do fluxo a ser executado. Por exemplo, global.flow_name. Localize o campo Nome interno na lista de fluxos Workflow Studio.
    Tabela 28. Retornos
    Tipo Descrição
    Cadeia de caracteres Retorna um dos seguintes valores de cadeia de caracteres:
    • SEMPRE: o fluxo contém uma ação Solicitar aprovação que não está aninhada em um bloco lógico de fluxo " If" condicional.
    • CONDICIONALMENTE: o fluxo contém uma ação Solicitar aprovação que está aninhada em um bloco de lógica de fluxo "If" condicional.
    • NÃO: o fluxo não contém nenhuma ação Solicitar aprovação.
    • DESCONHECIDO: houve um erro do compilador e o sistema não pode determinar se o fluxo contém ações Solicitar aprovação.

    O exemplo a seguir verifica se o fluxo example_flow no escopo global contém ações Solicitar aprovação e registra o resultado.

    (function() {
    	
      try {
        var result = sn_fd.FlowAPI.hasApprovals('global.example_flow');
        gs.log('Result: ' + result);
      }
    
      catch (ex) {
        var message = ex.getMessage();
        gs.error(message);
      }
    })();

    FlowAPI - restartFlowFromContext(cadeia de caracteres ContextId, mapa fornecidoEntradas)

    Reinicia um fluxo, subfluxo ou ação que foi executado em segundo plano. Você pode fornecer novas entradas ou omiti-las para reutilizar as entradas fornecidas anteriormente.

    Tabela 29. Parâmetros
    Nome Tipo Descrição
    contextId Cadeia de caracteres O sys_id do fluxo, subfluxo ou ação que você deseja reiniciar. Este fluxo, subfluxo ou ação deve ter sido executado em segundo plano e ter um registro sysevent associado.
    fornecidoEntradas Objeto Opcional. Objeto de mapa que contém os pares de nome-valor que definem entradas de substituição para o fluxo, subfluxo ou ação. Se você omitir ou fornecer um valor nulo para este parâmetro, o fluxo, subfluxo ou ação será executado usando as entradas fornecidas anteriormente.
    Tabela 30. Retornos
    Tipo Descrição
    ScriptableFlowRunnerResultsScoped Objeto que contém os detalhes de execução de uma ação Workflow Studio, fluxo ou subfluxo.

    Reinicia um fluxo de amostra que tem um gatilho baseado em registro na tabela Incidente. O fluxo original usou o incidente de amostra INC0008112 como entrada. Quando o fluxo é reiniciado, ele usa o incidente de amostra INC0008111 como uma entrada.

    (function() {
      try {
    
        var flowContextID = '4216396ffd7d11107edcf07204c30fd5';     // sys_id of sys_flow_context record
        var oldIncidentRecord = '552c48888c033300964f4932b03eb092'; // sys_id of INC0008112
        var newIncidentRecord = 'a83820b58f723300e7e16c7827bdeed2'; // sys_id of INC0008111
        var inputs = {};
        var gr = new GlideRecord('incident'); // Create new incident object
    
        gr.get(newIncidentRecord);            // Get GlideRecord object for INC0008111
    
        inputs['current'] = gr;               // Set new Incident record as input
        inputs['table_name'] = 'incident';    // Set table name to Incident
    
        var result = sn_fd.FlowAPI.getRunner()            // Create a ScriptableFlowRunner builder object.
          .restartFlowFromContext(flowContextID, inputs); // Restart flow with new inputs.
    
        var contextId = result.getContextId();  // Retrieve the context ID from the result
        var dateRun = result.getDate();
    
        gs.info(contextId + ' ' + dateRun);
    
      } catch (ex) {
        var message = ex.getMessage();
        gs.error(message);
      }
    
    })();
    

    FlowAPI - scheduleCancel(cadeia de caracteres contextId, motivo da cadeia de caracteres, Integer delaySeconds)

    Programe um evento do sistema na Fila do mecanismo de fluxo para cancelar um fluxo que está em andamento, supostamente interrompido ou em espera após um atraso.

    Tabela 31. Parâmetros
    Nome Tipo Descrição
    contextId Cadeia de caracteres Sys_id do registro de detalhes de execução para o fluxo, subfluxo ou ação. O fluxo, subfluxo ou ação de destino deve estar no estado em andamento, presumivelmente interrompido ou em espera. Acesse os detalhes da execução navegando até a guia Execuções de fluxo em Workflow Studioou passe o sys_id do registro de contexto retornado pelo método.
    Nota:
    Pode haver um pequeno atraso no cancelamento se o contexto de destino estiver sendo executado em um nó diferente da instância. Os contextos em execução no mesmo nó são cancelados imediatamente. Os contextos em execução em outro nó devem aguardar primeiro o cancelamento para ser encaminhado para o nó apropriado.
    motivo Cadeia de caracteres Motivo para cancelar o fluxo, subfluxo ou ação. Aparece no campo Mensagem da tabela Entradas de log do mecanismo de fluxo [sys_flow_log].
    atrasoSegundos Números inteiros Opcional. Número de segundos de espera antes de processar um evento de cancelamento na Fila do Mecanismo de Fluxo. Se você omitir este parâmetro, o método usará o valor padrão de 1 segundo.

    Você pode usar este parâmetro para evitar o impacto no desempenho da programação do cancelamento de milhares de contextos de fluxo ao mesmo tempo. Em vez de executar todos os cancelamentos simultaneamente, programe um lote de cancelamentos de fluxo com um atraso. Como alternativa, você pode usar o atraso como um valor de tempo limite para um fluxo assíncrono.

    Tabela 32. Retornos
    Tipo Descrição
    Nenhum(a)

    Este exemplo usa o valor de retorno do método startFlow() para programar o cancelamento de quaisquer fluxos de longa execução.

    (function() { 
    
    var now_GR = new GlideRecord('incident'); 
    now_GR.addQuery('number', 'INC0000050'); 
    now_GR.query(); 
    now_GR.next(); 
    
          try { 
              var inputs = {}; 
              inputs['current'] = now_GR; // GlideRecord of table: 
              inputs['table_name'] = 'incident'; 
    
              // Starts the flow asynchronously.
              var contextId = sn_fd.FlowAPI.startFlow('global.myFlow', inputs); 
    
          } catch (ex) { 
              var message = ex.getMessage(); 
              gs.error(message); 
          } 
    })();
    
     
    // Call the scheduleCancel() method using the context Id returned from the startFlow() method
    sn_fd.FlowAPI.scheduleCancel(contextId, 'Flow took too long to execute.', 60);

    Este exemplo programa o cancelamento de qualquer fluxo chamado Fluxo de teste.

    var now_GR = new GlideRecord("sys_flow_context");
    now_GR.addQuery("name", "Test Flow");
    now_GR.query();
    
    while (now_GR.next()) {
    sn_fd.FlowAPI.scheduleCancel(now_GR.getUniqueValue(), 'Canceling Test Flows', 60);
    } 

    Este exemplo usa o parâmetro delaySeconds para executar trabalhos de cancelamento de fluxo em lotes. Use lotes para cancelar milhares de contextos de fluxo.

    var delaySeconds = 1;
    
    for (var i; i < sys_flow_context.length; ++i) {
      if (i % 100 === 0) {
        delaySeconds = delaySeconds + 60;
      }
      var contextId = sys_flow_context[i];
      var reason = "Example reason";
      sn_fd.FlowAPI.scheduleCancel(contextId, reason, delaySeconds);
    }

    FlowAPI - sendMessage (cadeia de caracteres contextSysID, mensagem de cadeia de caracteres, carga de cadeia de caracteres)

    Envie uma mensagem específica e uma resposta de carga para um fluxo que está pausado e aguardando uma mensagem.

    Tabela 33. Parâmetros
    Nome Tipo Descrição
    contextSysID Cadeia de caracteres O valor sys_id do fluxo ou subfluxo que está pausado e aguardando a retomada de uma mensagem específica. O fluxo ou subfluxo deve incluir uma ação Aguardar mensagem. Consulte Wait For Message action.
    mensagem Cadeia de caracteres A cadeia de caracteres de texto a ser enviada para o fluxo ou subfluxo em espera. Se este valor de mensagem corresponder ao valor de mensagem listado na ação Aguardar mensagem, a execução do fluxo ou subfluxo será retomada. Consulte Wait For Message action.
    carga Cadeia de caracteres O valor de saída da cadeia de caracteres de texto a ser enviado para o fluxo em espera. O fluxo ou subfluxo pode usar a carga como uma entrada quando a execução é retomada. Por exemplo, você pode especificar um motivo pelo qual um registro foi reaberto ou que uma nova aprovação foi necessária.
    Tabela 34. Retornos
    Tipo Descrição
    Nenhum(a)

    Este exemplo envia a mensagem Retomar fluxo para reiniciar um fluxo pausado. O fluxo pausado pode usar o valor da carga como dados em outro lugar no fluxo.

    (function() {
        try {
          // var change = '154a6320db9b12102166e229139619fc';    // Example sys_id of change record
          var pausedFlowId = '6e9bab60949b1210dda11cd237cd955d'; // Example sys_id of a paused flow
          var resumeMessage = 'Resume Flow';                     // Message that paused flow is waiting for
          var payload = 'Resubmitted for approval';              // Data to send back to flow
          var result = sn_fd.FlowAPI
          .sendMessage(pausedFlowId, resumeMessage, payload);    // Send a message to the paused flow
        } catch (ex) {
          var message = ex.getMessage();
          gs.error(message);
        }
      })();  
      

    Saída:

    Este script não produz nenhuma saída própria. Quando você o executa a partir do módulo Scripts-Background, o sistema lista as operações e as tabelas modificadas pelo script. Você também pode ver os resultados da saída do script nos detalhes de execução do fluxo de uma ação Aguardar mensagem.
    [0:00:00.074] Script completed in scope global: script
    Script execution history and recovery available here
    Operation	Table	                       Row Count
    delete	   sys_flow_runtime_state_chunk	1
    insert	   sys_flow_runtime_state_chunk	1
    update	   sys_flow_context	            1
    record-watcher asynchronous tracking complete - time: 3 ms. Executed responders: 1 
    record-watcher asynchronous tracking complete - time: 3 ms. Executed responders: 1 
    record-watcher asynchronous tracking complete - time: 3 ms. Executed responders: 1 
    

    FlowAPI - setEncryptedOutput(String password)

    Cria valores de password2 dentro de uma etapa de script.

    Identifique um valor de password2 criptografado retornado de um GlideRecord, permitindo que o sistema exiba o valor como uma senha mascarada em vez de uma cadeia de caracteres criptografada.

    Tabela 35. Parâmetros
    Nome Tipo Descrição
    senha Cadeia de caracteres Valor de password2 criptografado.
    Tabela 36. Retornos
    Tipo Descrição
    Cadeia de caracteres Valor de password2 criptografado, reconhecido pelo mecanismo como um valor de senha.

    Este exemplo retorna o valor de um campo password2 de um registro de usuário e armazena em em uma variável. Esta variável é passada para o método setEncryptedOutput, que é chamado usando sn_fd.GlideActionUtil.setEncryptedOutput. A instância reconhece o valor retornado como uma senha.

    (function execute(inputs, outputs) {
      // ...code...
      var now_GR = new GlideRecord('sys_user');
      now_GR.addQuery('first_name' , 'Abel');
      now_GR.query();
      now_GR.next();
      var pwVal = now_GR.getValue('pw2');
      outputs['usedSetEncrypted'] = sn_fd.GlideActionUtil.setEncryptedOutput(pwVal);
      outputs['justSetDirectly'] = pwVal;
    })(inputs, outputs);

    FlowAPI - startAction(cadeia de caracteres nome, entradas de mapa)

    Executa uma ação de um script do lado do servidor de forma assíncrona.

    Execute uma ação de dentro de uma regra de negócio, inclusão de script ou qualquer outro script do lado do servidor. As ações executadas usando este método são executadas de forma assíncrona, portanto, os scripts que usam este método não têm acesso a nenhuma saída criada pela ação. Use executeAction para executar uma ação de forma síncrona e acessar as saídas geradas por ela.
    Nota:
    Esta API foi substituída por ScriptableFlowRunner - com escopo, o que descontinua os métodos existentes usados para criar objetos e executar Workflow Studio fluxos e ações. Use o método getRunner() na classe FlowAPI para retornar um objeto ScriptableFlowRunner e usar os métodos associados. Use os métodos ScriptableFlowRunner se precisar oferecer suporte à separação de domínio.
    Nota:
    Este método executa a ação como o usuário que inicia a sessão.
    Tabela 37. Parâmetros
    Nome Tipo Descrição
    nome Cadeia de caracteres O escopo e o nome da ação a ser executada, por exemplo, global.action_name.
    entradas Mapa Pares de nome-valor que definem entradas de ação. Use o nome da entrada, não o rótulo da entrada.
    Tabela 38. Retornos
    Tipo Descrição
    Cadeia de caracteres SYS ID do registro de contexto para a ação. Acesse o registro de contexto navegando até a guia Execuções de fluxo em Workflow Studio, selecionando uma execução de fluxo e clicando em Abrir registro de contexto.

    Este exemplo usa sn_fd.FlowAPI.startAction para executar uma ação chamada add_comment no escopo sn_itsm_spoke. O objeto de entradas contém um registro de destino e um comentário a ser adicionado a esse registro. O código é encapsulado em uma instrução de tentativa/catch para capturar quaisquer erros que possam ocorrer quando o fluxo é executado.

    (function() {
      try {
        var inputs = {};
        inputs['ah_task'] = myTaskRecord; // GlideRecord of table: task 
        inputs['ah_comment'] ='Test Comment' ; // String 
    
        var contextId = sn_fd.FlowAPI.startAction('sn_itsm_spoke.add_comment', inputs);	
    			
      } catch (ex) {
        var message = ex.getMessage();
        gs.error(message);
      }
    })();

    FlowAPI - startActionQuick(cadeia de caracteres nome, entradas de mapa)

    Executa uma ação de um script do lado do servidor de forma assíncrona sem criar detalhes de execução ou outros registros relacionados. Melhore o desempenho eliminando a sobrecarga de manutenção de registros. Use esta API para aumentar a velocidade do processamento de alto volume, por exemplo, várias execuções por segundo, em um ambiente de produção.

    Emissão de relatórios e registros gerados
    Este método não cria detalhes de execução e registros de contexto, independentemente das configurações Workflow Studio.
    Aguardar suporte
    Este método não é compatível com a pausa da ação para aguardar as condições. Não há suporte para etapas que pausam para condições de espera, como Solicitar aprovação ou Aguardar condição.
    Suporte ao MID Server
    Este método não é compatível com a pausa de uma ação para ser executada em um MID Server.
    Nota:
    Esta API foi substituída por ScriptableFlowRunner - com escopo, o que descontinua os métodos existentes usados para criar objetos e executar Workflow Studio fluxos e ações. Use o método getRunner() na classe FlowAPI para retornar um objeto ScriptableFlowRunner e usar os métodos associados. Use os métodos ScriptableFlowRunner se precisar oferecer suporte à separação de domínio.
    Tabela 39. Parâmetros
    Nome Tipo Descrição
    nome Cadeia de caracteres Escopo e nome interno da ação a ser executada. Por exemplo, global.action_name. Localize o campo Nome interno na lista de ações Workflow Studio.
    entradas Mapa Pares de nome-valor que definem entradas de ação. Você pode encontrar as entradas de ação disponíveis e os tipos de dados necessários em Entradas na descrição da ação. Use o nome da entrada, não o rótulo da entrada. Por exemplo, {'table':'incident','sys_id':'a39d8e3cf0212300964feeefe80ff0ed'}.
    Tabela 40. Retornos
    Tipo Descrição
    vazio
    (function() {
    	
      try {
        var grIncident = new GlideRecord('incident');
        grIncident.get('57af7aec73d423002728660c4cf6a71c');
    
        var inputs = {};
        inputs['variable'] = grIncident;
    
        sn_fd.FlowAPI.startActionQuick('global.update_record_test', inputs);
    
      } catch (ex) {
        var message = ex.getMessage();
        gs.error(message);
        }
    	
    })();

    FlowAPI - startFlow(cadeia de caracteres nome, entradas de mapa)

    Executa um fluxo de um script do lado do servidor.

    Execute um fluxo de dentro de uma regra de negócio, inclusão de script ou qualquer outro script do lado do servidor. Os fluxos executados com este método são executados de forma assíncrona.
    Nota:
    Esta API foi substituída por ScriptableFlowRunner - com escopo, o que descontinua os métodos existentes usados para criar objetos e executar Workflow Studio fluxos e ações. Use o método getRunner() na classe FlowAPI para retornar um objeto ScriptableFlowRunner e usar os métodos associados. Use os métodos ScriptableFlowRunner se precisar oferecer suporte à separação de domínio.
    Nota:
    Este método executa o fluxo como o usuário especificado nas propriedades de fluxo.
    Tabela 41. Parâmetros
    Nome Tipo Descrição
    nome Cadeia de caracteres O escopo e o nome do fluxo a ser executado, por exemplo, global.flow_name.
    entradas Mapa Pares de nome-valor que definem entradas de gatilho. Use o nome da entrada, não o rótulo da entrada.
    Tabela 42. Retornos
    Tipo Descrição
    Cadeia de caracteres SYS ID do registro de contexto do fluxo. Acesse o registro de contexto navegando até a guia Execuções de fluxo em Workflow Studio, selecionando uma execução de fluxo e clicando em Abrir registro de contexto.

    Este exemplo usa sn_fd.FlowAPI.startFlow para executar um fluxo global chamado test_flow. O código cria uma variável de entradas que contém entradas necessárias para o fluxo. Nesse caso, o registro atual e a tabela do registro. O código é encapsulado em uma instrução de tentativa/catch para capturar quaisquer erros que possam ocorrer quando o fluxo é executado.

    (function() {
     
      var now_GR = new GlideRecord('incident'); 
      now_GR.addQuery('number', 'INC0009009'); 
      now_GR.query(); 
      now_GR.next();
    
      try {
        var inputs = {};
        inputs['current'] = now_GR; // GlideRecord of table: Incident
        inputs['table_name'] = 'incident';
    
        var contextId = sn_fd.FlowAPI.startFlow('global.test_flow', inputs);	
    	
      } catch (ex) {
        var message = ex.getMessage();
        gs.error(message);  
      }
    })();

    FlowAPI - startFlowQuick(cadeia de caracteres nome, entradas de mapa)

    Executa um fluxo de um script do lado do servidor de forma assíncrona sem criar detalhes de execução ou outros registros relacionados. Melhore o desempenho eliminando a sobrecarga de manutenção de registros. Use esta API para aumentar a velocidade do processamento de alto volume, por exemplo, várias execuções por segundo, em um ambiente de produção.

    Emissão de relatórios e registros gerados
    Este método não cria detalhes de execução e registros de contexto, independentemente das configurações Workflow Studio.
    Executar como usuário do sistema
    Este método executa o fluxo como o usuário do sistema. Não há suporte para definir o fluxo para ser executado como o usuário que inicia a sessão ou representar um usuário.
    Aguardar suporte
    Este método não é compatível com a pausa do fluxo para aguardar as condições. Ações ou lógica de fluxo que pausam para condições de espera, como Solicitar aprovação, Aguardar condição ou Aguardar uma duração, não são compatíveis.
    Suporte ao MID Server
    Este método não é compatível com a pausa de um fluxo para ser executado a partir de um MID Server.
    Nota:
    Esta API foi substituída por ScriptableFlowRunner - com escopo, o que descontinua os métodos existentes usados para criar objetos e executar Workflow Studio fluxos e ações. Use o método getRunner() na classe FlowAPI para retornar um objeto ScriptableFlowRunner e usar os métodos associados. Use os métodos ScriptableFlowRunner se precisar oferecer suporte à separação de domínio.
    Tabela 43. Parâmetros
    Nome Tipo Descrição
    nome Cadeia de caracteres Escopo e nome interno do fluxo a ser executado. Por exemplo, global.flow_name. Localize o campo Nome interno na lista de fluxos Workflow Studio.
    entradas Mapa Pares de nome-valor que definem entradas de gatilho. Você pode encontrar as entradas de gatilho disponíveis e os tipos de dados necessários na seção Gatilho do fluxo. Use o nome da entrada, não o rótulo da entrada. Por exemplo, {'table':'incident','sys_id':'a39d8e3cf0212300964feeefe80ff0ed'}.
    Tabela 44. Retornos
    Tipo Descrição
    vazio
    (function() {
    	
      try {
        var grIncident = new GlideRecord('incident');
        grIncident.get('ed92e8d173d023002728660c4cf6a7bc');
    
        var inputs = {};
        inputs['current'] = grIncident;
        inputs['table_name'] = 'incident';
    		
        sn_fd.FlowAPI.startFlowQuick('global.test_quick_flow', inputs);
    		
      } catch (ex) {
        var message = ex.getMessage();
        gs.error(message);
    	}
    	
    })();

    FlowAPI - startSubflow(cadeia de caracteres nome, entrada de mapa)

    Executa um subfluxo de um script do lado do servidor.

    Execute um subfluxo de dentro de uma regra de negócio, inclusão de script ou qualquer outro script do lado do servidor. Subfluxos executados usando este método são executados de forma assíncrona. Scripts que incluem este método não têm acesso às saídas criadas pelo fluxo. Use executeSubflow para executar um subfluxo de forma síncrona e acessar as saídas que ele gera.
    Nota:
    Esta API foi substituída por ScriptableFlowRunner - com escopo, o que descontinua os métodos existentes usados para criar objetos e executar Workflow Studio fluxos e ações. Use o método getRunner() na classe FlowAPI para retornar um objeto ScriptableFlowRunner e usar os métodos associados. Use os métodos ScriptableFlowRunner se precisar oferecer suporte à separação de domínio.
    Nota:
    Este método executa o fluxo como o usuário especificado nas propriedades de fluxo.
    Tabela 45. Parâmetros
    Nome Tipo Descrição
    nome Cadeia de caracteres O escopo e o nome do subfluxo a ser executado, por exemplo, global.subflow_name.
    entradas Mapa Pares de nome-valor que definem entradas de subfluxo. Use o nome da entrada, não o rótulo da entrada.
    Tabela 46. Retornos
    Tipo Descrição
    Cadeia de caracteres SYS ID do registro de contexto para o subfluxo. Acesse o registro de contexto navegando até a guia Execuções de fluxo em Workflow Studio, selecionando uma execução de fluxo e clicando em Abrir registro de contexto.

    Este exemplo usa sn_fd.FlowAPI.startSubflow para executar um fluxo global chamado test_subflow. O código é encapsulado em uma instrução de tentativa/catch para capturar quaisquer erros que possam ocorrer quando o fluxo é executado.

    (function() {
      try {
        var inputs = {};
        inputs['ah_task'] = myTaskRecord; // GlideRecord of table: task 
        inputs['ah_comment'] ='Test Comment' ; // String 
    
        var contextId = sn_fd.FlowAPI.startSubflow('global.test_subflow', inputs);
    
      } catch (ex) {
        var message = ex.getMessage();
        gs.error(message);
      }
    	
    })();

    FlowAPI - startSubflowQuick(cadeia de caracteres nome, entradas de mapa)

    Executa um subfluxo de um script do lado do servidor de forma assíncrona sem criar detalhes de execução ou outros registros relacionados. Melhore o desempenho eliminando a sobrecarga de manutenção de registros. Use esta API para aumentar a velocidade do processamento de alto volume, por exemplo, várias execuções por segundo, em um ambiente de produção.

    Emissão de relatórios e registros gerados
    Este método não cria detalhes de execução e registros de contexto, independentemente das configurações Workflow Studio.
    Executar como usuário do sistema
    Este método executa o fluxo como o usuário do sistema. Não há suporte para definir o fluxo para ser executado como o usuário que inicia a sessão ou representar um usuário.
    Aguardar suporte
    Este método não é compatível com a pausa do fluxo para aguardar as condições. Ações ou lógica de fluxo que pausam para condições de espera, como Solicitar aprovação, Aguardar condição ou Aguardar uma duração, não são compatíveis.
    Suporte ao MID Server
    Este método não é compatível com a pausa de um fluxo para ser executado a partir de um MID Server.
    Nota:
    Esta API foi substituída por ScriptableFlowRunner - com escopo, o que descontinua os métodos existentes usados para criar objetos e executar Workflow Studio fluxos e ações. Use o método getRunner() na classe FlowAPI para retornar um objeto ScriptableFlowRunner e usar os métodos associados. Use os métodos ScriptableFlowRunner se precisar oferecer suporte à separação de domínio.
    Tabela 47. Parâmetros
    Nome Tipo Descrição
    nome Cadeia de caracteres Escopo e nome interno do subfluxo a ser executado. Por exemplo, global.subflow_name. Localize o campo Nome interno na lista de Workflow Studio subfluxos.
    entradas Mapa Pares de nome-valor que definem entradas de subfluxo. Você pode encontrar as entradas de subfluxo disponíveis e os tipos de dados necessários em Entradas no subfluxo. Use o nome da entrada, não o rótulo da entrada. Por exemplo, {'table':'incident','sys_id':'a39d8e3cf0212300964feeefe80ff0ed'}.
    Tabela 48. Retornos
    Tipo Descrição
    vazio
    (function() {
    
      try {
        var grIncident = new GlideRecord('incident');
        grIncident.get('57af7aec73d423002728660c4cf6a71c');
    
        var inputs = {};
        inputs['variable'] = grIncident;
    
        sn_fd.FlowAPI.startSubflowQuick('global.test_quick_run_subflow', inputs);
    
      } catch (ex) {
        var message = ex.getMessage();  
        gs.error(message);
        }
    	
    })();