FileMaker Server 및 FileMaker Cloud에서 스크립트 수행하기 정보
FileMaker Server 및 FileMaker Cloud에서 호스트된 파일의 스크립트는 보통 클라이언트에서 실행됩니다. 하지만 다음을 사용하여 서버(서버 측 스크립트)에서 스크립트를 실행할 수 있습니다.
-
클라이언트 또는 호스트에서 실행 중인 스크립트의 서버에서 스크립트 수행 스크립트 단계
-
클라이언트에서 실행 중인 스크립트의 콜백으로 서버에서 스크립트 수행 스크립트 단계
-
일정(FileMaker Server Help 또는 FileMaker Cloud Help 참조)
서버 측 스크립트를 다르게 실행하는 방법
위의 어느 방법으로든 시작된 스크립트는 FileMaker Server 및 FileMaker Cloud의 구성요소인 FileMaker Script Engine(FMSE)에서 실행됩니다. FMSE는 서버의 별도 세션에서 각 스크립트를 실행하는 클라이언트입니다. 결과적으로 서버 측 스크립트는
-
클라이언트의 문맥(현재 레이아웃, 찾기 세트, 정렬 순서, 레코드, 전역 필드 값 및 로컬 또는 전역 변수 값)이 없습니다.
서버에서 스크립트 수행 스크립트 단계에서 스크립트 매개 변수를 사용하여 클라이언트의 문맥에 대한 정보를 서버 측 스크립트에 전달할 수 있습니다. 서버 측 스크립트는 레이아웃으로 이동 스크립트 단계 및 찾기 수행 스크립트 단계와 같은 스크립트 단계에서 해당 정보를 사용하여 동작할 레이아웃과 찾기 세트를 지정할 수 있습니다.
-
스크립트 매개 변수 및 스크립트 결과를 최대 백만 자까지 지원합니다.
-
다음 중 모두가 참인 경우에만 다른 FileMaker Pro 파일에 접근할 수 있습니다.
-
파일이 동일한 호스트에 있습니다.
-
서버 측 스크립트를 시작한 클라이언트가 파일을 이미 열었거나 파일의 파일 옵션 대화상자에서 지정된 계정 이름 및 암호로 설정되어 있습니다.
-
서버 측 스크립트가 다음을 제외하고 시작된 방법과 관계없이 동일한 방법으로 실행됩니다.
-
서버에서 스크립트 수행 스크립트 단계를 사용하는 클라이언트는 스크립트가 서버에서 완료되도록 대기하고 Get(스크립트 결과) 함수를 사용하여 해당 결과를 캡처할 수 있는 옵션을 갖고 있습니다.
-
실행 중인 스크립트가 지정된 시간 제한을 초과하는 경우 종료되도록 일정을 설정할 수 있습니다.
지원되지 않는 스크립트 단계 처리하기
FMSE는 다수의 스크립트 단계를 지원합니다. 하지만 지원되지 않는 스크립트 단계를 수행하도록 시도하는 경우 오류 3("명령을 사용할 수 없습니다")을 반환하고 지원되지 않는 단계를 건너뛰어 다음 단계를 계속 진행합니다. 지원되지 않는 단계를 처리하기 위해 스크립트는 다음 함수와 If 스크립트 단계를 사용할 수 있습니다.
-
해당 단계가 지원되지 않는지 확인하기 위해 Get(마지막 오류) 함수 뒤에 단계를 사용한 다음, 대신 지원되는 단계를 수행합니다. 예를 들어, 파일 열기 스크립트 단계는 FMSE에서 지원되지 않으므로 서버에서 실행 중인 다음 스크립트가 해당 단계를 건너뛰고 결과로 "지원되지 않음"을 반환합니다.
복사파일 열기 [가려진 항목 열기: 끔 ; "청구서 백업"]
If [ Get(마지막 오류) = 3 ]
스크립트 종료 [ 텍스트 결과: "지원되지 않음" ]
End If
-
해당 스크립트가 FileMaker Server 또는 FileMaker Cloud에서 실행 중인지 확인하기 위해 다른 단계 전에 Get(응용 프로그램 버전) 함수를 사용한 다음, 지원되는 단계만 수행합니다. 예를 들어 다음과 같습니다.
복사If [PatternCount(Get(응용 프로그램 버전) ; "서버") > 0 ] # FMSE에서 지원되는 스크립트 단계를 계속 진행합니다. End If
어떤 스크립트 단계가 FMSE에서 지원되는지 확인하려면 FileMaker Pro의 스크립트 작업공간에서 스크립트를 열고 을 클릭한 다음 서버를 선택합니다. 지원되지 않는 스크립트 단계는 다른 색상으로 나타납니다. 스크립트 단계 참조에서 각 스크립트 단계에 대한 호환성 테이블을 참조할 수도 있습니다.
서버에서 스크립트를 실행하는 이유
-
클라이언트와 서버 간에 네트워크 트래픽 양을 줄여서 성능을 향상시키기 위해
-
장시간 실행 중인 작업을 느린 클라이언트에서 빠른 서버로 넘기기 위해
-
FileMaker Go 클라이언트를 사용하여 FileMaker Server에서는 지원되지만 FileMaker Go에서는 지원되지 않는 플러그인이 필요한 작업을 수행하기 위해
-
레코드 가져오기 또는 SQL 실행 스크립트 단계와 함께 서버의 DSN을 사용하는 ODBC 데이터 원본을 사용하기 위해
참고
-
레코드가 클라이언트에 의해 잠겨 있는 경우 서버 측 스크립트는 커밋되지 않은 데이터에 접근하거나 해당 레코드의 콘텐츠를 변경할 수 없습니다.
-
서버 측 스크립트를 실행하면 해당 스크립트를 포함하는 파일을 열고 닫습니다. 따라서 스크립트가 시작될 때 OnFirstWindowOpen 스크립트 트리거가 활성화되고 스크립트가 끝날 때 OnLastWindowClose 스크립트 트리거가 활성화됩니다.
-
서버 측 스크립트는 스크립트 수행 스크립트 단계를 사용하여 하위 스크립트를 실행할 수 있습니다. 하위 스크립트가 동일한 서버상의 파일에 있는 경우에만 이들 하위 스크립트가 동일한 FMSE 클라이언트 세션에서 실행됩니다. 또한 클라이언트가 서버에서 스크립트 수행 스크립트 단계를 사용하여 다른 파일에서 하위 스크립트를 수행하는 스크립트를 실행하는 경우, 클라이언트에 의해 해당 하위 스크립트가 포함된 파일이 이미 열려 있어야 합니다.
서버 측 스크립트는 유사한 방식으로 서버에서 스크립트 수행 스크립트 단계를 사용할 수도 있습니다. 호출된 스크립트가 별도의 FMSE 클라이언트 세션에서 실행된다는 점만 다릅니다. 완료 대기 옵션은 FileMaker Pro 클라이언트가 실행하는 스크립트에서와 동일하게 작동하며, 스크립트 결과 또는 오류 코드를 호출자, 이 경우 호출 FMSE 클라이언트에게 다시 전달합니다. 그러나 이 옵션을 끄면 호출 스크립트가 실행을 계속할 수 있고 호출된 스크립트가 자체 스레드에서 실행될 수 있습니다.
-
서버 측 스크립트는 유사한 방식으로 서버에서 스크립트 수행 스크립트 단계를 사용할 수도 있습니다. 호출된 스크립트가 별도의 FMSE 클라이언트 세션에서 실행된다는 점만 다릅니다.
-
서버에서 스크립트 수행으로 실행되는 스크립트는 클라이언트와 동일한 계정을 사용합니다. 일정에서 실행되는 스크립트는 일정에 지정된 계정을 사용합니다.
-
서버 측 스크립트는 스크립트가 클라이언트에서 실행될 때 FileMaker 클라이언트가 경고 메시지를 표시하도록 할 수 없으므로, 서버 측 스크립트는 항상 오류 캡처 설정 스크립트 단계가 켬으로 설정된 것처럼 수행합니다. 서버 측 스크립트의 Get(마지막 오류) 함수를 사용하여 오류 조건을 처리합니다. 문제 해결에 도움이 되도록 오류도 FileMaker Server 및 FileMaker Cloud의 이벤트 로그에 기록됩니다.
-
클라이언트는 서버 측 스크립트를 중단할 수 없습니다. 하지만 다음의 경우 서버 측 스크립트가 중단될 수 있습니다.
-
서버 관리자가 스크립트를 중단하는 경우, 해당 스크립트는 FileMaker Server Admin Console 또는 FileMaker Cloud에서 연결 해제될 수 있는 개별 클라이언트로 나타납니다.
-
스크립트가 시작된 일정에서 실행 중인 스크립트가 지정된 시간 제한을 초과한 경우
-
스크립트에 알 수 없는 스크립트 단계가 발생한 경우(사용자 중단 허용 스크립트 단계 참조)
FileMaker Server Help 또는 FileMaker Cloud Help를 참조하십시오.
-
-
서버 측 스크립트에서 Get(시스템 IP 주소) 같은 하드웨어에 관련된 함수는 클라이언트에서가 아닌 FileMaker Server 및 FileMaker Cloud의 데이터베이스 서버 구성요소에서 정보를 반환합니다.
-
서버 측 스크립트의 경우, 파일 접근은 문서 폴더 및 임시 폴더로 제한됩니다. 서버 측 스크립트의 경로를 참조하십시오.
-
서버 측 스크립트에서 대화상자 사용 옵션이 켜져 있는 스크립트 단계는 대화상자를 표시하지 못하고 오류를 반환할 수 있습니다. 이 오류를 피하려면 서버 측 스크립트에서 대화상자 사용을 끄십시오.