라벨과 보고서 내놓기

실행이 시작 시점과 완료 시점에 무엇을 어떤 순서로 어느 대기열을 거쳐 내놓는지, 실행 파일에 무엇이 얼어붙는지, 그리고 모든 전송이 어떻게 기록되는지입니다.

Markdown으로 보기

실행은 자기 모델의 액션을 거쳐 서류를 내놓습니다. 이름을 붙인 명령의 묶음이며, 명령마다 실행의 시작 시점이나 완료 시점에 라벨이나 보고서를 하나 내놓습니다. 셋업 > 액션에서 선언하고 절차가 묶음 통째로 고릅니다. 명령이 그릴 때 쓰는 템플릿은 이 뿌리의 라이브러리 둘입니다. 보고서 명령의 서식은 보고서에서, 라벨 명령의 파일은 라벨에서 옵니다. 이 페이지는 실행이 경계에 이르렀을 때 무슨 일이 일어나는지입니다.

두 경계

경계에서 명령은 고른 묶음들을 가로질러 모델 목록의 순서대로, 그리고 묶음 안에서는 그 묶음 자신의 순서대로 쏘며, 라벨이 보고서보다 먼저입니다. 명령은 저마다 따로 놉니다. 없는 템플릿, 예외를 던지는 조립, 거부하는 대기열은 모두 기록에 남을 뿐 실행에 대해 아무것도 바꾸지 않고 뒤의 명령을 결코 멈추지 않습니다.

경계 언제 무엇을 쓸 수 있는가 무엇을 내놓는가
시작 실행이 실체가 되면서, 일련번호 카운터를 잡아 두고 메타데이터를 쓴 뒤입니다. 문서를 조립하는 동안 실행은 이미 기록하고 있으며, 실행 자신의 열린 파일을 거칩니다. 실행의 신원, 메타데이터, 시작 시각, 그리고 실행 중 상태입니다. 시점이 시작인 모든 라벨 명령과, 시점이 시작이고 서식이 있는 모든 보고서 명령입니다. 아직 근거가 없는 구역은 빠지고 레시피 줄이 계획한 레시피를 인쇄하는 진행 문서입니다.
완료 실행의 종료 상태와 스냅숏이 봉해지고 유닛이 풀린 뒤입니다. 라벨이 먼저이고 보고서는 바로 뒤에서 배경으로 나갑니다. 시작 시점의 모든 것에 더해 종료 시각, 소요 시간, 종료 상태, 종합 판정, 종료 사유, 그리고 판정한 기준입니다. 시점이 완료이고 종합 판정 거르기가 이 실행의 종합 판정을 받아들이는 모든 라벨과 보고서 명령입니다.

종합 판정 거르기(합격, 불합격, 판정 불가, 종합 판정 없음)는 완료 시점에만 읽습니다. 시작 시점에는 아직 종합 판정이 없습니다. 실패로 끝난 실행에는 종료 스냅숏이 없습니다. 그 완료 라벨은 실패한 산출물로 기록되고 완료 보고서는 발행되지 않습니다. 서식이 지워진 보고서 명령과 서식이 없는 보고서 명령은 아무것도 발행하지 않습니다. 애플리케이션을 다시 시작해도 시작 시점의 문서를 결코 되풀이하지 않습니다. 다시 시작한 뒤 이어진 실행은 이미 내놓은 산출물을 그대로 지닙니다.

보고서

서식이 있는 보고서 명령은 그 밖에 무엇을 요구했든 자기 경계에서 PDF를 발행합니다. 파일 이름은 실행의 내보내기 기본 이름에 묶음의 이름을 더한 것이며(<base> - <group>.pdf), 그래서 한 실행의 진행 문서와 마무리 보고서가 나란히 섭니다. 이름이 같은 파일로 떨어질 묶음 둘은 명령의 신원으로 가립니다. 같은 명령을 나중에 다시 그리면 그 명령의 문서만 바뀝니다. 명령의 선택지 둘이 그 문서에 무슨 일이 일어날지 정합니다.

선택지 효과
자동으로 인쇄 발행한 PDF를 그 경계에 대해 유닛에서 힘을 가진 보고서 대기열로도 보냅니다. 그 자리에 대기열이 없는 유닛은 그 시도를 실패로 기록합니다("이 유닛에는 이 액션을 인쇄할 프린터 대기열이 설정되어 있지 않습니다.").
실행 안에 사본 보관 완성된 PDF를 실행 파일에 담아 두므로, 나중에 다시 보내면 서식을 고치거나 지운 뒤에도, 발행한 파일이 나중의 그리기로 바뀐 뒤에도 바로 그 바이트가 나갑니다. 그러면 실행이 그 문서의 크기를 지니게 됩니다.

둘 가운데 하나라도 요구한 명령은 그 문서를 실행에 등록합니다(이력이 보고서 아래에 나열하는 등록 기록입니다). 둘 다 요구하지 않은 명령은 파일을 발행하되 아무것도 등록하지 않습니다. 만들기는 실행 파일의 내보내기이지 결코 그 파일에 쓰는 일이 아니기 때문입니다.

라벨

라벨 명령은 마커마다 신호원 하나로 자기 템플릿을 그립니다. 시작 시점에는 받아들인 시작에서 확정된 신호원만 풀립니다. 메타데이터, 모델의 이름과 개정, 유닛의 이름과 코드, 절차의 이름과 코드, 실행 식별자, 시작 시각, 실행 상태입니다. 그 밖의 것에 이은 마커는 시작 라벨을 거부합니다("마커 '{{RESULT}}'은(는) 실행이 시작될 때에는 쓸 수 없습니다."). 완료 시점에는 목록 전체가 풀리며, 판정 기준 결과는 그 변하지 않는 신원과 분명히 지정한 사이클로 풀립니다(사이클을 빼먹은 것이 "가장 최근"을 뜻하는 일은 결코 없습니다).

만들 때마다 먼저 바꿀 수 없는 산출물이 실행 파일에 덧붙습니다. 최종 명령 바이트, 템플릿의 이름과 원본 파일과 내용 해시, 묶음의 이름, 시점, 풀린 값과 그 신호원, 또는 명령을 하나도 만들 수 없었던 이유입니다. 그다음 그 바이트가 그 경계에 대해 유닛에서 힘을 가진 라벨 대기열로 Ganter Lab · <group>이라는 이름의 RAW 문서로 갑니다. 그 자리에 대기열이 없는 유닛은 실패한 시도를 기록하고("이 유닛에는 이 라벨을 인쇄할 프린터 대기열이 설정되어 있지 않습니다."), 사라진 템플릿은 "설정한 라벨 템플릿이 없습니다."를 기록합니다. 모든 전송 시도가 산출물에 덧붙습니다. 스풀러를 부르기 전에는 보내는 중, 그다음 대기열에 보냄이나 실패입니다. 앱이 도중에 멈춘 시도는 전송 확인 안 됨으로 남고 결코 저절로 다시 시도되지 않습니다. 프린터가 이미 라벨을 뽑았을 수 있기 때문입니다. "대기열에 보냄"은 Windows가 그 내용을 받아들였다는 것을 확인해 줄 뿐 종이가 나왔다는 뜻이 아닙니다.

프린터

문서가 어느 대기열에 놓이는지는 정의 > 프린터에서 정합니다. 모델이 기본 자리 넷을, 무엇을 내놓는지와 언제인지의 조합마다 하나씩 선언하고(라벨이냐 보고서냐, 시작 시점이냐 완료 시점이냐), 유닛마다 모델의 넷을 따르거나 자기 넷을 지닙니다. 명령은 자기 종류와 시점으로 목적지를 풉니다. 따르는 유닛이면 모델을 거쳐, 떼어 낸 유닛이면 그 유닛의 자리를 거쳐 풉니다. 그래서 절차 둘이 함께 쓰는 묶음도 한 번 고른 하나의 목적지로 인쇄됩니다. 대기열은 스테이션이 실행되는 사용자에게 설치된 Windows 프린터 대기열입니다. 라벨은 RAW 바이트로 나가고 보고서는 래스터로 바뀌어 장치에 그려지므로, 평범한 문서 프린터가 보고서를, 라벨 프린터가 라벨을 맡습니다.

그 뒤

실행이 내놓은 모든 것은 이력에 있는 그 기록에서 읽습니다(라벨과 보고서). 산출물, 등록 기록, 그리고 상태가 붙은 모든 시도입니다. 거기에서 두 매체에 대한 몸짓 한 쌍은 같습니다. 실행의 얼어붙은 근거로 문서를 만드는 것(설정한 명령이나 손으로 이어 붙인 템플릿으로 새 라벨, 아무 서식으로 새 PDF)과, 기록된 것을 다시 내보내는 것(산출물의 얼어붙은 바이트를 다시 인쇄, 등록된 PDF를 다시 보내기)이며, 뒤의 것은 아무것도 다시 풀지 않습니다.

내놓기가 하지 않는 것

실시간 값을 결코 읽지 않습니다. 라벨은 실행 파일이 얼려 둔 것만 풀고, 보고서는 그 파일에서만 그립니다. 실행을 결코 바꾸지 않습니다. 문서가 실패해도 종합 판정과 상태와 파일은 있던 그대로입니다. 인쇄를 결코 확인해 주지 않습니다. 그리고 절차도 액션도 지니지 않는 스냅숏이나 즉시 판정 실행에서는 결코 내놓지 않습니다.