Salesforce ADO.NET 開発者ガイド - Entity Framework Windows フォームアプリ

この記事では、Entity Framework(EF)Core を使用して Windows フォームアプリを作成するガイドを提供します。CData ADO.NET Provider for Salesforce を活用して、Salesforce インスタンスから Account(取引先)の一覧を表示し、選択した Account に関連付けられた Opportunity(商談)を表示するフォームを作成します。

注意:この記事では Salesforce データを例として使用していますが、同じ原則を CData がサポートする 270 以上のデータソースに適用できます。

前提条件

このガイドには以下の環境が必要です:

ガイド

  1. アプリケーションの作成
    1. Visual Studio を開き、新しい「Windows フォームアプリ」プロジェクトを作成します。
    2. プロジェクト名を「WinFormsAppSalesforce」に設定します。このガイドのコードをコピー&ペーストする際に名前空間が一致するようになります。その後、「次へ」を選択します。
    3. 次のページで「.NET 8.0(長期サポート)」を選択し、「作成」をクリックします。
  2. Entity Framework のインストールと必要なアセンブリへの参照を追加
    1. NuGet パッケージマネージャーを使用して、以下のパッケージをプロジェクトに追加します:
      1. Microsoft.EntityFrameworkCore
      2. Microsoft.EntityFrameworkCore.Relational
      3. Microsoft.EntityFrameworkCore.Tools
    2. インストールディレクトリの lib -> net8.0 サブフォルダにある System.Data.CData.Salesforce.dll への参照を追加します(例:「C:\Program Files\CData\CData ADO.NET Provider for Salesforce 2024\」)。
    3. インストールディレクトリの lib -> net8.0 -> EFCORE80 サブフォルダにある CData.EntityFrameworkCore.Salesforce.dll への参照を追加します。
    4. プロジェクトに含まれているライセンスファイル(.lic)を追加します。ソリューションエクスプローラーでプロジェクトを右クリックし、追加 -> 既存の項目 -> System.Data.CData.Salesforce.lic(インストールディレクトリの lib -> netstandard2.0 サブフォルダにあります)を選択します。最後に、ライセンスファイルを右クリックし、出力ディレクトリにコピープロパティを新しい場合はコピーするに設定します。
    5. プロジェクトをビルドして、EF Core を使用するためのセットアップを完了します。
  3. リバースエンジニアリング(スキャフォールディング)によるデータモデルの生成

    スキャフォールディングはパッケージマネージャーコンソール(PMC)を使用して実行します。PMC を開き、以下のコマンドを使用して Models フォルダにスキーマをスキャフォールディングします。このコマンドは、利用可能なすべてのテーブル/ビューのクラスを自動的に構築します。また、DbContext を拡張し、データソース内のテーブルを表す DbSet プロパティを公開するコンテキストクラスも作成されます:

    Scaffold-DbContext "AuthScheme=OAuth; InitiateOAuth=GETANDREFRESH; Tables=Contact;" CData.EntityFrameworkCore.Salesforce -OutputDir Models -Context SalesforceContext
      注意:
    • Tables プロパティを設定して、接続およびモデル化するテーブル数を制限しています。これにより、利用可能なすべてのテーブルとビューではなく、Salesforce 接続の Contact テーブルのみがモデル化されます。
    • CData Salesforce ADO.NET Provider は、ユーザー資格情報または OAuth 標準のいずれかを使用した Salesforce への認証をサポートしています。この例では OAuth 認証スキームを使用しています。

    CData Salesforce ADO.NET Provider の接続プロパティの詳細については、CData ドキュメントページをご覧ください:CData ADO.NET Provider for Salesforce ドキュメント

  4. フォームにコントロールを追加

    フォームデザイナーを開き、サーバーエクスプローラーの左側にある「ツールボックス」から、DataGridView と ComboBox をフォームに追加します。

  5. データバインディング

    Account 用の ComboBox:

    1. 追加した ComboBox を選択してプロパティを開きます。「DataSource」プロパティを選択し、右側のドロップダウンをクリックして、下部にある「新しいオブジェクトデータソースの追加...」を選択します。
    2. 「Account」と「Opportunity」を選択して、Account と Opportunity のオブジェクトデータソースを作成し、OK をクリックします。
    3. これで「DataSource」プロパティのドロップダウンに、作成したオブジェクトデータソースが表示されます。「その他のデータソース」を展開し、「プロジェクトデータソース」を展開して、Account を選択します。

    Opportunity 用の DataGridView:

    1. 追加した DataGridView の右上隅にある小さなボタンを選択し、「データソースの選択」ドロップダウンを開いて、「その他のデータソース」、「プロジェクトデータソース」を展開し、Opportunity を選択します。

    注意:ここにデータソースの種類が表示されない場合は、テーブルクラスとコンテキストクラスがプロジェクトに追加され、ソリューションがビルドされていることを確認してください。

  6. 表示内容の設定
    1. 追加した ComboBox を選択してプロパティを開きます。「DisplayMember」プロパティを選択し、「Name」に設定します。次に、「ValueMember」プロパティを選択し、「Id」に設定します。これらのプロパティを設定すると、各 Account の名前が表示されますが、Account が選択されると、取得される値は Account の ID になります。
    2. 追加した DataGridView の右上隅にある小さなボタンを選択し、「列の編集...」を選択します。
    3. デフォルトでは、DataGridView はテーブル内のすべてのカラムに対してカラムを作成するため、ここで不要なカラムを削除できます。Id、Name、AccountId カラム以外のすべてのカラムを削除します。
  7. すべての Account を読み込む
    1. ファイルを右クリックして「コードの表示」を選択し、フォームのコードを開きます。
    2. セッション用の DbContext を保持するプライベートフィールドを追加し、OnLoad メソッドをオーバーライドします。完成したコードは以下のようになります: using Microsoft.EntityFrameworkCore; using WinFormsAppSalesforce.Models; namespace WinFormsAppSalesforce { public partial class Form1 : Form { private SalesforceContext? dbContext; public Form1() { InitializeComponent(); } protected override void OnLoad(EventArgs e) { base.OnLoad(e); this.dbContext = new SalesforceContext(); this.dbContext.Accounts.Load(); this.accountBindingSource.DataSource = dbContext.Accounts.ToList(); } } }
        このコードは以下の処理を行います:
      • ComboBox に表示される Account を読み込むために使用する SalesforceContext のインスタンスを作成します。
      • Load 拡張メソッドを使用して、Salesforce 接続からすべての Account を DbContext に読み込みます。
      • accountBindingSource.DataSource プロパティを、DbContext によって追跡されている Account で初期化します。これは、Accounts DbSet プロパティに対して .ToList() を呼び出すことで行います。ToList() はこのデータを ComboBox 内のリストとして公開します。
  8. Opportunity の表示
    1. フォームのデザイナーで、Account 用の ComboBox を選択します。
    2. ComboBox のプロパティで、イベント(稲妻ボタン)を選択し、SelectedValueChanged イベントをダブルクリックします。これにより、Account の選択が変更されるたびに発生するイベントのスタブがフォームのコードに作成されます。
    3. SelectionValueChanged イベントのコードを入力します: private void comboBox1_SelectedValueChanged(object sender, EventArgs e) { string selectedAccountId = Convert.ToString(comboBox1.SelectedValue); this.dbContext = new SalesforceContext(); this.dbContext.Opportunities .Where(x => x.AccountId == selectedAccountId) .Load(); this.opportunityBindingSource.DataSource = dbContext.Opportunities.Local.ToBindingList(); }
        このコードは以下の処理を行います:
      • AccountId カラムのデータ型に合わせて、選択された値を文字列に変換します。
      • DataGridView に表示される Opportunity を読み込むために使用する SalesforceContext のインスタンスを作成します。
      • Load 拡張メソッドを使用して、指定された Account の Opportunity を Salesforce 接続から DbContext に読み込みます。
      • opportunityBindingSource.DataSource プロパティを、DbContext によって追跡されている Opportunity で初期化します。これは、Opportunities DbSet プロパティに対して Local.ToBindingList() を呼び出すことで行います。Local は追跡されている Opportunity のローカルビューへのアクセスを提供し、ローカルデータと表示データの同期を維持するためのイベントがフックアップされています。ToBindingList() はこのデータを IBindingList として公開し、Windows フォームのデータバインディングで認識されます。
  9. アプリケーションの実行

    すべてのセットアップが完了したら、Salesforce インスタンスから Account の一覧を表示し、選択した Account に関連付けられた Opportunity を表示するアプリケーションを実行できます。まずソリューションをビルドし、緑色の再生ボタンを使用してアプリケーションを起動します。アプリケーションが開いたら、以下のように Account をクリックして、各 Account に関連付けられた Opportunity を表示できます:

.NET アプリケーションでシームレスなデータ接続を実現

Salesforce データの可能性を最大限に引き出したいとお考えですか?CData の Salesforce ADO.NET Provider を使用すれば、.NET アプリケーションを Salesforce データとシームレスに統合できます。CData ADO.NET Provider for Salesforce のコミュニティライセンスを取得すれば、使い慣れた SQL を使用して、個人の .NET プロジェクトでデータにアクセスするためのライブラリを永久に無料で利用できます。今すぐライセンスをリクエストして、Salesforce 連携アプリの構築を始めましょう!