Dynamics CRM モバイルアプリケーション開発 その 6

みなさん、こんにちは。

前回に引き続き、モバイルアプリケーション開発の紹介をします。
シリーズものですので、是非初回からご覧ください。

今回は新規にタスクを作成し、その後完了させる部分を紹介します。
※これまで同様、コードで動きを確認する目的のため、プログラム
パターンや UI についての考慮は一切していない点ご了承ください。

ボタンとクリックイベントの追加

MainPage.xaml に以下の XAML を追加して、ボタンを追加します

<Page.BottomAppBar>
    <CommandBar>
        <AppBarButton Icon="Add" Label="タスクの追加" Click="AddTask"/>
    </CommandBar>
</Page.BottomAppBar>

また MainPage.xaml.cs ファイルに以下のメソッドを追加します。

private async void AddTask(object sender, RoutedEventArgs e)
{
}

タスク作成ロジックの追加

タスクの作成は REST エンドポイント、SOAP エンドポイントの
いずれでも可能ですが、今回は SOAP エンドポイント経由での
作成を試します。AddTask メソッドに以下コードを追加します。

// 現在のユーザーを確認
WhoAmIResponse response = (WhoAmIResponse)await proxy.Execute(new WhoAmIRequest());
// 新しいタスクの作成
Entity task = new Entity("task");
task["subject"] = "テストタスク";
// 現在コンタクトカードに設定されている取引先担当者を関連として設定
task["regardingobjectid"] = new EntityReference("contact", (spContactCard.DataContext as Contact).Id);
// 所有者を現在のユーザーに設定
task["ownerid"] = new EntityReference("systemuser", response.UserId);
// タスクの作成
Guid taskId = await proxy.Create(task);

タスク完了ロジックの追加

作成したタスクを完了させるためには、SOAP エンドポイントが
必須です。以下のコードを上記に続けて追加します。

// タスク完了リクエストの作成
SetStateRequest setStateRequest = new SetStateRequest()
{
    EntityMoniker = new EntityReference("task", taskId),
    State = new OptionSetValue(1),
    Status = new OptionSetValue(5)
};

// 実行
await proxy.Execute(setStateRequest);

MessageDialog dialog = new MessageDialog("タスクの作成し完了しました!");
await dialog.ShowAsync();

動作確認

では早速動作確認してみます。

1. F5 キーを押下してプログラムを実行します。

2. 任意の取引先担当者を検索して、選択します。
image

3. 画面で右クリックするか、画面したからスワイプしてメニューボタンを
出します。タスクの追加ボタンをクリックします。
image

4. メッセージが出るまで待ちます。
image

5. 検索結果より同じレコードを選択して、完了したタスクが追加されたか
確認します。
image

まとめ

SOAP エンドポイントを利用しないといけない処理をする場合、ヘルパー
コードを使うと簡単に行えることが段々伝わってきたでしょうか。
次回は事前バインド開発について紹介します。

- 中村 憲一郎