[ID CS4-CS6] Внесение текстовой переменной документа с адрес интернет-ссылки

densen

Топикстартер
15 лет на форуме
Сообщения
751
Реакции
639
Написал достаточно корявый скрипт, и теперь пытаюсь его усложнить тем, что в качестве трех параметров хочу задать текстовые переменные из документа, имеющие тип "Сustom Text".
JavaScript:
// Формирование crossref-ссылок на кнопках "Check for update".
// URL на кнопке должен иметь следующий вид:
// https://crossmark.crossref.org/dialog/?doi=10.11111/1111-1111-2001-15-1-10-27&domain=pdf&date_stamp=2001-01-01
// где "2001-15-1" -- номер журнала (год-том-выпуск), "10-27" -- диапазон страниц статьи, "2001-01-01" -- дата выкладывания на сайте
 
    with (app.activeDocument) {
        var webDate = (prompt ("Укажите дату выкладывания на сайте", "YYYY-MM-DD")); // Внесение даты выкладывания на сайте
        if (webDate != null) { // Если не была нажата кнопка "Отмена"
            if (webDate.match(/.{4}\-.{2}\-.{2}/)) { // Если формат внесенных данных не был нарушен
            var i;
            var year = app.activeDocument.textVariables.item("year");
            var volume = app.activeDocument.textVariables.item("volume");
            var issue = app.activeDocument.textVariables.item("issue");
            var hls = hyperlinkURLDestinations;
            for (i = 2; i < hls.length; i++) { // отсчет начинается с цифры 2, так как две первые кнопки лежат на мастер-странице и учитываться не должны)
                var a = "https://crossmark.crossref.org/dialog/?doi=10.1111/1111-1111-"; // Неизменяемая часть ссылки #1
                var b = sections[i-1].pageNumberStart; // Первая страница статьи (= секции)
                var c = b + (sections[i-1].length - 1); // Последняя страница статьи (= секции)
                var d = "&domain=pdf&date_stamp="; // Неизменяемая часть ссылки #2
                if (b === c) { // Если статья занимает одну страницу,
                    hls[i].destinationURL = a + year + "-" + volume + "-" + issue + "-" + b + d + webDate; // диапазон страниц заменяется на номер страницы
                    } else { // Если статья занимает больше одной страницы,
                        hls[i].destinationURL = a + year + "-" + volume + "-" + issue + "-" + b + "-" + c + d + webDate; // формируется диапазон страниц
                        }
                    }
            } else {
            alert ("Неправильно указаны данные!"); // Указание на ошибку внесения данных
            }
        } else {
        alert ("Неправильно указаны данные!"); // Указание на ошибку внесения данных
        }
    }

Но вместо ожидаемого получаю ссылку следующего вида: https://crossmark.crossref.org/dialog/?doi=10.1111/1111-1111-[object TextVariable]-[object TextVariable]-[object TextVariable]-39-40&domain=pdf&date_stamp=2021-12-06
Вопрос: каким образом текстовую переменную документа поместить в адрес интернет-ссылки?
Файл, в котором все приготовлено, прикладываю. Все данные до и после запуска скрипта можно увидеть в панели Hyperlinks.
 

Вложения

  • Variable_in_links.zip
    424.9 КБ · Просм.: 134

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 138
Реакции
10 835
  • Спасибо
Реакции: densen

densen

Топикстартер
15 лет на форуме
Сообщения
751
Реакции
639
Простите, великодушно. Не хотел становиться одним из тех, кто сначала задает вопрос, и через 10 минут на него отвечает, но что-то, видимо, щелкнуло в голове после опубликования вопроса.

Правильный ответ:
JavaScript:
var year = app.activeDocument.textVariables.item("year").variableOptions.contents;
var volume = app.activeDocument.textVariables.item("volume").variableOptions.contents;
var issue = app.activeDocument.textVariables.item("issue").variableOptions.contents;
 
  • Спасибо
Реакции: _MBK_, Gad и Skvoznyak

Skvoznyak

15 лет на форуме
Сообщения
5 500
Реакции
2 168
Простите, великодушно. Не хотел становиться одним из тех, кто сначала задает вопрос, и через 10 минут на него отвечает, но что-то, видимо, щелкнуло в голове после опубликования вопроса.

правильно поставленный вопрос, как известно, содержит в себе большую часть ответа )
 
  • Спасибо
Реакции: boriskasmoscow и densen