Как написать inresponse в скриптах indesign

#adobe-indesign #run-script #indesign-server

#adobe-indesign #выполнить-скрипт #indesign-сервер

Вопрос:

Я запускаю этот скрипт для получения всех полей формы indd-файла.

 var _ALL_FIELDS = "";

var allFields = myDocument.formFields;

for(var i=0;i<allFields.length;i  ){

     var tf = allFields[i];

     alert(tf.id);

     alert(tf.label);

     alert(tf.name);

     alert(_ALL_FIELDS = _ALL_FIELDS  ","  tf.name);

}
 

Что я сделал, так это создал клиент на основе soap-java и вызвал метод runscript.
Теперь я могу получить эти поля, но как отправить эти поля обратно клиенту, т.Е. Как написать это в ответ, а затем на стороне клиента, как прочитать его из ответа.

Код для вызова метода runscript:-

 Service inDesignService = new ServiceLocator();

ServicePortType inDesignServer = inDesignService.getService(new URL(parsedArgs.getHost()));

IntHolder errorNumber = new IntHolder(0);

StringHolder errorString = new StringHolder();

DataHolder results = new DataHolder();

inDesignServer.runScript(runScriptParams, errorNumber, errorString, results);
 

Также я нашел в документах, которые возвращает метод RunScript RunScriptResponse , но в моем случае он возвращает void.

http://wwwimages.adobe.com/content/dam/Adobe/en/devnet/indesign/sdk/cs6/server/ids-solutions.pdf

Ответ №1:

Похоже, вы хотите вернуть массив имен полей формы. Вы могли бы воспользоваться преимуществами метода интерфейса сбора everyItem() в вашем javascript:

 var result = myDocument.formFields.everyItem().name;
resu<
 

Javascript вернет последнее значение в вызываемом скрипте, поэтому, чтобы было совершенно очевидно, последняя строка — это просто возвращаемое значение.

На стороне Java метод RunScript передает переменную results в качестве 4-го параметра, и именно там вы найдете свой ответ. Итак, после вашего фрагмента кода у вас может быть что-то вроде этого:

 List<String> formFieldNames = new ArrayList<String>();
if (results.value.getData() != null) {
    Data[] resultsArray = (Data[]) results.value.getData();
    for (int i = 0; i < resultsArray.length; i  ) {
        formFieldNames.add(resultsArray[i].getData().toString()); 
    }
}