Office 365 での Microsoft Azure WebJobs の使用

タイマー ジョブ機能を実装するには、Microsoft Azure WebJobs または Windows タスク スケジューラを使用して、SharePoint Online 内でタスクを実行します。 タイマー ジョブは、SharePoint 内で特定のタスクを繰り返し実行する、スケジュールされたバックグラウンド プロセスです。

たとえばタイマー ジョブを使用して、SharePoint リストに入力されたデータをデータベースにコピーすることができます。 これまでタイマー ジョブはファーム ソリューションとして展開されていましたが、SharePoint Online ではファーム ソリューションを展開できません。 同様のタイマー ジョブ機能を SharePoint Online に展開するには、コンソール アプリケーションを Azure WebJob として実行する必要があります。 コンソール アプリケーションは、クライアント側オブジェクト モデル (CSOM) を使用して SharePoint Online にアクセスします。

この記事では、SharePoint Online サイトを実行してコンテンツにアクセスする目的でコンソール アプリケーションを Azure WebJobs として展開する際の基本概念について説明します。

注:

この記事で提供されるコードは、明示または黙示のいかなる種類の保証なしに現状のまま提供されるものであり、特定目的への適合性、商品性、権利侵害の不存在についての暗黙的な保証は一切ありません。

コンソール アプリケーションを Azure WebJob として作成して実行する

コンソール アプリケーションを Azure WebJobs として実行するようにセットアップするには、次の手順を実行する必要があります。

  1. SharePoint のサイトとコンテンツにアクセスするために使用する Azure WebJobs 用の組織アカウントを作成します。

  2. コンソール アプリケーションを作成してセットアップします。

  3. コードをコンソール アプリケーションに追加します。

  4. コンソール アプリケーションを Azure WebJobs として発行します。

  5. Azure WebJobs を実行して確認します。

組織アカウントを作成する

SharePoint のサイトとコンテンツにアクセスする際に使用する Azure WebJobs 用のアカウントを作成する必要があります。 詳細については、「Office 365 にユーザーを個別に、またはまとめて追加する - 管理者向けヘルプ」を参照してください。

Azure WebJob を実行すると、組織アカウントの [表示名] に入力された値が [更新者] フィールドに取り込まれて表示されます。 SharePoint アクセス用に Azure WebJob で使われるアカウントであることを、ユーザーが簡単に識別できる表示名を選んでください。

コンソール アプリケーションを作成してセットアップする

Azure WebJob として実行するコンソール アプリケーションを作成するには、次の手順を実行します。

  1. 新しいコンソール アプリケーション プロジェクトを作成します。 Visual Studio で、[新しいプロジェクト]>[Visual C#]>[コンソール アプリケーション]>[OK] の順に選択します。

  2. コンソール アプリケーションが作成されたら、[ツール]>[NuGet パッケージ マネージャー]>[ソリューションの NuGet パッケージの管理]>[オンライン]>[すべて] の順に選択します。

  3. [SharePoint 用アプリ Web ツールキット] を検索します。

  4. [インストール] を選択し、[OK] を選択します。

  5. [閉じる] を選択します。

  6. SharePointContext.cs と TokenHelper.cs が、コンソール アプリケーション プロジェクトに追加されたことを確認します。

  7. 表示された appSettings 要素を追加することで、アカウント情報を app.config ファイル内に保存します。 SPOAccountSPOPassword を、事前に作成した組織アカウントのパスワードとユーザー名に変更します。

     <?xml version="1.0" encoding="utf-8" ?>
      <configuration>
       <startup> 
         <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
       </startup>
       <appSettings>
         <add key="SPOAccount" value="admin@contoso.onmicrosoft.com"/>
         <add key="SPOPassword" value="Contoso"/>
       </appSettings>
      </configuration>
    

    注意

    App.config には、組織のアカウントのユーザー名とパスワードがクリア テキストで格納されます。 このメソッドはデモンストレーション目的でのみ使用されます。Azure WebJobs の運用環境の展開では使用できません。 We recommend encrypting the password, or authenticating using OAuth with access tokens. For more information, see Kirk Evans blog post on Building a SharePoint Add-in as a Timer Job.

Add code to the console application

Program.cs で、コンソール アプリケーションに次のコードを追加します。

  1. using ステートメントを追加します。

     using Microsoft.SharePoint.Client;
     using System.Security;
     using System.Configuration; 
    
  2. 次のメソッドをクラスに追加します。

    • Main は、SharePoint のサイトにサインインし、CSOM を使用して、サイトやコンテンツに対するタスクを実行します。 このコード サンプルでは、リストを検索したり、リストにあるアイテムの合計数をコンソール ウィンドウに出力したりするために、CSOM を使用しています。 Azure WebJobs を使用する場合、コンソール ウィンドウの出力は [WebJob の実行詳細] に表示されます。これについては、「Azure WebJobs を実行して確認する」で説明しています。

    • GetSPOSecureStringPassword は、パスワードを app.config から読み取ります。

    • GetSPOAccountName は、ユーザー名を app.config ファイルから読み取ります。

	static void Main(string[] args)
	    {
	        using (ClientContext context = new ClientContext("https://contoso.sharepoint.com"))
	        {
	            // Use default authentication mode.
	            context.AuthenticationMode = ClientAuthenticationMode.Default;                 
	            context.Credentials = new SharePointOnlineCredentials(GetSPOAccountName(), GetSPOSecureStringPassword());
	
	            // Add your CSOM code to perform tasks on your sites and content.
	
	            try
	            {
	                List objList = context.Web.Lists.GetByTitle("Docs");
	                context.Load(objList);
	                context.ExecuteQuery();
	
	                if (objList != null &amp;&amp; objList.ItemCount > 0)
	                {
	                    Console.WriteLine(objList.Title.ToString() + " has " + objList.ItemCount + " items.");
	                }
	
	            }
	            catch (Exception ex)
	            {
	                Console.WriteLine("ERROR: " + ex.Message);
	                Console.WriteLine("ERROR: " + ex.Source);
	                Console.WriteLine("ERROR: " + ex.StackTrace);
	                Console.WriteLine("ERROR: " + ex.InnerException);
	
	            }
	        }
	            
	    }
	
	private static SecureString GetSPOSecureStringPassword()
	{
	  try
	  {
	      Console.WriteLine("Entered GetSPOSecureStringPassword.");
	      var secureString = new SecureString();
	      foreach (char c in ConfigurationManager.AppSettings["SPOPassword"])
	      {
	          secureString.AppendChar(c);
	      }
	      Console.WriteLine("Constructed the secure password.");
	
	      return secureString;
	  }
	  catch
	  {
	      throw;
	  }
	}
	
	private static string GetSPOAccountName()
	{
	  try
	  {
	      Console.WriteLine("Entered GetSPOAccountName.");
	      return ConfigurationManager.AppSettings["SPOAccount"];
	  }
	  catch
	  {
	      throw;
	  }
	}
	

コンソール アプリケーションの Azure WebJobs としての発行

コンソール アプリケーションの開発が完了したら、コンソール アプリケーションを Azure WebJobs として展開する必要があります。 コンソール アプリケーションを Azure WebJobs として展開するには、次の手順を実行できます。

Run and verify your Azure WebJob

上記のすべての手順を完了したら、Azure WebJobs は稼働し、Office 365 サブスクリプションのタスクを実行することになります。 場合によっては、Azure WebJobs の保守やトラブルシューティングの実行が必要になることがあります。 Azure WebJobs が実行していることを確認するには、次のようにします。

  • Azure WebJob がリスト アイテムなどの SharePoint アイテムを更新した場合、[変更者] フィールドには、Azure WebJob が SharePoint へのアクセスに使用した組織アカウントが表示されます。

  • Azure WebJob に関する WebJob 詳細ログを確認します。 WebJob 詳細ログでは、ジョブが実行された時間、ジョブ実行の成功/失敗、WebJob からの出力 (Console.WriteLine が呼び出された場合など)、およびジョブ実行に関するその他の詳細を確認できます。 詳細については、「WebJobs を使用してバック グラウンド タスクを実行する」の「ジョブ履歴の表示」のセクションを参照してください。

関連項目