Скрипты и автоматизация в Workforce

Внимание:

В этом разделе описывается, как автоматизировать и использовать скрипты с проектами Classic Workforce, которые отображаются в Workforce for ArcGIS. Чтобы узнать, как автоматизировать и использовать скрипты в проектах, подготовленных для автономной работы, и которые отображаются в ArcGIS Workforce, см. раздел Автоматизация Workforce.

Это дополнительный раздел, предназначенный для администраторов и владельцев проекта, которые работают с векторными слоями непосредственно через ArcGIS API for Python или REST API.

ArcGIS Workforce позволяет вам планировать свои рабочие процессы, касающиеся всех видов полевых работ, управлять этими процессами и выполнять их. Приложение интегрируется в вашу организацию ArcGIS как веб-приложение. Оно предназначено для создания распределения назначений, которые открываются в мобильном приложении для выполнения мобильными сотрудниками. После того как владелец проекта создаст и настроит проект Workforce, диспетчеры смогут работать с веб-приложением Workforce для создания и распределения назначений, а мобильные работники будут иметь возможность просматривать и выполнять назначения, направленные им посредством Workforce и других приложений ArcGIS на своих мобильных устройствах. Весь рабочий процесс управляется проектом Workforce, который представлен набором векторных слоев и карт.

Веб-приложение Workforce разработано, чтобы диспетчеры могли быстро и эффективно создавать назначения и управлять существующими назначениями. Однако могут быть опции, которых в веб-приложении нет, но вы хотели бы применить их к своим заданиям. Например, некоторые из самых популярных запросов к Workforce относятся к интеграции с другими системами, например, сторонними системами управления порядком работ, активов или технической поддержки, а также к порядку обработки повторяющихся назначений.

Использование скриптов и автоматизации для Workforce позволяет это сделать уже сейчас. Создание назначений не ограничивается возможностями веб-приложения.Workforce работает с ресурсами слоя объектов Назначения, независимо от того, как были созданы эти записи. Работа может выполняться и в других системах организации, например, в системе управления активами, или технического обслуживания, или в системе 311. Workforce можно интегрировать с внешними источниками для создания и обновления назначений. У слоя Назначения есть поле workOrderId, которое может выступать внешним ключом и сохранять уникальные идентификаторы, ссылающиеся на внешнюю систему. Поле workOrderId доступно в подробной информации о назначении в качестве идентификатора ID – диспетчеры могут задавать, а мобильные сотрудники – просматривать его.

Перед началом использования скриптов убедитесь, что вы точно понимаете схему проекта Workforce и то, как работают поля даты и времени статуса назначения. Несмотря на то что рекомендуется использовать ArcGIS API for Python, вы также можете автоматизировать Workforce через REST API для векторных слоев. Поскольку назначения создаются в той же схеме, Workforce может их обработать.

Обзор схемы

Проект workforce состоит из четырех векторных слоев и четырех доменов кодированных значений с предопределенной схемой. Имя каждого векторного слоя – это комбинация имен, описывающая его назначение с присоединенным GUID элемента проекта Workforce. К примеру, слой Workers, связанный с проектом с GUID 5dd018fcd88c4d33814cf3da9c44061e, будет назван workers_5dd018fcd88c4d33814cf3da9c44061e. Это гарантирует уникальность каждого векторного слоя.

Диаграмма схемы Workforce
Примечание:

Поля отслеживания редактирования различаются в ArcGIS Enterprise. Вместо CreationDate, Creator, EditDate и Editor они называются created_date, created_user, last_edited_date и last_edited_user, соответственно.

Вот четыре векторных слоя:

  1. Сотрудники
    • Точечный слой, содержащий запись для каждого включенного в проект мобильного сотрудника.
    • Содержит информацию о мобильном сотруднике, в том числе его контактный номер и название назначения.
    • Имя пользователя мобильного сотрудника в организации ArcGIS хранится в поле userId.
    • В слое отслеживается, кто создал и кто последним изменял данные каждого мобильного сотрудника.
    • Это первичное отношение внешнего ключа (PK-FK) OBJECTID к Assignments.workerId. Используя значение OBJECTID из слоя Workers как значение поля Assignments.workerId, можно связать мобильных сотрудников с их назначениями.
    • У слоя есть следующие связи с доменом кодированных значений:
      • Поле статуса связано с доменом кодированных значений Worker_Status для отслеживания статуса сотрудника.
  2. Назначения
    • Точечный слой, содержащий запись для каждого назначения.
    • Содержит информацию о назначении, в том числе его статус, местоположение и описание.
    • В слое отслеживается, кто создал и кто последним изменял каждое назначение.
    • Для векторного слоя включены вложения.
    • Слой содержит внешние ключи для некоторых полей, связывающие значения этого слоя с другим:
      • Assignments.workerId к Workers.OBJECTID.
      • Assignments.dispatcherId к Dispatchers.OBJECTID.
      • Assignments.workOrderId можно использовать в качестве внешнего ключа к внешней системе, например, к системе управления активами, задав значения из другой системы.
    • У слоя есть следующие связи с доменом кодированных значений:
      • Поле status связано с доменом кодированных значений Assign_Status для отслеживания статуса мобильных сотрудников.
      • Поле priority связано с доменом кодированных значений Priority для управления приоритетом распределения заданий.
      • Поле assignmentType связано с доменом кодированных значений Assign_Type для хранения типов заданий проекта.
  3. Диспетчеры
    • Точечный слой, содержащий запись для каждого включенного в проект диспетчера.
    • Содержит информацию о диспетчере, в том числе его имя и контактный номер.
    • Имя пользователя диспетчера в организации ArcGIS хранится в поле userId.
    • В слое отслеживается, кто создал и кто последним изменял каждого диспетчера.
    • Это отношение PK-FK OBJECTID к Assignments.dispatcherId. Использование значения OBJECTID из слоя Dispatchers как значение поля Assignments.dispatcherId связывает диспетчера со всеми назначенными ему заданиями.
  4. Отслеживание местоположения
    • Точечный слой, содержащий запись для каждого местоположения, записанного при включенном отслеживании местоположения.
    • В слое отслеживается, кто создал и кто последним изменял каждое отслеженное местоположение.

Есть четыре следующих домена кодированных значений:

  1. Assign_Status— хранит шесть допустимых значений статуса задания.
  2. Priority— хранит четыре допустимых значения для приоритета назначения.
  3. Assign_Type— хранит типы назначений проекта. Этот домен кодированных значений является пустым при создании проекта. Значения появляются в нем после добавления типов назначений при настройке проекта.
  4. Worker_Status— хранит три допустимых значения статуса мобильного сотрудника.

Чтобы узнать значения доменов кодированных значений, см. диаграмму схемы Workforce.

Поля даты и времени статуса назначения

У статуса каждого задания, определяемого в домене Assign_Status, есть соответствующее поле даты и времени в векторном слое назначений. В этих полях содержится дата и время, в которые назначение было в соответствующем состоянии. Когда статус в первый раз используется для конкретного назначения, впервые заполняется соответствующее поле даты и времени. Если впоследствии у назначения будет снова тот же статус, поле даты и времени обновляется с новым значением даты и времени. Например, при первом указании исполнителя для назначения дата назначения соответствует текущим дате и времени. Если оно будет переназначено через три часа, поле assignedDate обновится до нового времени, а время исходного задания будет удалено.

Статус назначенияСоответствующее поле даты и времени

Не назначено

CreationDate

Назначено

assignedDate

Выполняется

inProgressDate

Выполнено

completedDate

Отклонено

declinedDate

Приостановлено

pausedDate

Примечание:

Для статуса Отклонено нет связанного поля даты и времени. Поле отслеживания редактирования EditDate можно использовать для определения даты и времени, в которое задание было отклонено, если после отклонения не будут внесены другие изменения.

Для лучшего понимания значений и времени их установки представьте следующий сценарий:

  • Переназначение ранее назначенного задания
    • Вы назначили задание в момент времени t1, поэтому assignedDate имеет значение t1.
    • Позднее, в момент времени t2, назначение было переназначено другому сотруднику, так что assignedDate – t2.
  • Переназначение отклоненной работы
    • Вы назначили задание в момент времени t1, поэтому assignedDate имеет значение t1.
    • В момент времени t2 мобильный работник отклонил задание, так что declinedDate – t2. Значение поля assignedDate остается равным t1.
    • Вы назначили задание другому мобильному работнику в момент t3, поэтому assignedDate – t3.
  • Остановка и возобновление работы
    • Вы назначили задание в момент времени t1, поэтому assignedDate имеет значение t1.
    • В момент времени t2 мобильный работник начинает работу, так что inProgressDate – t2. Значение поля assignedDate остается равным t1.
    • В момент времени t3 мобильный работник приостанавливает работу, так что pausedDate – t3. Значение assignedDate остается равным t1, а значение inProgressDate – t2.
    • В момент времени t4 мобильный работник возобновляет работу, так что inProgressDate – t4. Значение assignedDate остается равным t1, а значение pausedDate – t3.

Использование ArcGIS API for Python (рекомендуется)

Используйте ArcGIS API for Python и модуль Workforce для скриптов и автоматизации в Workforce. Назначения, которые были сделаны с помощью модуля Workforce, могут быть прочитаны Workforce, т.к. они используют ту же схему. Примеры и полезные советы можно посмотреть в скриптах, доступных на GitHub. Эти скрипты показывают, как использовать Python для выполнения многих задач, например, программируемой загрузки назначений из внешних источников данных, импорта и управления сотрудниками, удаления выполненных назначений и т.п. Также можно использовать Jupyter notebook для просмотра некоторых типовых операций.

Модуль Workforce появился в ArcGIS API for Python версии 1.4.1. Вы могли использовать Python и до того, как появился этот модуль, но он упрощает автоматизацию задач в Workforce. Модуль Workforce формирует схему проекта и правила Workforce. Он включает защитные меры, а также отвечает за сохранение целостности проекта Workforce.

Примечание:

Есть комментарий или обратная связь по одному из скриптов? Или хотите предложить идею для нового скрипта? Поделитесь ими на GitHub.

Использование REST API для векторных слоев

Внимание:

Рекомендуется использовать ArcGIS API for Python. Он включает множество защитных мер по сохранению целостности проекта Workforce.

Можно автоматизировать работу Workforce через REST API для векторных слоев. При использовании REST API вам нужно использовать формат Объекта для создания и обновления заданий. См. разделы ниже для получения подробной информации о создании и обновлении, а также назначении заданий через REST API.

Создание назначения через REST API

Workforce работает с контентом векторного слоя Assignments, независимо от того, как его записи были созданы. Нет необходимости создавать задания через веб-приложение Workforce. Если запись в векторном слое Assignments была корректно создана через REST API, Workforce распознает ее в качестве правильного задания как в веб-, так и в мобильном приложении.

При создании назначений через REST API используйте команду Добавить объекты. Для некоторых полей значения задавать необходимо, для некоторых – в случае, если этого требует ваше назначение, а для некоторых значения задавать не нужно.

Указать значения необходимо в следующих полях:

ПолеОписаниеПредоставляемое значение

SHAPE

Местоположение точки назначения

Пара координат x,y

status

Статус задания, полученный из значений домена Assign_Status.

  • 0 (Не назначено) для создания не назначения без исполнителя
  • 1 (Назначено) назначение для указания исполнителя вторым этапом создания
Внимание:

Если вы собираетесь указать исполнителя для задания, вам требуется также включить значения полей workerId и assignedDate, описанные в следующей таблице.

assignmentType

Тип назначения – из значений домена Assign_Type

Корректное значение для домена Assign_Type

location

Текстовое описание точечного местоположения назначения

Адрес, пара координат x,y или текст описания

assignmentRead

Определяет, просмотрел ли мобильный сотрудник назначение

0, если назначение не просматривалось

dispatcherId

ID диспетчера, создавшего задание (dispatchers.OBJECTID из слоя Dispatchers)

Это может быть ID пользователя организации ArcGIS, под которым вы вошли, или ID конкретного диспетчера, связанного с проектом

Вы также можете включить следующие необязательные поля:

Дополнительное полеОписаниеПредоставляемое значение

description

Информация о назначении для мобильного сотрудника

Текст для мобильного сотрудника. Пробел управляется значением перед строкой.

priority

Приоритет назначения

Корректное значение для домена Приоритет.

workOrderId

Внешний ключ, ссылающийся на порядок работ от внешней сторонней системы

Значение из вашей внешней системы.

dueDate

Дата и время, к которому назначение должно быть выполнено

Корректное время и дата, соответствующее количеству секунд UTC, прошедших с момента времени.

Примечание:

Чтобы задать дату выполнения, введите дату и используйте в качестве времени 11:59:59 PM.

Если при создании назначения вы будете указывать исполнителя, используйте статус 1 (как сказано выше) и укажите также следующие поля:

ПолеОписаниеПредоставляемое значение

workerId

ID мобильного сотрудника, которому присваивается задание (workers.OBJECTID из слоя Workers)

OBJECTID мобильного сотрудника для назначения

assignedDate

Дата и время, когда назначение было распределено для выполнения.

Текущее время и дата, соответствующее количеству секунд UTC, прошедшего момента времени

Другие поля слоя назначений управляются платформой ArcGIS, в том числе поля, отмеченные как часть ArcGIS или поля отслеживания редактирования на диаграмме схемы. Вы не должны задавать и изменять эти значения.

Распределение назначений через REST API

В предыдущем разделе вы увидели, как создавать назначение. Теперь вы изучите распределение назначений для исполнения. Воспользуйтесь командой REST API Обновить объекты, передав в ней список обновляемых объектов. Чтобы распределить и перераспределить назначение, вам необходимо заполнить эти три поля для каждого объекта:

ПолеОписаниеПредоставляемое значение

status

Статус задания, полученный из значений домена Assign_Status.

  • 1 (Назначено)

workerId

ID мобильного сотрудника, которому присваивается задание (workers.OBJECTID из слоя Workers)

OBJECTID мобильного сотрудника для назначения

assignedDate

Дата и время, когда назначение было распределено для выполнения.

Текущее время и дата, соответствующее количеству секунд UTC, прошедшего момента времени

dispatcherId

ID выполнившего назначения диспетчера, если это не диспетчер, создавший его (dispatchers.OBJECTID из слоя Dispatchers)

Это может быть ID пользователя организации ArcGIS, под которым вы вошли, или ID конкретного диспетчера, связанного с проектом