Как перебрать массив, чтобы заполнить кнопки для диалога AppleScript? - PullRequest
0 голосов
/ 06 июля 2019

У меня возникают проблемы при попытке выяснить, как я могу перебрать массив, который я использую для заполнения меток для кнопок диалогового окна AppleScript.

В настоящее время у меня есть массив из 13 объектов, которыеотделы для нашего экземпляра jamf.Диалоговое окно AppleScript имеет максимум 3 кнопки, которые вы можете назначить.Поэтому я пытаюсь выполнить итерацию по моему массиву, чтобы показать 2 варианта за раз, а третья кнопка - «Далее», чтобы перейти к следующим 2 параметрам и т. Д.

Я также хочу рассмотреть ситуацию дляесли пользователь должен пройти весь путь до последней опции, он соответствующим образом настраивает кнопки, например, оставляя последнее диалоговое окно, чтобы иметь 1 или 2 кнопки, если это количество оставленных опций.

У меня естьустановите массив с 13 элементами, затем попытайтесь выполнить цикл while с вложенным оператором if, чтобы проверить, есть ли 1 или 2 оставшиеся опции и удалить дополнительные кнопки.

departments=("Accounting" "Compliance" "Data Science" "DevOps" "Engineering" "Executive Team" "Human Resources" "Marketing" "Member Experience" "Member Experience Managers" "Product" "QA" "Risk" "Not Listed")
departmentsCount=${#departments[@]}

i=0
dpt=""
while [ "$dpt" != "Not Listed" ]
do
  if [[ $((departmentsCount - $i)) -eq 0 ]]; then
    a=$i
    dpt=$(osascript -e 'Tell application "System Events" to display dialog "Please select your Department:" buttons {"'"${departments[$a]}"'"} default button 1' 2>/dev/null | sed 's/button returned://')
    i=$i+2
  elif [[ $((departmentsCount - $i)) -eq 1 ]]; then
    a=$i
    b=$(i+1)
    dpt=$(osascript -e 'Tell application "System Events" to display dialog "Please select your Department:" buttons {"'"${departments[$a]}"'", "'"${departments[$b]}"'"} default button 2' 2>/dev/null | sed 's/button returned://')
    echo "$dpt"
    i=$i+2
  else
    a=$i
    b=$i+1
    dpt=$(osascript -e 'Tell application "System Events" to display dialog "Please select your Department:" buttons {"'"${departments[$a]}"'", "'"${departments[$b]}"'", "Next"} default button 3' 2>/dev/null | sed 's/button returned://')
    i=$i+2
  fi
done

Прямо сейчас яЯ получаю бесконечный цикл, так как $ dpt никогда не устанавливается в Other.Я не понял, как можно заставить цикл завершиться, если выбрано что-то отличное от Next.Может быть, мне нужно изменить тип цикла, который я использую, или как я использую свои переменные.

1 Ответ

0 голосов
/ 06 июля 2019

Я думаю, что вы используете неправильный подход к этому. Попробуйте вместо этого диалог choose from list:

osascript -e 'tell application "System Events" to (choose from list {"Accounting", "Compliance", "Data Science", "DevOps", "Engineering", "Executive Team", "Human Resources", "Marketing", "Member Experience", "Member Experience Managers", "Product", "QA", "Risk", "Not Listed"} with prompt "Please select your Department:")'

Это даст вашим пользователям один диалог, в котором они смогут выбрать один из 13 отделов одновременно. Гораздо удобнее в использовании и позволяет избежать головной боли.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...