Автоматизация и использование скриптов в ArcGIS Workforce

Внимание:

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

Примечание:

Классические проекты имеют другую схему, отличающуюся от описанной ниже. Информация об автоматизации и использовании скриптов в Классических проектах Workforce см. Автоматизация и использование скриптов в Workforce (Классический). Для переноса Классических проектов в новую схему, см. раздел Перенос Классических проектов.

Дополнительные сведения можно найти в разделе Что такое Классический проект.

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

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

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

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

Обзор схемы

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

Диаграмма схемы Workforce

Примечание:

Имена некоторых полей в ArcGIS Enterprise различны. Вместо OBJECTID, GlobalID, CreationDate, Creator, EditDate и Editor они называются objectid, globalid, created_date, created_user, last_edited_date и last_edited_user, соответственно.

Workforce сервис объектов

Сервис объектов Workforce содержит следующие слои и таблицы:

  • Слой Workers
    • Точечный слой, содержащий запись для каждого включенного в проект мобильного сотрудника.
    • Содержит информацию о мобильном сотруднике, в том числе его контактный номер и название назначения.
    • Имя пользователя мобильного сотрудника в организации ArcGIS хранится в поле userid.
    • В слое отслеживается, кто создал и кто последним изменял данные каждого мобильного сотрудника.
    • Это первичное отношение внешнего ключа (PK-FK) GlobalID к Assignments.workerid. Используя значение GlobalID из слоя Workers как значение поля Assignments.workerid, можно связать мобильных сотрудников с их назначениями.
    • У слоя есть следующие связи с доменом кодированных значений:
      • Поле status связано с доменом кодированных значений Worker_Status для отслеживания статуса мобильных сотрудников.
  • Слой Assignments
    • Точечный слой, содержащий запись для каждого назначения.
    • Содержит информацию о назначении, в том числе его статус, местоположение и описание.
    • В слое отслеживается, кто создал и кто последним изменял каждое назначение.
    • Для векторного слоя включены вложения.
    • Слой содержит внешние ключи для некоторых полей, связывающие значения этого слоя с другим:
      • Assignments.workerid к Workers.GlobalID.
      • Assignments.dispatcherid к Dispatchers.GlobalID.
      • Assignments.workorderid можно использовать в качестве внешнего ключа к внешней системе, например, к системе управления активами, задав значения из другой системы.
      • Это отношение PK-FK GlobalID к Assignment.assignmenttype. Используя значение GlobalID из слоя Assignments как значение поля Assignments.assignmenttype, можно связать назначение с его типом.
    • У слоя есть следующие связи с доменом кодированных значений:
      • Поле status связано с доменом кодированных значений Assign_Status для отслеживания статуса мобильных сотрудников.
      • Поле priority связано с доменом кодированных значений Priority для управления приоритетом распределения заданий.
    Внимание:

    Если назначение имеет значение null для своей геометрии, оно не появится в Workforce.

  • Таблица Dispatchers
    • Таблица, содержащий запись для каждого диспетчера проекта.
    • Содержит информацию о диспетчере, в том числе его имя и контактный номер.
    • Имя пользователя диспетчера в организации ArcGIS хранится в поле userid.
    • В слое отслеживается, кто создал и кто последним изменял каждого диспетчера.
    • Это отношение PK-FK GlobalID к Assignments.dispatcherid. Использование значения GlobalID из таблицы Dispatchers как значение поля Assignments.dispatcherid связывает диспетчера со всеми присвоенными ему назначениями.
  • Таблица Assignment Types
    • Таблица, содержащий запись для каждого типа назначения в проекте.
    • Эта таблица в момент создания проекта пуста. Значения появляются в нем после добавления типов назначений при настройке проекта.
    • Оно включает описание типов назначений, заданные владельцем проекта при добавлении типов назначений.
    • Это отношение PK-FK GlobalID к Assignments.assignmenttype. Использование значения поля GlobalID из таблицы Assignment Types связывает тип назначения с назначениями.
  • Таблица Assignment Integrations
    • Таблица, содержащий запись для каждой интеграции назначения в проекте.
    • Эта таблица содержит запись для интеграции с ArcGIS Navigator при создании.
    • Таблица Assignment Integrations содержит следующие задаваемые пользователем атрибуты, помимо стандартных системных атрибутов:
      • app— идентификатор интегрированного приложения, который помогает найти интеграции, необходимые для внесения настроенной рабочей среды в веб-приложение - например, arcgis-collector или https://collector.arcgis.app.
      • assignmenttypeGlobalID типа назначения, если интеграция должна отображаться только для определенных типов назначений. Значение null показывает, что интеграция поддерживает все типы назначений в проекте.
      • prompt— запрос, отображающийся в мобильном клиенте - например, Перейти к назначению.
      • urltemplate— URL шаблона, которые используется для вызова интегрированного приложения.
    • Чтобы найти интеграции, применимые для определенного назначения, используйте одно из условий где: assignmenttype = null или assignmenttype = '<assignment-type-id>'. Они позволяют найти все интеграции на уровне проекте и все интеграции по типу для текущего типа назначения.
    • Чтобы найти интеграции, применимые для проекта, сделайте запрос с использованием условия где, например, appid = 'arcgis-collector'.

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

  • Assign_Status— хранит семь допустимых значений статуса назначения. Значения 0-20 зарезервированы для будущего использования в Workforce. Пользователи, которые хранят свои собственные значения в этом поле, должны выбирать значения вне пределов диапазона.
  • Priority— Хранит четыре допустимых значения для приоритета назначения.
  • Worker_Status— Хранит три допустимых значения статуса мобильного сотрудника.

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

Отношения элементов веб-карты

Отношения элементов между сервисом объектов Workforce, сотрудником и диспетчером имеет следующее определение:

  • Тип отношения - WorkforceMap2FeatureService
  • Исходный тип - веб-карта
  • Тип назначения - сервис объектов
  • Правила
    • mustOwnAllItems — владелец проекта создает отношение, ему должна принадлежать связанная карта.

Когда веб-карта имеет отношение элемента с сервисом объектов Workforce, в метаданные добавляется следующая информация:

  • title — заголовок проекта.
  • snippet — краткое описание проекта.
  • thumbnail —эскиз проекта.
  • typeKeywordsWorkforce Worker добавляется на карту сотрудника, а Workforce Dispatcher добавляется на карту диспетчера.

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

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

Если поля inprogressdate, declineddate или pauseddate заполняются при переназначении, задается null.

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

Не назначено

creationdate

Назначено

assigneddate

Выполняется

inprogressdate

Completed

completeddate

Отклонено

declineddate

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

pauseddate

Примечание:

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

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

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

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

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

Примечание:

Чтобы автоматизировать проекты Workforce, необходимо использовать ArcGIS API for Python 1.8.3 или более новую версию.

Начало работы с модулем Workforce

Модуль Workforce позволяет создавать классические проекты, а также проекты для автономной работы. Создайте проекты в модуле Workforce, выполнив следующие шаги:

  1. Войдите в ArcGIS Online, запустив следующие команды в скрипте Python или на консоли Python:

    gis = arcgis.gis.GIS("https://arcgis.com", "<username>", "<password>")

  2. Создайте либо Классический проект, либо проект, подготовленный для автономного использования, запустив одну из следующих команд:

    Создание Классического проекта

    version1_project = arcgis.apps.workforce.create_project("<project-title>", "<project-summary>", major_version=1)

    Создание проекта, подготовленного для автономной работы

    version2_project = arcgis.apps.workforce.create_project("<project-title>", "<project-summary>", major_version=2)

Информация об использовании модуля Workforce для изменения назначений, типов назначений, сотрудников, диспетчеров и интеграции приложений см. в документации ArcGIS API for Python для модуля Workforce.

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

Внимание:

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

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

Создание назначений с помощью ArcGIS REST API

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

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

Для полей, описанных в следующей таблице, значения необходимы:

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

SHAPE

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

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

status

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

  • 0 (Не назначено) - создание не назначенного задания.
  • 1 (Назначено) - назначение задания, как часть его создания.
Внимание:

Если задание назначается, необходимо включить значения для полей workerid и assigneddate, описанных ниже.

assignmenttype

Тип назначения, полученный из значений GlobalID в таблице типов назначений.

Допустимое значение GlobalID из таблицы типов назначений.

location

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

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

dispatcherid

ID диспетчера, создавшего назначение, полученный из значений GlobalID в таблице диспетчеров.

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

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

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

description

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

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

priority

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

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

workorderid

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

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

duedate

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

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

Примечание:

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

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

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

workerid

ID мобильного сотрудника, которому присваивается назначение, извлекаемое из значений GlobalID слоя Workers.

Корректное значение GlobalID назначаемого мобильного сотрудника.

assigneddate

Дата и время назначения задания.

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

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

Распределение назначений с помощью ArcGIS REST API

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

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

status

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

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

workerid

ID мобильного сотрудника, которому присваивается назначение, извлекаемое из значений GlobalID слоя Workers.

Значение GlobalID назначаемого мобильного сотрудника.

assigneddate

Дата и время назначения задания.

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

dispatcherid

ID диспетчера, создавшего назначение, полученный из значений GlobalID в таблице диспетчеров.

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