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

注意:

このトピックでは、Workforce for ArcGIS に表示される Classic Workforce プロジェクトを自動化し、スクリプト化する方法を説明します。 オフライン使用対応で、ArcGIS Workforce に表示されるプロジェクトの自動化とスクリプト化の詳細については、「Workforce の自動化」をご参照ください。

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

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 を使用することをお勧めしますが、フィーチャ レイヤー向けの REST API を通じて Workforce を自動化することもできます。 アサインメントが同じスキーマで作成されている限り、Workforce は解釈できます。

スキーマの概要

Workforce プロジェクトは、4 つのフィーチャ レイヤーと、定義済みのスキーマによる 4 つのコード値ドメインから構成されています。 各フィーチャ レイヤーの名前は、フィーチャ レイヤーの目的を説明した名前の組み合わせに、Workforce プロジェクト アイテムの GUID を付加したものです。 たとえば、GUID 5dd018fcd88c4d33814cf3da9c44061e のプロジェクトに関連付けられた [作業者] レイヤーの名前は workers_5dd018fcd88c4d33814cf3da9c44061e になります。 これにより、各フィーチャ レイヤーの一意性が保証されます。

Workforce スキーマ ダイアグラム
注意:

編集情報フィールドは、ArcGIS Enterprise では異なっています。 CreationDateCreatorEditDate、および Editor の代わりに、それぞれ created_datecreated_userlast_edited_date、および last_edited_user になります。

4 つのフィーチャ レイヤーは以下のとおりです。

  1. 作業者
    • プロジェクトに含まれる各モバイル作業者の記録を含むポイント フィーチャ レイヤーです。
    • 連絡先番号、ジョブ タイトルなどのモバイル作業者に関する情報が含まれます。
    • モバイル作業者の ArcGIS 組織ユーザー名は userId フィールドに保存されます。
    • レイヤーは、各モバイル作業者の作成者と最終更新者を記録します。
    • OBJECTID から Assignments.workerId へは、主キー-外部キー (PK-FK) の関係があります。 [Workers] レイヤーの OBJECTID の値を Assignments.workerId フィールドの値として使用することで、すべてのアサインメントを作業者に関連付けます。
    • レイヤーには、次のコード値ドメインの関係があります。
      • status フィールドは Worker_Status コード値ドメインに関連付けられ、モバイル作業者のステータスを記録します。
  2. 割り当て
    • 各アサインメントの記録を含むポイント フィーチャ レイヤーです。
    • ステータス、場所、説明などのアサインメントに関する情報が含まれます。
    • レイヤーは、各アサインメントの作成者と最終更新者を記録します。
    • フィーチャ レイヤーでは、アタッチメントが有効化されています。
    • レイヤーには一部のフィールドの外部キーが含まれ、別のレイヤーからの値がこのレイヤーに関連付けられています。
      • Assignments.workerId Workers.OBJECTID へ。
      • Assignments.dispatcherId Dispatchers.OBJECTID へ。
      • Assignments.workOrderId は、他のシステムからの値を入力することで、資産、維持管理システムなどの外部システムへの外部キーとして使用できます。
    • レイヤーには、次のコード値ドメインの関係があります。
      • status フィールドは Assign_Status コード値ドメインに関連付けられ、アサインメントのステータスを記録します。
      • priority フィールドは Priority コード値ドメインに関連付けられ、作業のアサインメントの優先度を管理します。
      • assignmentType フィールドは Assign_Type コード値ドメインに関連付けられ、プロジェクトのアサインメント タイプを保存します。
  3. ディスパッチャー
    • プロジェクト内の各ディスパッチャーの記録を含むポイント フィーチャ レイヤーです。
    • 名前や連絡先番号などのディスパッチャーに関する情報が含まれます。
    • ディスパッチャーの ArcGIS 組織ユーザー名は userId フィールドに保存されます。
    • レイヤーは、各ディスパッチャーの作成者と最終更新者を記録します。
    • OBJECTID から Assignments.dispatcherId へは、PK-FK の関係があります。 [Dispatchers] レイヤーの OBJECTID の値を Assignments.dispatcherId フィールドの値として使用することで、割り当てたすべてのアサインメントをディスパッチャーに関連付けます。
  4. 位置の追跡
    • 位置のトラッキングが有効化されている間に記録された各ポイント位置の記録を含むポイント フィーチャ レイヤーです。
    • レイヤーは、各位置履歴の作成者と最終更新者を記録します。

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

  1. Assign_Status- アサインメントのステータスに関する 6 つの有効な値を保存しています。
  2. Priority- アサインメントの優先度に関する 4 つの有効な値を保存しています。
  3. Assign_Type- プロジェクトのアサインメント タイプを保存します。 このコード値ドメインは、プロジェクトが作成されたときは空です。 プロジェクトの構成中にアサインメント タイプが追加されると、値が格納されます。
  4. Worker_Status- モバイル作業者のステータスに関する 3 つの有効な値を保存しています。

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

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

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

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

未分類

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 です。
  • 作業の一時中断および再開
    • 時間 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 プロジェクトの整合性を保護するさまざまな保護機能が含まれています。

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

REST API を通じたアサインメントの作成

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

REST API でアサインメントを作成する際は、Add features (フィーチャの追加) コマンドを使用します。 フィールドには、値の入力が必要なフィールド、アサインメントで求められる場合のみ値を入力するフィールド、値を入力してはいけないフィールドがあります。

次のフィールドには値を入力する必要があります。

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

SHAPE

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

x,y 座標の組

status

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

  • 未割り当ての作業を作成する場合は 0 (未割り当て)
  • 作成時に作業を割り当てる場合は 1 (割り当て済み)
注意:

作業を割り当てる場合は、workerId フィールドと assignedDate フィールドにも値を入力する必要があります。これについては、後の表で説明します。

assignmentType

アサインメントのタイプ (Assign_Type ドメインの値)

Assign_Type ドメインの任意の有効な値

location

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

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

assignmentRead

モバイル作業者がアサインメントを表示したかどうかを指定

アサインメントを未読の場合は 0

dispatcherId

アサインメントを作成したディスパッチャーの ID ([Dispatchers] レイヤーの dispatchers.OBJECTID)

接続元の ArcGIS 組織ユーザーのディスパッチャー ID、またはプロジェクトに関連付けられた特定のディスパッチャーの ID である可能性もあります。

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

オプション フィールド定義入力する値

description

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

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

priority

アサインメントの優先度

priority ドメインの有効な値

workOrderId

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

外部システムからの値

dueDate

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

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

注意:

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

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

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

workerId

アサインメントを割り当てているモバイル作業者の ID ([Workers] レイヤーの workers.OBJECTID)

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

assignedDate

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

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

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

REST API を通じたアサインメントの割り当て

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

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

status

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

  • 1 (割り当て済み)

workerId

アサインメントを割り当てているモバイル作業者の ID ([Workers] レイヤーの workers.OBJECTID)

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

assignedDate

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

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

dispatcherId

アサインメントを割り当てるディスパッチャーの ID (作成したディスパッチャーと異なる場合) ([Dispatchers] レイヤーの dispatchers.OBJECTID)

接続元の ArcGIS 組織ユーザーのディスパッチャー ID、またはプロジェクトに関連付けられた特定のディスパッチャーの ID である可能性もあります。