Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
みなさん、こんにちは。
前回に引き続き、モバイルアプリケーション開発の紹介をします。
シリーズものですので、是非初回からご覧ください。
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 開発を経験して
いる開発者の方には、簡単に開発できる予感が伝わると幸いです。
次回はリストに読み込んだ取引先担当者を選択したのち、右側に
詳細と関連する活動の表示、また他アプリケーションとの連携
部分を実装してみます。
- 中村 憲一郎