ArcGIS Workforce 자동화 및 스크립팅

주의:

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

비고:

클래식 프로젝트에는 아래 설명된 것과 다른 스키마가 있습니다. 클래식 Workforce 프로젝트를 자동화하고 스크립팅하는 방법에 대한 자세한 내용은 Workforce 자동화 및 스크립팅(클래식)을 참고하세요. 클래식 프로젝트를 새 스키마로 마이그레이션하려면 클래식 프로젝트 마이그레이션을 참고하세요.

자세한 내용은 클래식 프로젝트란?을 참고하세요.

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

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

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

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

스키마 오버뷰

Workforce 프로젝트는 단일 피처 서비스 내에서 두 개의 피처 레이어, 세 개의 테이블, 세 개의 코드 값 도메인으로 구성됩니다. Workforce 피처 서비스는 프로젝트가 폴더, 그룹, 디스패처, 작업자 웹 맵과 함께 생성될 때 자동으로 생성됩니다. 피처 서비스는 두 개의 웹 맵과 항목 관계이며 아래와 같이 미리 정의된 스키마에 있습니다.

Workforce 스키마 다이어그램

비고:

특정 필드 이름이 ArcGIS Enterprise와 다릅니다. OBJECTID, GlobalID, CreationDate, Creator, EditDateEditor 대신, 각각 objectid, globalid, created_date, created_user, last_edited_datelast_edited_user입니다.

Workforce 피처 서비스

Workforce 피처 서비스에는 다음 레이어와 테이블이 포함됩니다.

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

    업무에 지오메트리에 대한 null 값이 있는 경우 Workforce에 나타나지 않습니다.

  • 디스패처 테이블
    • 프로젝트의 각 디스패처에 대한 레코드를 포함하는 테이블입니다.
    • 이름, 연락처 번호 등과 같은 디스패처 정보가 포함됩니다.
    • 디스패처의 ArcGIS 기관 사용자 이름은 userid 필드에 저장됩니다.
    • 이 레이어는 각 디스패처를 생성하고 마지막으로 업데이트한 사람을 추적합니다.
    • GlobalID에서 Assignments.dispatcherid 사이에는 PK-FK 관계가 있습니다. 디스패처 테이블의 GlobalID 값을 Assignments.dispatcherid 필드 값으로 사용해 디스패처를 배정된 모든 업무와 연결합니다.
  • 업무 유형 테이블
    • 프로젝트의 각 업무 유형에 대한 레코드를 포함하는 테이블입니다.
    • 프로젝트를 생성하면 이 테이블이 비어 있습니다. 프로젝트 구성 중에 업무 유형을 추가하면, 코드 값 도메인에 값이 포함됩니다.
    • 여기에는 업무 유형을 추가할 때 프로젝트 소유자가 지정한 업무 유형에 대한 설명이 포함됩니다.
    • GlobalID에서 Assignments.assignmenttype 사이에는 PK-FK 관계가 있습니다. 업무 유형 테이블의 GlobalID 필드 값을 사용해 업무 유형을 업무와 연결합니다.
  • 업무 통합 테이블
    • 프로젝트의 각 업무 통합에 대한 레코드를 포함하는 테이블입니다.
    • 이 테이블은 생성 시 ArcGIS Navigator와의 통합에 대한 레코드를 포함합니다.
    • 업무 통합 테이블에는 표준 시스템 정의 특성과 다음 사용자 정의 속성이 포함됩니다.
      • app - 웹 앱에서 구성 환경을 채우는 데 필요한 통합 구성을 찾도록 도와주는 통합 앱의 식별자입니다(예시: arcgis-collector 또는 https://collector.arcgis.app).
      • assignmenttype - 통합이 특정 업무 유형에 대해서만 표시되어야 하는 경우 업무 유형의 GlobalID입니다. null의 값은 통합이 프로젝트의 모든 업무 유형을 지원함을 나타냅니다.
      • prompt - 모바일 클라이언트에 표시되는 메시지입니다(예시: 업무 탐색).
      • urltemplate - 통합 앱을 호출하는 데 사용되는 템플릿 URL입니다.
    • 특정 업무에 적용할 수 있는 통합을 찾으려면 where 절(assignmenttype = null 또는 assignmenttype = '<assignment-type-id>') 중 하나를 사용합니다. 이 절을 사용하여 모든 프로젝트 수준 통합과 현재 업무 유형에 대해 모든 유형 수준 통합을 찾을 수 있습니다.
    • 프로젝트에 적용할 수 있는 통합을 찾으려면 where 절(예시: appid = 'arcgis-collector')을 사용하여 앱에서 쿼리합니다.

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

  • Assign_Status - 업무 상태에 대한 일곱 개의 유효한 값을 저장합니다. Workforce에서 나중에 사용하도록 0~20의 값이 예약됩니다. 이 필드에 자체 값을 저장하려는 고객은 해당 범위 밖에서 값을 선택해야 합니다.
  • Priority - 업무의 우선순위에 대한 네 개의 유효한 값을 저장합니다.
  • Worker_Status - 모바일 작업자의 상태에 대한 세 개의 유효한 값을 저장합니다.

    코드 값 도메인의 값은 Workforce 스키마 다이어그램을 참고하세요.

웹 맵 항목 관계

Workforce 피처 서비스와 작업자 및 디스패처 웹 맵의 항목 관계에는 다음과 같은 정의가 있습니다.

  • 관계 유형 - WorkforceMap2FeatureService
  • 출발지 유형 - 웹 맵
  • 목적지 유형 - 피처 서비스
  • 규칙
    • mustOwnAllItems - 프로젝트 소유자는 관계를 설정하고 관련 맵을 소유해야 합니다.

웹 맵이 Workforce 피처 서비스와 항목 관계인 경우 다음 정보가 해당 메타데이터에 추가됩니다.

  • title - 프로젝트의 제목입니다.
  • snippet - 프로젝트의 짧은 설명입니다.
  • thumbnail - 프로젝트의 썸네일입니다.
  • typeKeywords - Workforce Worker는 작업자 맵에, Workforce Dispatcher는 디스패처 맵에 추가됩니다.

업무 상태 날짜 및 시간 필드

Assign_Status 도메인에서 정의된 각 업무 상태의 경우 업무 피처 레이어에 해당 날짜 및 시간 필드가 있습니다. 이 필드에는 업무가 해당 상태였던 마지막 날짜와 시간이 포함됩니다. 상태를 특정 업무에 처음 사용하면 연결된 날짜 및 시간 필드가 채워집니다. 업무가 나중에 같은 상태가 되면 날짜 및 시간 필드는 새로운 날짜 및 시간으로 업데이트됩니다. 예를 들어, 업무를 처음 할당하면 할당된 날짜는 현재 날짜와 시간입니다. 세 시간 후에 재배정할 경우 assignedDate 필드는 새로운 시간으로 업데이트되고 기존 업무 시간은 제거됩니다.

업무가 재배정될 때 inprogressdate, declineddate 또는 pauseddate 필드가 채워지면 null로 설정됩니다.

업무 상태해당 날짜 및 시간 필드

할당 안 됨

creationdate

요청됨

assigneddate

진행 중

inprogressdate

완료

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입니다. inprogressDatepauseddate 값은 이제 null입니다.

ArcGIS API for Python 사용(권장)

ArcGIS API for Python 및 해당 Workforce 모듈을 사용하여 Workforce를 자동화 및 스크립팅합니다. Workforce 모듈로 생성된 업무는 동일한 스키마를 사용하므로 Workforce에서 해석할 수 있습니다. 예시 및 모범 사례는 GitHub의 Workforce 스크립트 저장소에서 제공되는 샘플 스크립트를 참고하세요. 스크립트에서는 파이썬을 사용하여 프로그래밍 방식으로 외부 데이터 원본에서 업무 불러오기, 작업자 가져오기 및 관리하기, 완수된 업무 제거하기 등 여러 작업을 완료하는 방법을 보여줍니다. ArcGIS Workforce 프로젝트 Jupyter Notebook 관리를 사용하여 대표적인 작업을 확인할 수도 있습니다. Workforce 모듈을 시작하려면 먼저 ArcGIS API for Python을 설치하고 설정해야 합니다.

비고:

Workforce 프로젝트를 자동화하려면 ArcGIS API for Python 1.8.3 이상을 사용해야 합니다.

Workforce 모듈 시작하기

Workforce 모듈을 통해 오프라인에서 사용할 수 있는 프로젝트뿐 아니라 클래식 프로젝트도 생성할 수 있습니다. 다음 단계에 따라 Workforce 모듈로 프로젝트를 생성합니다.

  1. Python 스크립트 또는 Python 콘솔에서 다음 명령을 실행하여 ArcGIS Online에 로그인합니다.

    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 모듈을 사용하여 업무, 업무 유형, 작업자, 디스패처, 앱 통합을 수정하는 방법에 대한 자세한 내용은 Workforce 모듈용 ArcGIS API for Python 문서를 참고하세요.

피처 레이어용 ArcGIS REST API 사용

주의:

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

피처 레이어용 ArcGIS REST API를 사용하여 Workforce를 자동화할 수 있습니다. ArcGIS REST API를 사용할 때는 피처 객체 형식을 사용해 업무를 생성하고 업데이트해야 합니다. ArcGIS REST API를 사용한 업무 생성과 업데이트배정에 대한 자세한 내용은 아래 섹션을 참고하세요.

ArcGIS REST API를 사용한 업무 생성

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

ArcGIS REST API를 사용하여 업무를 생성할 때는 피처 추가 명령을 사용하세요. 일부 필드에는 값이 필요하며, 업무에 값이 필요하면 다른 필드에 값을 입력할 수 있습니다. 일부 필드에는 값이 포함될 수 없습니다.

다음 테이블에 설명된 필드는 값이 필요합니다.

필드정의제공 값

SHAPE

업무 포인트 위치

XY 좌표 쌍

status

assign_status 도메인 값에서 파생된 업무 상태

  • 0(배정 안 됨) - 배정되지 않은 작업을 생성합니다.
  • 1(배정됨) - 생성 과정 중에 작업을 배정합니다.
주의:

작업을 배정하려는 경우, 아래와 같이 workeridassigneddate 필드에 대한 값을 포함해야 합니다.

assignmenttype

업무 유형 테이블의 GlobalID 값에서 파생된 업무 유형

업무 유형 테이블의 유효한 GlobalID

location

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

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

dispatcherid

업무를 생성하는 디스패처의 ID(디스패처 테이블의 GlobalID 값에서 파생)

프로젝트와 관련된 특정 디스패처의 유효한 GlobalID

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

필드정의제공 값

description

모바일 작업자를 위한 업무 정보

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

priority

업무 우선순위

Priority 도메인의 유효한 값

workorderid

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

외부 시스템의 값입니다.

duedate

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

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

비고:

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

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

필드정의제공 값

workerid

업무가 배정되는 모바일 작업자의 ID(작업자 레이어의 GlobalID 값에서 파생)

배정하는 모바일 작업자의 유효한 GlobalID

assigneddate

업무가 배정된 날짜와 시간

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

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

ArcGIS REST API를 사용하여 업무 배정

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

필드정의제공 값

status

Assign_Status 도메인 값에서 파생된 업무 상태

1(할당됨)

workerid

업무가 배정되는 모바일 작업자의 ID(작업자 레이어의 GlobalID 값에서 파생)

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

assigneddate

업무가 배정된 날짜와 시간

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

dispatcherid

업무를 배정하는 디스패처의 ID(디스패처 테이블의 GlobalID 값에서 파생)

프로젝트와 관련된 특정 디스패처의 유효한 GlobalID