ValidateScriptForCurrentDotUpdate

  • 릴리스 버전: Washingtondc
  • 업데이트 날짜 2024년 02월 01일
  • 읽기3분
  • ValidateScriptForCurrentDotUpdate 유효성 검사기는 current.update() 함수를 사용하는 스크립트가 있는 워크플로우 활동을 찾습니다.

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

    확인 요약

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

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

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

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

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

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

    문제 해결

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