2013-10-15 5 views
3

이 작품에 대해 어떤 상을 줘야합니다.InDesign 스크립트 오류 : "예상 레이어이지만 수신 된 레이어"

InDesign에서 (매우 큰) 스크립트가 실행되어 한 시점에서 라이브러리에 자산이 페이지에 배치 된 다음 특정 레이어로 이동합니다. 이 스크립트는 여기의 모든 컴퓨터에서 정상적으로 실행되지만,의 InDesign에서 다른 문서가 열려 있지 않은 경우에만 이 실행됩니다.

JavaScript Error!

Error Number: 54 Error String: Uncaught JavaScript exception: ERROR at line number 2651 Invalid value for set property 'itemLayer'. Expected Layer, but received Layer.

참고 굵게 표시된 부분을 : 다른 문서 가 열려 경우

후 오류가 스크립트를 다른 레이어에 배치 된 자산을 이동하려고 할 때 나타납니다. 그것은 기대하고 있던 것을 받았으므로 울부 짖었다. 이것은 나에게 의미가 없습니다. curAsset[0]이 도서관에서 가져온 이미 문서에 배치 자산 객체이며, 기록을 위해,

curAsset[0].itemLayer = document.layers.item("Art Work (max imprint)"); 

그리고 : 그리고 기록을 위해, 여기가 참조하는 코드의 라인입니다. document은 현재 열려있는 문서에 이미 지정된 변수입니다.

내 작업 이론은 InDesign에서 열려있는 다른 문서가이 오류의 원인이되는 것인데, 이는 지금까지 만들 수 있었던 유일한 상관 관계이지만 어떻게 표시되지 않습니다. 스크립트에는 이미 열려있는 문서 중 하나만 참조하는 변수 document이 있습니다. 스크립트의 다른 모든 것들은이 한 줄을 제외하고는 잘 돌아갑니다 (지금까지). 어떤 아이디어라도주세요?

+0

다른 사람들이 어떻게 든 여길 때 다른 문서의 'Layer' 객체를 가져올 수 있습니까? –

+0

그게 제 일하는 이론입니다. 그러나'document' 변수를 참조하는 수십 줄의 코드 중에서이 한 줄의 코드를 어떻게, 왜, 또는 왜하는지 모릅니다.모든 사람에게 지금 스크립트를 실행하기 전에 InDesign에서 열려있는 문서가없는 것을 확인하라고 말하고 있지만 분명히 이상적은 아닙니다. – Sturm

+0

+1 오류 메시지. – georg

답변

0

아주 재미 있고 격렬한 오류 메시지입니다. 언제든지 getElements()을 사용해보세요. 때로는 마법처럼 작동합니다.

curAsset[0].itemLayer = document.layers.item("Art Work (max imprint)").getElements()[0]; 

또 다른 한 가지. InDesign의 Extendscript는 특정 유형의 객체와 해당 유형의 객체 배열을 구별하지 못하는 경우가 있습니다. 따라서 쿼리가 단일 항목 만 반환하도록 할 수 있습니다.

0

TLDR; "문서"개체가 "curAsset"개체 배열을 작성하는 데 사용 된 것과 동일한 개체인지 확인하십시오.

그 이후로 해결책을 찾았 으면 좋겠지 만, 그렇지 않다면 해결책을 찾는데 앞장설 수 있습니다. 나는이 유형의 오류를 "예상 된 X, 그러나받은 X"라고 생각했습니다.

나머지 코드를 보지 않고서는 알기 어렵지만 "문서"개체에 대한 참조가 "curAsset"개체가 참조하는 것과 동일한 문서를 참조하지 않는 것으로 의심됩니다.

내 경우에는 문서에서 다른 단락을 복사 한 다음 단락 스타일을 할당하려했지만 첫 번째 문서의 단락 스타일 참조를 실수로 적용하려고했습니다. 그것은 두 번째 문서의 단락에. 두 문서가 동일한 템플리트 및 단락 스타일을 가졌지 만 단락 스타일 객체에 대한 참조는 문서에 고유합니다.