スポンサーリンク

【C#】RestAPIでSalesforceにデータをアップサート(Upsert)する方法。

C#
スポンサーリンク

今回の記事はC#でRestAPIを用いてSalesforceにデータをアップサート(Upsert)する方法に関してご紹介します。アップサートとはデータをインサートすることと、仮にデータがある場合は値を更新する操作をまとめた複合語です。簡単に解説していきます。

また、以前の記事でC#でSalesforceの認証を経てログイン、アクセストークンの取得をRestAPIで行った記事を記載しているのでそちらも併せてご確認ください。

C#でRestAPIを用いてSalesforceにデータを送信・取得する方法。

スポンサーリンク

アクセストークンなど必要情報の取得

こちらに関しては上記の記事を参考にさくっと取得して下さい。念の為コードも置いておきますが、詳しくは上記のリンク記事をご確認ください。

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;

namespace Test
{
    class Test
    {
		    // httpクライアント
		    private static HttpClient client = new HttpClient();
        //メイン関数
        public static async Task Main()
        {
            //ログイン情報作成
            //こちらはアクセストークンなどを取得するための
            //特別なURLで自身のSalesforceURLではありません。
            string loginurl = "https://login.salesforce.com/services/oauth2/token";
            //SandBoxの場合は"https://test.salesforce.com/services/oauth2/token"
			      var parameter = new Dictionary<string, string>()
				    {
					       { "grant_type", "password"},
					       { "client_id", "コンシューマー鍵" },
					       { "client_secret", "コンシューマーの秘密" },
					       { "username", "自身のSalesforceログインで使用しているメールアドレス" },
					       { "password", "自身のSalesforceログインで使用しているパスワード" + "シークレットキー" },
				    };
			      var content = new FormUrlEncodedContent(parameter);
			      HttpResponseMessage Response;
      			try
			      {
                 //Post通信
				         Response = await client.PostAsync(loginurl, content);
			      }
			      catch
			      {
				         //通信エラー時は空文字を返す
				         return;
			      }
			      var response = await Response.Content.ReadAsStreamAsync();
            Console.WriteLine(response);
        }
        
	}
}

レスポンスは下記のように返ってくると思います。

{
	"access_token": "000A000A0a0A0!QAKAJDSKLNDLAS5215153153AD21312A.LKJHSADLKJAL2465461256151111010000254",
	"instance_url": "https://app.salesforce.com",
	"id": "https://login.salesforce.com/id/00D0ED/00392HJGJH00XM000000",
	"token_type": "Bearer",
	"issued_at": "73268",
	"signature": "fkhjsakdfl/jksfdljk2/b1olCBVsdsDG+zZC76ad7889DFDJKY="
}

ではこのアクセストークンを使ってアップサート(Upsert)を実際に行ってみましょう。

C#でRestAPIを使ってSalesforceにデータをアップサート(Upsert)

using System;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
using AngleSharp;
using AngleSharp.Html.Dom;

namespace test
{
    class Program
    {
        static async Task Main(string[] args)
        {
			//SalesforceのAPI URL
			//https://<インスタンスID>.salesforce.com/services/data/<APIバージョン>/sobjects/<オブジェクト名>
			//Patch処理時はURLが変更(元+/<外部ID API>/<外部ID>)
			string url = $"インスタンスID/services/data/v51.0/sobjects/カスタムオブジェクト/外部ID";
			string parameters = "{" +
				   $" \"test\" : \"test\" ," +
				   $" \"test2\" : \"test2\" " +
				   " }";
			//パラメーターをバイト配列に変換
			byte[] data = Encoding.UTF8.GetBytes(parameters);

			//Salesforce処理実行
			string accessToken = "アクセストークン";
			string method = "PATCH";

			//WebRequestの作成
			HttpWebRequest req = WebRequest.Create(url) as HttpWebRequest;

			//アクセストークンの指定
			if (accessToken != null) req.Headers["Authorization"] = "Bearer " + accessToken;

			//メソッドの指定
			req.Method = method;

			//コンテントタイプの指定
			req.ContentType = "application/json";

			//POST送信するデータの長さを指定
			if (data != null) req.GetRequestStream().Write(data, 0, data.Length);

			//サーバーからの応答を受信するためのWebResponseを取得
			WebResponse res = null;
			try
			{
				res = await req.GetResponseAsync();
			}
			catch (WebException e)
			{
				res = e.Response;
			}

			//応答データを受信するためのStreamを取得
			using (MemoryStream mem = new MemoryStream())
			using (Stream resStream = res.GetResponseStream())
			{
				byte[] buf = new byte[4096];
				int r;
				while ((r = resStream.Read(buf, 0, buf.Length)) > 0)
				{
					mem.Write(buf, 0, r);
				}
				string str = Encoding.UTF8.GetString(mem.ToArray());
				Console.WriteLine(str);
			}
		}
    }
}

上記の外部IDで指定したレコードのみUpsert処理を実装できます。その為Salesforce側でも外部IDを設定するなどの設定は必要です。カスタム項目の設定で可能になると思います。詳しくは公式ページでも確認できるのでそちらもみて下さい。

また、上記のhttp通信でもし、「Patch権限がありません」みたいなエラーが発生した場合はカスタムオブジェクトの階層が微妙に違っていることもあります。注意して下さい。

では今回の記事は以上です。他にも多数のC#関連の記事を記載しているので是非興味があればサイト内を見ていってください。

本記事を読んでいただき感謝です。サイトを訪れていただいた方はプログラミング勉強中かと思いますのでプログラミング勉強のコツを合わせてご紹介。

スポンサーリンク
スポンサーリンク
スポンサーリンク

ブログに関しては500円程度かかりますが、それ以外は無料です。知識の吸収と並行してアウトプットは非常に効率が良いです。テックアカデミーに関しては講座レベルが高いにも関わらず、無料体験や人気口座も大幅値下げがあるので、重点的に学びたいものを無料体験してみてください。

転職時にも、エンジニアからテックアカデミー・Paizaは認知度が高いので、未経験入社採用を行う際履歴書で目に留まります。特にPaizaのスキルレベルA・SなどはIT業界でも評価されます。

テックアカデミー・Paizaの無料登録ができる期間中にぜひご利用してみてください。私も活用経験ありです。

C#
スポンサーリンク
スポンサーリンク
ともぶろぐ

コメント

  1. […] 「C#でSalesforceにRestAPIでデータをアップサート(Upsert)」 […]

タイトルとURLをコピーしました