ValidateScriptForCurrentDotUpdate

  • 릴리스 버전: Australia
  • 업데이트 날짜 2026년 03월 12일
  • 소요 시간: 3분
  • ValidateScriptForCurrentDotUpdate 유효성 검사기는 current.update() 함수를 사용하는 스크립트가 있는 워크플로우 활동을 찾습니다.

    current.update()를 호출하면 트랜잭션 처리에서 상당한 성능 지연이 발생하고 인스턴스가 중단될 수 있습니다.

    확인 요약

    • 위험: 기껏해야 스크립트에서 current.update()를 사용하는 워크플로우는 성능이 저하됩니다. 최악의 경우 워크플로우가 무한 재귀 루프에 빠져 서버가 충돌하게 됩니다.
    • 심각도 수준: 경고
    • 유효한 결과: 유효함
    • 올바른 메시지: 이 워크플로우의 JavaScript에는 "current.update()"의 인스턴스가 없습니다.
    • 잘못된 결과: 잘못됨
    • 잘못된 메시지: 이 워크플로우는 current.update()의 <current.update 참조 수> JavaScript 문에 사용합니다.
    • 제안된 작업: 이 유효성 검사기가 인용한 활동 스크립트에서 current.update() 를 제거합니다. 워크플로우는 트랜잭션 내에서 실행되며 트랜잭션이 끝날 때 current가 업데이트되거나 삽입될 수 있습니다. 트랜잭션 중에 기록을 명시적으로 업데이트할 필요는 없습니다.
    • 게시 가능: 예
    • 실행 가능: 예

    워크플로우 스크립트의 current.update() 문제

    워크플로우는 다음 방법 중 하나로 실행을 시작합니다.
    • 스크립트 엔진: 워크플로우가 특정 테이블에 할당되고 실행 조건이 지정된 경우, 워크플로우는 삽입 시 실행됩니다.
    • 스크립트: 모든 비즈니스 규칙, 스크립트 포함, 백그라운드 스크립트 또는 클라이언트 스크립트는 워크플로우 스크립트 포함을 사용하고 startFlow()를 호출하여 워크플로우를 시작할 수 있습니다.

    워크플로우 엔진은 삽입 중인 현재 기록의 일치 기준에 따라 워크플로우를 시작합니다. current에 대한 트랜잭션은 워크플로우가 아니라 스크립트 엔진에 의해 관리됩니다. 현재 기록의 update() 를 통해 진행되는 워크플로우는 워크플로우 엔진을 통해 호출되는 것이 아니라 클라이언트 스크립트나 비즈니스 규칙의 호출로 호출됩니다. 두 경우 모두 스크립트 엔진이 호출되고 현재 기록이 메모리에 저장됩니다. 현재 필드를 편집하고 수정하면 동일한 트랜잭션에서 실행되는 다른 활동과 스크립트에 사용할 수 있습니다.

    적절한 경우, 비즈니스 규칙 엔진 또는 필드 정규화와 같이 워크플로우 엔진과 함께 순서대로 실행되는 다른 엔진이 동일한 현재 기록 트랜잭션에 대해 호출됩니다. 이러한 스크립트 및 활동을 통해 현재에 대한 변경 내용은 메모리의 기록을 수정합니다. 이러한 변경 값은 동일한 INSERT 트랜잭션의 활동 및 스크립트에서 호출된 다른 트랜잭션에서 참조할 수 있습니다. 예상되는 모든 변경 내용이 실행되면 현재 기록이 삽입됩니다.

    이러한 스크립트 중 하나가 아직 삽입되지 않은 레코드에 대해 current.update() 를 호출하면 이 작업은 불필요하고 오류가 발생하기 쉬운 데이터베이스 트랜잭션을 강제로 수행합니다. 기록이 아직 데이터베이스에 없으면 업데이트할 수 없습니다. 삽입 중인 기록의 update() 에서 트리거되는 비즈니스 규칙은 매우 불안정하고 잠재적으로 무한 루핑 조건을 유발할 수 있습니다.

    문제 해결

    이 유효성 검사기는 편집 가능한 스크립트 필드에서 current.update() 의 사용을 탐지합니다. 워크플로우 스크립트 내에서 current.update() 를 호출하지 마십시오. current의 INSERT 또는 UPDATE가 발생하는 경우 current에 대한 변경 내용은 동일한 트랜잭션에서 실행되는 모든 스크립트에서 사용할 수 있으며 스크립트 엔진은 모든 변경 내용을 데이터베이스에 저장합니다. 현재 업데이트는 엔진에 맡기십시오. 스크립트는 현재 필드 값을 설정하고 참조하는 데만 사용하십시오.