Workforce 자동화 및 스크립팅

주의:

이 주제에서는 Workforce for ArcGIS에 나타나는 클래식 Workforce 프로젝트를 자동화하고 스크립팅하는 방법을 안내합니다. 오프라인에서 사용할 수 있고 ArcGIS Workforce에 나타나는 프로젝트를 자동화하고 스크립팅하는 방법에 대한 자세한 내용은 Workforce 자동화를 참고하세요.

이 항목은 ArcGIS API for Python 또는 REST API 등을 통해 피처 레이어로 직접 작업하는 프로젝트 소유자와 관리자를 위한 고급 항목입니다.

ArcGIS Workforce를 사용하면 모든 유형의 현장 활동에 대한 워크플로를 계획, 관리, 완료할 수 있습니다. 작업을 생성하고 할당하기 위한 웹 앱과 모바일 작업자가 업무를 관리하기 위한 모바일 앱을 통해 ArcGIS 기관에 통합됩니다. 프로젝트 소유자가 Workforce 프로젝트를 생성하고 구성하면, 디스패처가 Workforce 웹 응용프로그램을 사용해 작업을 생성하고 배정하며 모바일 작업자는 모바일 기기에서 Workforce와 다른 ArcGIS Apps를 사용해 자신에게 배정된 작업을 확인하고 완료합니다. 전체 워크플로는 Workforce 프로젝트(피처 레이어 및 맵 컬렉션)에 따라 진행됩니다.

Workforce 웹 앱은 디스패처가 빠르고 효율적으로 업무를 생성하고 기존 업무를 관리할 수 있도록 설계되었습니다. 그러나 웹 앱의 범위를 벗어나는 업무에 대해 수행할 작업이 있을 수 있습니다. 예를 들어 Workforce에 대해 가장 많이 받는 요청은 서드 파티 작업 지시, 자산 또는 유지 관리 시스템 등과 같은 다른 시스템과 통합하는 방법, 반복되는 업무를 처리하는 방법에 대한 내용입니다.

Workforce 자동화 및 스크립팅을 사용하여 이러한 기능을 구현할 수 있습니다. 웹 앱을 사용하지 않고도 업무를 생성할 수 있습니다. Workforce는 레코드 생성 방식에 관계없이 업무 피처 레이어의 콘텐츠와 연동됩니다. 작업은 기관 내 다른 시스템(예시: 자산 또는 유지관리 관리 시스템, 또는 311 시스템)에서 시작될 수 있습니다. Workforce를 외부 원본과 통합해 업무를 생성하고 업데이트할 수 있습니다. 업무 레이어에는 외래 키 역할을 할 수 있는 workOrderId 필드가 포함되어 있어, 외부 시스템을 참조하는 고유 식별자를 저장할 수 있습니다. workOrderId 필드는 업무 세부정보에서 ID로 사용할 수 있습니다. 디스패처는 정보를 제공할 수 있고 모바일 작업자는 그 정보를 볼 수 있습니다.

자동화 및 스크립팅을 시작하기 전에 Workforce 프로젝트의 스키마업무 상태 날짜 및 시간 필드 작동 방식을 이해하고 있어야 합니다. ArcGIS API for Python 사용이 권장되지만 피처 레이어용 REST API를 통해 Workforce를 자동화할 수도 있습니다. 동일한 스키마로 생성된 업무인 경우 Workforce에서 해석할 수 있습니다.

스키마 개요

Workforce 프로젝트는 네 개의 피처 레이어와 미리 정의된 스키마가 있는 네 개의 코드 값 도메인으로 구성되었습니다. 각 피처 레이어의 이름은 모니커의 조합으로, 피처 레이어의 목적을 설명하며 뒤에는 Workforce 프로젝트 항목의 GUID가 붙어 있습니다. 예를 들어, GUID 5dd018fcd88c4d33814cf3da9c44061e를 가진 프로젝트와 연관된 작업자 레이어의 이름은 workers_5dd018fcd88c4d33814cf3da9c44061e가 됩니다. 이를 통해 각 피처 레이어의 고유성이 보장됩니다.

Workforce 스키마 다이어그램
비고:

ArcGIS Enterprise에서는 편집자 추적 필드가 다릅니다. CreationDate, Creator, EditDate, Editor 대신 각각 created_date, created_user, last_edited_date, last_edited_user입니다.

네 개의 피처 레이어는 다음과 같습니다.

  1. 작업자
    • 프로젝트에 포함된 각 모바일 작업자의 레코드가 들어 있는 포인트 피처 레이어입니다.
    • 연락처 번호, 작업명 등과 같은 모바일 작업자 정보가 포함됩니다.
    • 모바일 작업자의 ArcGIS 기관 사용자 이름은 userId 필드에 저장됩니다.
    • 이 레이어는 각 모바일 작업자를 생성하고 마지막으로 업데이트한 사람을 추적합니다.
    • OBJECTID에서 Assignments.workerId 사이에는 기본 키-외래 키(PK-FK) 관계가 있습니다. 작업자 레이어의 OBJECTID 값을 Assignments.workerId 필드 값으로 사용해 모바일 작업자를 모든 업무와 연결합니다.
    • 레이어에는 다음과 같은 코드 값 도메인 연결이 있습니다.
      • status 필드는 모바일 작업자 상태를 추적하기 위한Worker_Status 코드 값 도메인과 연결되었습니다.
  2. 할당
    • 각 업무에 대한 레코드가 포함된 포인트 피처 레이어입니다.
    • 상태, 위치, 설명 등과 같은 업무 정보가 포함됩니다.
    • 이 레이어는 각 업무를 생성하고 마지막으로 업데이트한 사람을 추적합니다.
    • 첨부 파일이 피처 레이어에서 활성화됩니다.
    • 이 레이어에는 일부 필드에 대한 외래 키가 포함되어 있어서, 다른 레이어의 값을 이 레이어와 연결할 수 있습니다.
      • Assignments.workerId to Workers.OBJECTID.
      • Assignments.dispatcherId toDispatchers.OBJECTID.
      • Assignments.workOrderId 다른 시스템의 값을 제공하여 자산 또는 유지 보수 관리 시스템 등 외부 시스템에 대한 외래 키로 사용할 수 있습니다.
    • 레이어에는 다음과 같은 코드 값 도메인 연결이 있습니다.
      • status 필드는 업무 상태를 추적하기 위한 Assign_Status 코드 값 도메인과 연결되어 있습니다.
      • priority 필드는 작업 업무 우선순위를 관리하기 위한 Priority 코드 값 도메인과 연결되었습니다.
      • assignmentType 필드는 프로젝트의 업무 유형을 저장하기 위한 Assign_Type 코드 값 도메인과 연결되어 있습니다.
  3. 디스패처
    • 프로젝트 내의 각 디스패처에 대한 레코드 포함된 포인트 피처 레이어입니다.
    • 이름, 연락처 번호 등과 같은 디스패처 정보가 포함됩니다.
    • 디스패처의 ArcGIS 기관 사용자 이름은 userId 필드에 저장됩니다.
    • 이 레이어는 각 디스패처를 생성하고 마지막으로 업데이트한 사람을 추적합니다.
    • OBJECTID에서 Assignments.dispatcherId 사이에는 PK-FK 관계가 있습니다. 디스패처 레이어의 OBJECTID 값을 Assignments.dispatcherId 필드 값으로 사용해 디스패처를 배정된 모든 업무와 연결합니다.
  4. 위치 추적
    • 위치 추적을 활성화한 상태에서 기록한 각 포인트 위치의 레코드가 포함된 포인트 피처 레이어입니다.
    • 이 레이어는 각 위치 추적을 생성하고 마지막으로 업데이트한 사람을 추적합니다.

네 개의 코드 값 도메인은 다음과 같습니다.

  1. Assign_Status - 업무 상태에 대한 6개의 유효한 값을 저장합니다.
  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에서 제공되는 샘플 스크립트를 참고하세요. 스크립트에서는 파이썬을 사용하여 프로그래밍 방식으로 외부 데이터 원본에서 업무 불러오기, 작업자 가져오기 및 관리하기, 완수된 업무 제거하기 등 여러 작업을 완료하는 방법을 보여줍니다. 해당 Jupyter Notebook을 사용하여 몇 가지 대표적인 작업을 확인해 볼 수도 있습니다.

Workforce 모듈은 ArcGIS API for Python 1.4.1을 통해 도입되었습니다. 이 모듈이 도입되기 전에도 파이썬을 사용할 수 있었지만 이 모듈을 통해 Workforce 작업을 간편하게 자동화할 수 있습니다. Workforce 모듈은 Workforce 프로젝트 스키마와 규칙을 캡슐화합니다. 또한 Workforce 프로젝트의 무결성을 보호하는 안전 기능도 포함되어 있습니다.

비고:

스크립트에 대한 의견이나 피드백 또는 다른 스크립트에 대한 아이디어가 있다면 GitHub에서 공유하세요.

피처 레이어용 REST API 사용

주의:

ArcGIS API for Python을 사용하는 것을 권장합니다. 여기에는 Workforce 프로젝트의 무결성을 보호하는 여러 가지 안전 기능이 포함되어 있습니다.

피처 레이어용 REST API를 통해 Workforce를 자동화할 수 있습니다. REST API를 사용할 때는 피처 개체를 사용해 업무를 생성하고 업데이트해야 합니다. REST API를 통한 업무 생성, 업데이트, 할당에 대한 자세한 내용은 다음 섹션을 참고하세요.

REST API를 통해 업무 생성

Workforce는 레코드 생성 방식에 관계없이, 업무 피처 레이어의 콘텐츠와 연동합니다. Workforce 웹앱을 통해 업무를 생성할 필요는 없습니다. REST API를 통해 업무 피처 레이어에서 레코드를 올바르게 생성하는 경우 Workforce는 웹앱과 모바일 앱 모두에서 이 레코드를 유효한 업무로 인식합니다.

REST API로 업무를 생성할 때는 피처 추가 명령을 사용하세요. 일부 필드에는 값을 반드시 제공해야 하지만, 일부 필드에는 업무에 필요한 경우 값을 제공할 수 있고, 나머지 필드에는 값을 제공하지 않아도 괜찮습니다.

다음 필드에는 값을 제공해야 합니다.

필드정의제공 값

SHAPE

업무의 포인트 위치

XY 좌표

status

Assign_Status 도메인 값의 업무 상태

  • 0(할당 안 됨): 할당되지 않은 작업을 생성하는 경우
  • 1(할당됨): 생성 과정 중에 작업을 할당하려는 경우
주의:

작업을 할당하려는 경우, workerId 필드와 assignedDate 필드(뒤쪽 테이블에서 설명)에 대한 값을 포함해야 합니다.

assignmentType

Assign_Type 도메인 값의 업무 유형

Assign_Type 도메인의 유효한 값

location

업무의 포인트 위치에 대한 텍스트 설명

주소, XY 좌표 쌍, 또는 설명 텍스트

assignmentRead

모바일 작업자가 업무를 확인했는지 여부를 지정

업무를 확인하지 않았기 때문에 0으로 지정

dispatcherId

업무를 생성한 디스패처의 ID(디스패처 레이어의 dispatchers.OBJECTID)

ArcGIS 기관 사용자로 연결된 경우 이에 대한 디스패처 ID이거나 프로젝트와 연관된 특정 디스패처의 ID일 수 있음

또한 다음의 선택적 필드에 대한 값도 포함할 수 있습니다.

선택적 필드정의제공 값

description

모바일 작업자를 위한 업무 설명

모바일 작업자에 대한 텍스트입니다. 공백은 pre-line 값으로 처리됩니다.

priority

업무 우선순위

Priority 도메인의 유효한 값입니다.

workOrderId

외부 또는 서드 파티 시스템의 작업 지시를 참조하는 외래 키

외부 시스템의 값입니다.

dueDate

업무를 완료해야 하는 날짜와 시간

유효한 날짜와 시간입니다(마지막 시점부터의 UTC 시간(초)으로 제공됨).

비고:

시간 없이 기한 날짜를 제공하려면, 날짜를 지정한 후 11:59:59 PM을 시간으로 사용하세요.

생성 과정 중에 작업을 할당하려는 경우, 위에서 설명한 상태 1을 사용하고 다음 필드도 함께 제공하세요.

필드정의제공 값

workerId

업무가 할당되는 모바일 작업자의 ID(작업자 레이어의 workers.OBJECTID)

OBJECTID 배정하는 모바일 작업자의

assignedDate

업무가 할당된 날짜와 시간

현재 날짜와 시간, 마지막 시점부터의 UTC 시간(초) 제공

업무 레이어의 다른 필드는 ArcGIS 플랫폼에서 관리합니다. 여기에는 스키마 다이어그램의 ArcGIS 필드 또는 편집자 추적 필드의 일부로 표시된 필드들도 포함됩니다. 해당 값을 제공하거나 수정해서는 안 됩니다.

REST API를 통해 업무 할당

이전 섹션에서 할당된 업무를 생성하는 방법을 알아봤습니다. 여기에서는 기존 업무를 할당하는 방법을 살펴보겠습니다. REST API 피처 업데이트 명령을 사용해, 업데이트할 피처 배열을 전달하세요. 각 피처에 대해 다음의 세 필드를 제공해야 업무를 할당 또는 재할당할 수 있습니다.

필드정의제공 값

status

Assign_Status 도메인 값의 업무 상태

  • 1(할당됨)

workerId

업무가 할당되는 모바일 작업자의 ID(작업자 레이어의 workers.OBJECTID)

OBJECTID 배정하는 모바일 작업자의

assignedDate

업무가 할당된 날짜와 시간

현재 날짜와 시간, 마지막 시점부터의 UTC 시간(초) 제공

dispatcherId

업무를 할당한 디스패처의 ID(업무를 만든 디스패처의 ID와 다른 경우)(디스패처 레이어의 dispatchers.OBJECTID)

ArcGIS 기관 사용자로 연결된 경우 이에 대한 디스패처 ID이거나 프로젝트와 연관된 특정 디스패처의 ID일 수 있음