Dynamics CRM モバイルアプリケーション開発 その 4
みなさん、こんにちは。
前回に引き続き、モバイルアプリケーション開発の紹介をします。
シリーズものですので、是非初回からご覧ください。
CRM モバイル開発ヘルパーのダウンロードと参照
まず Microsoft より提供されている、Dynamics CRM モバイル
開発ヘルパーをダウンロードしてコンパイルします。
1. 以下 URL にアクセスします。
https://code.msdn.microsoft.com/Mobile-Development-Helper-3213e2e6
2. 画面中央のダウンロードリンクをクリックします。
3. 任意の場所に保存後、展開します。
4. 展開後 <展開パス>\C#\Microsoft.Crm.Sdk.Mobile.sln を開きます。
5. ソリューションをビルドします。NuGet パッケージなど必要な
ファイルが自動的にダウンロードされ、コンパイルが完了します。
6. コンパイルされた bin\Debug\Microsoft.Crm.Sdk.Mobile.dll を
開発中の CRMContact プロジェクトにコピーします。
7. 参照よりコピーしたアセンブリへの参照を追加します。
ヘルパーの利用
次に参照したヘルパーを利用するために MainPage.xaml.cs を
変更します。
1. 以下の using ステートメントを追加します。
using Microsoft.Xrm.Sdk.Samples;
using Microsoft.Xrm.Sdk.Query.Samples;
2. クラスメンバとして以下を追加します。
private OrganizationDataWebServiceProxy proxy;
3. MainPage コンストラクタに以下コードを追加します。
// proxy の初期化とサーバーアドレスの設定
proxy = new OrganizationDataWebServiceProxy();
proxy.ServiceUrl = crmServerUrl;
4. GetToken メソッドで AccessToken を確認した後 Proxy に
AccessToken を付与します。
// AccessToken の確認
var accessToken = result.AccessToken;
//Proxy に AccessToken の付与
proxy.AccessToken = accessToken;
これで Proxy を経由して Web サービスを呼べるようになりました。
MainPage にコントロール配置
現時点で MainPage.xaml にはコントロールがなにも配置されて
いませんので、以下の XAML を最上位の grid に追加します。また
今回はコードに専念するため見た目は Margin 以外設定しません。
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1*" />
<ColumnDefinition Width="1*" />
</Grid.ColumnDefinitions>
<!-- 検索グリッド -->
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<!-- 検索ボックス -->
<Grid Margin="24,60">
<StackPanel>
<TextBox x:Name="txtSearchCriteria" />
<Button x:Name="btnSearch" Content="検索" Click="btnSearch_Click" />
</StackPanel>
</Grid>
<!-- 結果リスト -->
<Grid Grid.Row="1" Margin="24,0">
<ListView x:Name="lvContacts"
IsItemClickEnabled="True">
<ListView.ItemTemplate>
<DataTemplate>
<Grid>
<StackPanel>
<TextBlock Text="{Binding FullName}" />
<TextBlock Text="{Binding EMailAddress1}" />
</StackPanel>
</Grid>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</Grid>
</Grid>
画面は以下のようになります。ListView はデータがないので現時点
ではなにも表示されていません。
Contact クラスの追加
今回は事前バインドは利用しませんが、データバインディングを
利用するため Contact クラスを定義します。別コードに追加するか
MainPage.xaml.cs に新しいクラスとして追加してください。
/// <summary>
/// 担当者用のクラス
/// </summary>
public class Contact
{
// 姓名
public string FullName { get; set; }
// 電子メールアドレス
public string EMailAddress1 { get; set; }
}
検索ロジックの追加
最後に検索ロジックを追加しましょう。
以下のメソッドを MainPage.xaml.cs に追加します。
/// <summary>
/// ユーザーが検索ボタンをクリックした際に呼び出されます。
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private async void btnSearch_Click(object sender, RoutedEventArgs e)
{
// 検索文字列を取得
string searchCriteria = (String.IsNullOrEmpty(txtSearchCriteria.Text)) ? "" : txtSearchCriteria.Text;
// FetchXML で検索を実行
string fetch = String.Format(@"<fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='false'>
<entity name='contact'>
<attribute name='fullname' />
<attribute name=’emailaddress1’ />
<order attribute='fullname' descending='false' />
<filter type='and'>
<condition attribute='fullname' operator='like' value='%{0}%' />
</filter>
</entity>
</fetch>", searchCriteria);
// RetrieveMultiple の実行
var results = await proxy.RetrieveMultiple(new FetchExpression(fetch));
// リストビュー用のリストを作成
List<Contact> contacts = new List<Contact>();
// 検索結果からリスト作成
foreach(var result in results.Entities)
{
Contact contact = new Contact()
{
FullName = result["fullname"].ToString(),
EMailAddress1 = result["emailaddress1"].ToString()
};
contacts.Add(contact);
}
// リストをリストビューに設定
lvContacts.ItemsSource = contacts;
}
動作の確認
最後に動作の確認をします。
1. コンパイルを行いエラーがないことを確認後、F5 キーを押下して
プログラムを実行します。
2. 検索を文字列を入力して「検索」ボタンをクリックします。又は
検索文字列をなにも入れずに検索を実行するとすべてのレコードを
検索できます。
3. 以下のように検索結果が表示されます。
まとめ
今回は CRM モバイル開発ヘルパーの簡単な利用方法と、簡単な
コードの紹介をしました。既に Dynamics CRM 開発を経験して
いる開発者の方には、簡単に開発できる予感が伝わると幸いです。
次回はリストに読み込んだ取引先担当者を選択したのち、右側に
詳細と関連する活動の表示、また他アプリケーションとの連携
部分を実装してみます。
- 中村 憲一郎