顧客にたいする営業活動を記録するための活動(仕事、レター、電話など)はいったんクローズすると、Dynamicsの画面からは再度オープン状態にもどせません。クローズされた活動を再 オープンにする方法を記載します。活動の一つ 仕事 エンティティを再オープンする方法を ワークフロー、PowerShell、 C#のカスタムプログラムの 3種類の方法を記載します。

PowerShell と カスタムプログラムを使用する方法は、 Dynamics CRM SDK が必要になります。

1. PowerShell を使用する方法

仕事を再オープンするPowerShell スクリプトのサンプル(TaskReOpen.ps1) は次のとおりです。スクリプト内で使用している GetCrmService.ps1 というスクリプトは、[Dynamics CRM] PowerShell で Dymamics CRM で紹介しているスクリプトです。スクリプトは、OnPremise (AD認証) で、組織 org1, スクリプトを実行するローカルのDynamics CRM サーバに接続する環境するようにしています。

# TaskReOpen.ps1
# クローズした仕事を再オープンする
$service = ./GetCrmService.ps1 "org1" "http://localhost"
$request = New-Object Microsoft.Crm.SdkTypeProxy.SetStateTaskRequest
$request.EntityId = [guid] "40F007EE-A01F-DF11-977B-0003FFBF2D57"
$service.Execute($request)
$request.TaskStatus = 3
$request.TaskState = "Open"

2. カスタムプログラムを使用する

PowerShell で行ったことをC#プログラムで行う場合の抜粋を掲載します。GetCrmService は CrmService を作成するヘルパメソッドです。

static void Main(string[] args)
{
    // CrmService を作成.
    CrmService service = GetCrmService();

    // 仕事のステータスを変更する
    SetStateTaskRequest request = new SetStateTaskRequest();
    request.TaskStatus = 3; // InProgress
    request.TaskState = TaskState.Open; // オープンにする
    // オープンにする仕事のID
    request.EntityId = new Guid("608122B1-A01F-DF11-977B-0003FFBF2D57");

    service.Execute(request);
}

3. ワークフローを使用する

クローズ状態の仕事をオープン状態にするワークフローを作成してみます。

3.1 ワークフローを作成する

設定メニューからワークフロー一覧を表示します。一覧のメニューから新規作成を選択します。表示されたポップアップ画面で、ワークフロー名を "完了した仕事をオープンに戻す" にし、エンティティに "仕事" を選択して、新規作成します。

次の画面で、下図のようにスコープを組織全体、 実行可能なワークフローにオンデマンドにチェックします。次に、ステップの追加→条件の確認を選択します。

上家の指定画面が表示されるので、 仕事の状態が 完了または、取り消し に等しいという条件を作成して 画面を閉じます。

ワークフローのこの行を選択肢、[ステップの追加]をクリックします。を選択します。

ステップの追加メニュー→状態の変更 を選択します。

次のレコード ステータスに変更で 仕事、処理中を選択します。

ワークフローが完了しました。保存して公開します。

3.2 ワークフローを実行する

作成したワークフローを実行してみます。クローズした仕事のエンティティフォームを表示します。メニューのワークフローの実行を選択します。

作成したワークフロー "完了した仕事をオープンに戻す" を選択して OK ボタンをクリックします。

確認画面が表示されます。OKボタンをクリックします。

エンティティフォームを閉じて、数秒後画面を再びフォームを開くと状態がオープンになり、仕事レコードが編集できるようになります。

4. まとめ

3とおりの方法で活動を再オープンする方法を紹介しました。 オンデマンドでやりたい場合やバッチで行いたい場合など、用途に合わせて実装方法を使い分ければよいと思います。