ValidateScriptForCurrentDotUpdate

  • Versão de lançamento: Zurich
  • Atualizado 31 de jul. de 2025
  • 2 min. de leitura
  • O validador ValidateScriptForCurrentDotUpdate encontra atividades de fluxo de trabalho com scripts que usam a função current.update().

    A chamada de current.update() causa atrasos significativo de desempenho no processamento da transação e pode fazer com que uma instância trave.

    Resumo da validação

    • Risco: na melhor das hipóteses, um fluxo de trabalho que usa current.update() em scripts apresenta desempenho degradado. No pior caso, o fluxo de trabalho entra em um loop infinito e recursivo que causa falha no servidor.
    • Nível de gravidade: Aviso
    • Resultado válido: Válido
    • Mensagem válida: O JavaScript neste fluxo de trabalho não tem instâncias de "current.update()".
    • Resultado inválido: Inválido
    • Mensagem inválida: Este fluxo de trabalho usa "current.update()" em <contagem de referências de current.update> declarações JavaScript.
    • Ação sugerida: remova current.update() dos scripts de atividade citados por este validador. Os fluxos de trabalho são executados em uma transação e a atual é atualizada, ou possivelmente inserida, no final da transação, se apropriado. Não há necessidade de atualizar explicitamente o registro durante a transação.
    • Publicável: Sim
    • Executável: Sim

    Problemas com current.update() em scripts de fluxo de trabalho

    Um fluxo de trabalho inicia a execução de uma destas maneiras:
    • Mecanismo de script: se um fluxo de trabalho for atribuído a uma tabela específica e receber uma condição de execução, será executado em INSERT.
    • Script: qualquer regra de negócio, inclusão de script, script em segundo plano ou client script pode iniciar um fluxo de trabalho usando a inclusão de script de fluxo de trabalho e chamando startFlow().

    O mecanismo de fluxo de trabalho inicia um fluxo de trabalho com base nos critérios correspondentes do registro atual que está sendo inserido. A transação de atual é gerenciada pelo mecanismo de script, e não pelo fluxo de trabalho. Os fluxos de trabalho que progridem na update() do registro atual não são invocados por meio do mecanismo de fluxo de trabalho, mas como uma chamada de um client script ou de uma regra de negócio. Em qualquer caso, o mecanismo de script é invocado, e o registro atual é colocado na memória. As edições e modificações nos campos atuais são feitas e estão disponíveis para outras atividades e scripts que são executados na mesma transação.

    Quando apropriado, outros mecanismos executados em sequência com o mecanismo de fluxo de trabalho, como o mecanismo de regra de negócio ou a normalização de campo, são invocados em relação à mesma transação de registro atual. As mudanças feitas no atual por meio desses scripts e atividades modificam o registro na memória. Esses valores de mudança estão disponíveis para referência nas outras transações chamadas de atividades e scripts na mesma transação INSERT. Quando todas as mudanças esperadas forem executadas, o registro atual será inserido.

    Quando um desses scripts chama current.update() em um registro que ainda não foi inserido, a ação força uma transação de banco de dados desnecessária e propensa a erros. Se um registro ainda não estiver no banco de dados, ele não poderá ser atualizado. As regras de negócio que são acionadas em update() em um registro no processo de ser inserido podem causar uma condição de loop muito instável e potencialmente infinita.

    Solução de problemas

    Este validador detecta o uso de current.update() em qualquer campo de script editável. Não chame current.update() em um script de fluxo de trabalho. No caso de um INSERT ou UPDATE de atual, as mudanças feitas no atual estarão disponíveis para todos os scripts em execução na mesma transação, e o mecanismo de script armazenará todas as mudanças no banco de dados. Deixe a atualização de atual para o mecanismo. Use os scripts somente para definir e fazer referência aos valores de campo atuais.