ArcGIS Workforce の自動化とスクリプト化

注意:

これは、ArcGIS API for PythonArcGIS REST API などを通じてフィーチャ レイヤーを直接操作する、管理者およびプロジェクト所有者向けの高度なトピックです。

注意:

Classic プロジェクトのスキーマは、以下の説明とは異なります。 Classic Workforce プロジェクトの自動化とスクリプト化の詳細については、「Workforce (Classic) の自動化とスクリプト化」をご参照ください。 Classic プロジェクトを新しいスキーマに移行するには、「Classic プロジェクトの移行」をご参照ください。

詳細については、「Classic プロジェクトとは」をご参照ください。

ArcGIS Workforce では、あらゆるタイプの現場作業のワークフローを計画、管理、および実施できます。 Workforce for ArcGIS は、作業を作成し割り当てるための Web アプリと、モバイル作業者がアサインメントを管理するためのモバイル アプリとともに、ArcGIS 組織に統合されています。 プロジェクト所有者が Workforce プロジェクトを作成および構成した後、ディスパッチャーは Workforce Web アプリを使用して作業を作成し割り当て、モバイル作業者はモバイル デバイス上の Workforce および他の ArcGIS アプリを使用して、割り当てられた作業を表示および実施します。 ワークフロー全体は、フィーチャ レイヤーとマップのコレクションである Workforce プロジェクトによって進行されます。

Workforce Web アプリでは、ディスパッチャーが迅速かつ効率的に作業のアサインメントを作成し、既存のアサインメントを管理できます。 しかし、アサインメントで Web アプリの範囲外の処理を行いたい場合もあります。 たとえば、Workforce 向けに受信する一般的なリクエストには、サードパーティの作業指示、アセット、維持管理システムなどの他のシステムとの連携に関するもののほか、反復的または継続的なアサインメントの処理に関するものがあります。

Workforce で自動化とスクリプトを使用して、これらの機能を実現できるようになりました。 アサインメントを作成する方法は Web アプリの使用だけに限りません。Workforce は、レコードの作成方法にかかわらず、Assignments フィーチャ レイヤーのコンテンツを操作します。 アセット、維持管理システム、311 システムなど、組織内の他のシステムから作業を作成できます。Workforce はアサインメントの作成と更新のため、外部ソースと統合できます。 [Assignments] レイヤーには、外部キーとして動作する workOrderId フィールドがあり、外部システムを参照する一意識別子を保存しています。 workOrderId フィールドはアサインメントの詳細では [ID] として表示されます。ディスパッチャーは情報を入力でき、モバイル作業者が表示できます。

自動化とスクリプト化を開始する前に、Workforce プロジェクトのスキーマと、アサインメントのステータスにおける日付および時間フィールドの処理方法を理解していることを確認します。 ArcGIS API for Python を使用することをお勧めしますが、フィーチャ レイヤー向けの ArcGIS REST API を通じて Workforce を自動化することもできます。

スキーマの概要

Workforce プロジェクトは、1 つのフィーチャ サービス内に 2 つのフィーチャ レイヤー、3 つのテーブル、3 つのコード値ドメインがあります。 Workforce フィーチャ サービスは、プロジェクトの作成時に、フォルダー、グループ、ディスパッチャーおよび作業者 Web マップとともに自動的に生成されます。 フィーチャ サービスには、2 つの Web マップとのアイテムのリレーションシップと、事前定義されたスキーマがあります。以下の図をご参照ください。

Workforce スキーマ ダイアグラム

注意:

ArcGIS Enterprise では一部のフィールド名が異なります。 OBJECTIDGlobalIDCreationDateCreatorEditDate、および Editor の代わりに、それぞれ objectidglobalidcreated_datecreated_userlast_edited_date、および last_edited_user になります。

Workforce フィーチャ サービス

Workforce フィーチャ サービスには、次のレイヤーとテーブルが含まれます。

  • [Workers] レイヤー
    • プロジェクトに含まれる各モバイル作業者の記録を含むポイント フィーチャ レイヤーです。
    • 連絡先番号、ジョブ タイトルなどのモバイル作業者に関する情報が含まれます。
    • モバイル作業者の ArcGIS 組織ユーザー名は userid フィールドに保存されます。
    • レイヤーは、各モバイル作業者の作成者と最終更新者を記録します。
    • GlobalID から Assignments.workerid へは、主キー-外部キー (PK-FK) の関係があります。 [Workers] レイヤーの GlobalID の値を Assignments.workerid フィールドの値として使用することで、すべてのアサインメントを作業者に関連付けます。
    • レイヤーには、次のコード値ドメインの関係があります。
      • status フィールドは Worker_Status コード値ドメインに関連付けられ、モバイル作業者のステータスを記録します。
  • [アサインメント] レイヤー
    • 各アサインメントの記録を含むポイント フィーチャ レイヤーです。
    • ステータス、場所、説明などのアサインメントに関する情報が含まれます。
    • レイヤーは、各アサインメントの作成者と最終更新者を記録します。
    • フィーチャ レイヤーでは、アタッチメントが有効化されています。
    • レイヤーには一部のフィールドの外部キーが含まれ、別のレイヤーからの値がこのレイヤーに関連付けられています。
      • Assignments.workerid Workers.GlobalID へ。
      • Assignments.dispatcherid Dispatchers.GlobalID へ。
      • Assignments.workorderid は、他のシステムからの値を入力することで、資産、維持管理システムなどの外部システムへの外部キーとして使用できます。
      • GlobalID から Assignment.assignmenttype へは、PK-FK の関係があります。 [Assignments] レイヤーの GlobalID の値を Assignments.assignmenttype フィールドの値として使用することで、アサインメントをアサインメント タイプに関連付けます。
    • レイヤーには、次のコード値ドメインの関係があります。
      • status フィールドは Assign_Status コード値ドメインに関連付けられ、アサインメントのステータスを記録します。
      • priority フィールドは Priority コード値ドメインに関連付けられ、作業のアサインメントの優先度を管理します。
    注意:

    アサインメントのジオメトリが null 値の場合、Workforce には表示されません。

  • [Dispatchers] テーブル
    • プロジェクト内の各ディスパッチャーの記録を含むテーブルです。
    • 名前や連絡先番号などのディスパッチャーに関する情報が含まれます。
    • ディスパッチャーの ArcGIS 組織ユーザー名は userid フィールドに保存されます。
    • レイヤーは、各ディスパッチャーの作成者と最終更新者を記録します。
    • GlobalID から Assignments.dispatcherid へは、PK-FK の関係があります。 [Dispatchers] テーブルの GlobalID の値を Assignments.dispatcherid フィールドの値として使用することで、割り当てたすべてのアサインメントをディスパッチャーに関連付けます。
  • [Assignment Types] テーブル
    • プロジェクトの各アサインメント タイプの記録を含むテーブルです。
    • このテーブルは、プロジェクトが作成された時点では空です。 プロジェクトの構成中にアサインメント タイプが追加されると、値が格納されます。
    • アサインメント タイプが追加されたときに、プロジェクト所有者によって指定されるアサインメント タイプの説明が含まれます。
    • GlobalID から Assignments.assignmenttype へは、PK-FK の関係があります。 [Assignment Types] テーブルの GlobalID フィールド値を使用することで、アサインメント タイプをアサインメントに関連付けます。
  • [Assignment Integrations] テーブル
    • プロジェクトの各アサインメント連携の記録を含むテーブルです。
    • このテーブルには、ArcGIS Navigator との連携の記録が含まれています。
    • [Assignment Integrations] テーブルには、標準的なシステム定義属性以外に、次のユーザー定義属性が含まれます。
      • app- 連携したアプリの ID (arcgis-collectorhttps://collector.arcgis.app など)。Web アプリの構成を反映するために必要な連携構成を見つけるために使用されます。
      • assignmenttype- アサインメント タイプの GlobalID。特定のアサインメント タイプの連携のみを表示する場合に使用されます。 値が null であれば、連携はプロジェクト内のすべてのアサインメント タイプをサポートすることを意味します。
      • prompt- モバイル クライアントに表示されるプロンプト (「アサインメント地点へのルート案内」など)。
      • urltemplate- 連携アプリを起動するために使用されるテンプレート URL。
    • 特定のアサインメントに該当する連携を見つけるには、assignmenttype = nullassignmenttype = '<assignment-type-id>' の Where 句を使用します。 これにより、現在のアサインメント タイプのすべてのプロジェクトレベル連携と、すべてのタイプレベル連携を見つけることができます。
    • プロジェクトに該当する連携を見つけるには、appid = 'arcgis-collector' などの Where 句を使用してアプリごとにクエリします。

3 つのコード値ドメインは以下のとおりです。

  • Assign_Status- アサインメントのステータスに関する 7 つの有効な値を保存しています。 0 ~ 20 の値は、Workforce が将来使用するために予約済みです。 このフィールドに独自の値を格納したい場合は、この範囲外の値を選択する必要があります。
  • Priority- アサインメントの優先度に関する 4 つの有効な値を保存しています。
  • Worker_Status- モバイル作業者のステータスに関する 3 つの有効な値を保存しています。

    コード値ドメインの値については、Workforce スキーマ ダイアグラムをご参照ください。

Web マップのアイテムのリレーションシップ

Workforce フィーチャ サービスと、作業者およびディスパッチャー Web マップ間のアイテムのリレーションシップには、以下のような定義があります。

  • リレーションシップ タイプ - WorkforceMap2FeatureService
  • オリジン タイプ - Web マップ
  • 関連先タイプ - フィーチャ サービス
  • ルール
    • mustOwnAllItems - プロジェクト所有者はリレーションシップを確立し、関連マップを所有する必要があります。

Web マップと Workforce フィーチャ サービスにアイテムのリレーションシップがある場合は、メタデータに以下の情報が追加されます。

  • title - プロジェクトのタイトル。
  • snippet - プロジェクトの簡単な説明。
  • thumbnail - プロジェクトのサムネイル。
  • typeKeywords - Workforce Worker が作業者マップに追加され、Workforce Dispatcher がディスパッチャー マップに追加される。

アサインメントのステータスにおける日付および時間フィールド

Assign_Status ドメインで定義される各アサインメントのステータスには、対応する日付および時間フィールドが [Assignments] フィーチャ レイヤーに存在します。 これらのフィールドには、アサインメントが対応する状態になった最新の日付および時間が含まれています。 特定のアサインメントに対してあるステータスが使用されたとき、関連する日付および時間フィールドが初めて入力されます。 後でアサインメントが同じステータスになると、日付および時間フィールドは新しい日付および時間で更新されます。 たとえば、アサインメントが初めて割り当てられると、割り当てられた日付は現在の日付および時間になります。 3 時間後に再割り当てされた場合、assignedDate フィールドは新しい時間に更新され、元の割り当て時間は削除されます。

アサインメントの再割り当て時に inprogressdatedeclineddatepauseddate フィールドに入力されると、null に設定されます。

アサインメント ステータス対応する日付および時間フィールド

未分類

creationdate

割り当て済み

assigneddate

In Progress

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 です。 inprogressDate および pauseddate 値は null になりました。

ArcGIS API for Python の使用 (推奨)

ArcGIS API for Python およびその Workforce モジュールを使用すると、Workforce を自動化およびスクリプト化できます。 Workforce モジュールを使用して作成されたアサインメントは、同じスキーマに従っているため、Workforce で解釈できます。 例とベスト プラクティスについては、GitHub の Workforce スクリプト リポジトリにあるサンプル スクリプトをご参照ください。 これらのスクリプトは、外部データ ソースからアサインメントをプログラムで読み込んだり、作業者をインポートおよび管理したり、完了したアサインメントを削除したりするなど、Python を使用してさまざまなタスクを実行する方法を示しています。 また、ArcGIS Workforce プロジェクトの管理に関する Jupyter Notebook を使用して、一般的な操作を確認することもできます。 Workforce モジュールの使用を開始するには、はじめに ArcGIS API for Python をインストールおよび設定する必要があります。

注意:

Workforce プロジェクトを自動化するには、ArcGIS API for Python 1.8.3 以降を使用する必要があります。

Workforce モジュールの基本操作

Workforce モジュールでは、Classic プロジェクト以外にも、オフライン使用が可能なプロジェクトも作成できます。 以下の手順を実行し、Workforce モジュールでプロジェクトを作成します。

  1. Python スクリプトか Python コンソールのいずれかで以下のコマンドを実行し、ArcGIS Online にサイン インします。

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

  2. 以下のいずれかのコマンドを実行し、Classic プロジェクトか、オフライン使用が可能なプロジェクトを作成します。

    Classic プロジェクトの作成

    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 プロジェクトの整合性を保護します。

Workforce は、フィーチャ レイヤーの ArcGIS REST API を使用して自動化できます。 ArcGIS REST API を使用する場合、フィーチャ オブジェクト形式を使用して、アサインメントを作成および更新する必要があります。 ArcGIS REST API を使用してアサインメントを作成および更新する方法と、アサインメントを割り当てる方法については、以下のセクションをご参照ください。

ArcGIS REST API を使用したアサインメントの作成

Workforce は、レコードの作成方法にかかわらず、[Assignments] フィーチャ レイヤーのコンテンツを操作します。 アサインメントを Workforce Web アプリを通じて作成することは必須ではありません。レコードが ArcGIS REST API を使用して [Assignments] フィーチャ レイヤー内に適切に作成されていれば、Workforce は Web アプリおよびモバイル アプリで有効なアサインメントとして認識します。

ArcGIS REST API を使用してアサインメントを作成する際は、フィーチャの追加コマンドを使用します。 一部のフィールドには値が必要です。アサインメントで必要であれば他のフィールドに値を指定できます。また、値を含むことができないフィールドもあります。

以下の表に示すフィールドには値が必要です。

フィールド定義入力する値

SHAPE

アサインメントのポイント位置

x,y 座標の組

status

アサインメントのステータス (assign_status ドメインの値から生成)

  • 0 (未割り当て) - 未割り当ての作業を作成します。
  • 1 (割り当て済み) - 作成時に作業を割り当てます。
注意:

作業を割り当てる場合は、workerid フィールドと assigneddate フィールドにも値を入力する必要があります。これについては後述します。

assignmenttype

アサインメントのタイプ ([Assignment Types] テーブルの GlobalID 値から生成)

[Assignment Types] テーブルの有効な GlobalID

location

アサインメントのポイント位置のテキストによる説明

住所、x,y 座標の組、または説明文

dispatcherid

アサインメントを作成したディスパッチャーの ID ([Dispatchers] テーブルの GlobalID 値から生成)

プロジェクトに関連付けられた特定のディスパッチャーの、有効な GlobalID

次のオプション フィールドの値も含めることができます。

フィールド定義入力する値

description

アサインメントに関するモバイル作業者の情報

モバイル作業者向けのテキスト。 空白は、pre-line 値として処理されます。

priority

アサインメントの優先度

Priority ドメインの有効な値

workorderid

外部またはサードパーティ システムの作業指示を参照する外部キー

外部システムからの値

duedate

アサインメントを完了させる必要のある日付と時刻

有効な日付と時間 (最終の訪問からの秒数を UTC 時間で入力)。

注意:

時間なしで期日だけを入力するには、日付を指定し、時間に「11:59:59 PM」を入力します。

作業を作成時に割り当てる場合、ステータス 1 (上記のとおり) を使用し、次のフィールドも入力します。

フィールド定義入力する値

workerid

アサインメントを割り当てているモバイル作業者の ID ([Workers] レイヤーの GlobalID 値から生成)

割り当てているモバイル作業者の有効な GlobalID

assigneddate

アサインメントが割り当てられた日付と時間

現在の日付と時間 (最終の訪問からの秒数を UTC 時間で入力)。

[Assignments] レイヤーの他のフィールドは、スキーマ ダイアグラムの ArcGIS または編集情報の記録用フィールドの一部としてマークされたフィールドを含め、ArcGIS プラットフォームによって管理されています。 これらの値を指定したり、変更したりしないでください。

ArcGIS REST API を使用したアサインメントの割り当て

前のセクションでは、割り当てられたアサインメントの作成方法について説明しました。 次に、既存のアサインメントを割り当てる方法について説明します。 ArcGIS REST APIUpdate Features (更新フィーチャ) コマンドを使用し、更新するフィーチャの配列を渡します。 各フィーチャについて、アサインメントを割り当てまたは再割り当てするには、以下の 3 つのフィールドを入力する必要があります。

フィールド定義入力する値

status

アサインメントのステータス (Assign_Status ドメインの値から生成)

1 (割り当て済み)

workerid

アサインメントを割り当てているモバイル作業者の ID ([Workers] レイヤーの GlobalID 値から生成)

割り当てているモバイル作業者の GlobalID

assigneddate

アサインメントが割り当てられた日時。

現在の日付と時間 (最終の訪問からの秒数を UTC 時間で入力)。

dispatcherid

アサインメントを割り当てるディスパッチャーの ID ([Dispatchers] テーブルの GlobalID 値から生成)。

プロジェクトに関連付けられた特定のディスパッチャーの、有効な GlobalID