Share via


ワークフロー マネージャーを使用して SharePoint 2013 を SharePoint 2016 にアップグレードする

適用対象:yes-img-13 2013yes-img-162016 no-img-192019 no-img-seSubscription Edition no-img-sopSharePoint in Microsoft 365

概要

Microsoft SharePoint 2013 を Microsoft SharePoint 2016 にアップグレードする場合、新しいワークフロー マネージャーインストールを作成する必要はありません。 新しい SharePoint 2016 ファームの SharePoint 2013 ファームで使用されたのと同じインストールを使用できます。 ただし、特定の状況でワークフロー マネージャーの新しいインストールを作成する必要がある場合があります。 たとえば、ワークフロー マネージャーを別の Windows オペレーティング システムに移動する場合や、バックエンド データベース サーバーが使用停止になっている場合などです。 このような場合は、「ディザスター リカバリーのワークフロー マネージャー」の手順に従って、古いデータベースを使用して新しいワークフロー マネージャーインストールを作成します。 ワークフロー マネージャー データベースの最新のコピーを使用していることを確認します。

背景

SharePoint Server をワークフロー マネージャーと共に使用する場合、ワークフロー マネージャーは、ワークフローを発行した SharePoint サイトの記録を保持します。 各サイトは、スコープとしてワークフロー マネージャーで表されます。 ワークフロー マネージャーには、ワークフロー定義、すべてのワークフロー インスタンス、およびそれらの状態も格納されます。

SharePoint には、SharePoint ワークフローのワークフロー履歴とワークフロー タスク情報が格納されます。 ワークフローの状態ページが読み込まれると、SharePoint は最初にワークフロー マネージャーを呼び出してワークフローが存在するかどうかを確認します。 これを行うには、ワークフロー インスタンス ID を使用します。 その後、SharePoint はワークフロー情報の残りの部分を読み込みます。 ワークフロー インスタンス ID がワークフロー マネージャーに存在しない場合、またはワークフロー マネージャーとの通信中にエラーが発生した場合は、エラー メッセージが表示されます。

ワークフロー マネージャーを使用して SharePoint 2013 を SharePoint 2016 にアップグレードする方法

前提条件

このアップグレードをインストールするには、次の前提条件を実行する必要があります。

  • Web プラットフォーム インストーラー (Web PI) を使用して、ワークフロー マネージャーの最新の累積的な更新プログラムをインストールします。

  • 最新バージョンの ワークフロー マネージャー Client を SharePoint 2013 サーバーにインストールし、すべてのワークフローが機能していることを確認します。

  • SharePoint Server 2016 ファームをインストールし、すべてのサービス アプリケーションとコンテンツ データベースをアップグレードします。

  • すべての SharePoint Server 2016 ファーム サーバーで、Web PI を使用して最新バージョンの ワークフロー マネージャー Client をインストールします。

SharePoint Server 2016 にワークフロー マネージャーを登録する

SharePoint Server 2016 にワークフロー マネージャーを登録するには、次の手順に従います。

  1. SharePoint 2013 ファームのサーバーの全体管理 Web サイトで、[ アプリケーションの管理 ] をクリックし、[ サービス アプリケーションの管理] をクリックし、[ ワークフロー サービス アプリリード プロキシ] を削除します。

  2. SharePoint Server 2016 ファームで、次の Microsoft PowerShell コマンドレットを実行して、SharePoint 2016 と同じワークフロー マネージャー インストールをペアリングします。

   Register-SPWorkflowService -SPSite <SharePoint site URL> -
   WorkflowHostUri <Workflow service endpoint URL> -force

アップグレード後に発生する可能性がある一般的な問題

問題 1: サイト URL が変更されました

SharePoint 2016 でサイト URL が変更されてもサイト ID が変わらない場合は、SharePoint Designerを使用して、影響を受けるサイトからワークフローを再発行する必要があります。

問題 2: 一部のサイトでワークフローが開始されない

一部のサイトでワークフローが開始されない場合は、影響を受けるサイトからワークフローを再発行します。 または、 信頼されたセキュリティ トークン サービスメタデータフィード タイマージョブを実行します。

問題 3: ワークフローが失敗し、"アプリ プリンシパルのアクセス許可情報を取得できません" エラーが返される

次のような状況で問題が発生します。

  • SharePoint 2013 ワークフローがあり、ファームで構成ワークフロー マネージャー。

  • ファーム内のサイトを、以前に既存の ワークフロー マネージャー インスタンスに接続しました。

このシナリオでは、ワークフロー マネージャーインストールに接続した後に作成されたワークフローが正常に完了します。 ただし、ワークフロー マネージャーに接続する前に作成されたワークフローは完了しません。 代わりに、完了しようとするとスタックするか、中断状態のままです。 中断されたままのワークフローの場合、HTTP 500 エラーが発生します。 さらに、ULS ログに次のエントリが記録されます。 アプリ プリンシパルのアクセス許可情報を取得できません。

原因

ワークフロー マネージャーには、ワークフローが実行されているサイトのスコープが既に用意されています。 スコープの ApplicationID フィールドに無効な SPAuthenticationRealm 値があるため、スコープの ApplicationID 値に一致する SPWeb オブジェクトに SPAppPrincipal クラスは存在しません。 そのため、ワークフローは失敗し、エラー メッセージが返されます。

解決方法

この問題を解決するには、次の PowerShell コマンドを使用して、新しい SPAppPrincipal オブジェクトを登録します。 これは、ワークフロー マネージャー の SPWeb オブジェクトのスコープに格納されている ApplicationID 値と一致する ID を持つ SPWeb オブジェクトで行います。

   #Variables
   $webUrl = "http://sp.contoso.com/sites/teamsite/teamweb"
   $oldAuthRealm = "58a2b173-0f88-4bff-935b-bf3778cd0524" #authentication realm expected by Workflow Manager
   $newAuthRealm = "48834d17-d729-471e-b0d0-a0ec83b49de0" #authentication realm of current farm
   #Get the SPWeb and SPSite objects, and the id of the web
   $web = Get-SPWeb $webUrl
   $site = $web.site
   $clientId = $web.Id
   #Create the old and new app principal ids
   $oldAppId = "$clientId@$oldAuthRealm"
   $newAppId = "$clientId@$newAuthRealm"
   #Register the app principal with the old authentication realm
   Register-SPAppPrincipal -DisplayName "Old Workflow" -Site $web -NameIdentifier $oldAppId
   #Set permissions for the app principal
   #If app-only permissions are used in old environment, you must use the -EnableAppOnlyPolicy parameter to pass to the cmdlet for app steps to succeed
   $oldAppPrincipal = Get-SPAppPrincipal -Site $web -NameIdentifier $oldAppId
   Set-SPAppPrincipalPermission -Site $web -AppPrincipal $oldAppPrincipal -Scope SiteCollection -Right FullControl
   Set-SPAppPrincipalPermission -Site $web -AppPrincipal $oldAppPrincipal -Scope Site -Right FullControl
   #List the app principals with the old and new authentication realms in the ids
   Get-SPAppPrincipal -Site $web -NameIdentifier $oldAppId | fl
   Get-SPAppPrincipal -Site $web -NameIdentifier $newAppId | fl

注: アプリ プリンシパルに SharePoint 2013 サイトに対する App-Only アクセス許可がある場合は、-EnableAppOnlyPolicy を Set-SPAppPrincipalPermission コマンドレットにも渡す必要があります。

詳細

スコープに格納されている ApplicationID の SPAuthenticationRealm 値を取得するには、次の手順に従います。

  1. 次の SQL クエリを実行します。

    SELECT *
    FROM [WFResourceManagementDB].[dbo].[Scopes] WITH (NOLOCK)
    WHERE Description like '%<WebID>%'
    
    

    ここで <、WebID> は SPWeb オブジェクトの ID のプレースホルダーです。

  2. クエリ結果で、SecuritySettings 列の値をクリックして、SQL Server Management Studioの別のタブで XML を開きます。

  3. XML ファイルで、値を含む ApplicationID 要素を配置します。 たとえば、次の要素を見つけます。

    <ApplicationId>SPWeb_object_ID@SPAuthenticationRealm</ApplicationId>`
    

    注:

    アット マーク (@) の前に表示される GUID は SPWeb オブジェクトの ID であり、アット マークの後に表示される GUID は SPAuthenticationRealm 値です。

または、次のログ エントリの例のように、ULS ログに SPAuthenticationRealm 値を見つけることができます。

2017/11/03 12:13:16.72 w3wp.exe (SPWFE01:0x51FC) 0x1298 SharePoint Foundation Authentication Authorization an3eg Medium アプリ プリンシパルのアクセス許可情報を取得できません。 AppId=i:0i.t|ms.sp.ext|<SPWeb オブジェクト ID>@<SPAuthenticationRealm>

2017 年 11 月 3 日 12:13:16.72 w3wp.exe (SPWFE01:0x51FC) は、/site/teamsite/teamweb/_vti_bin/client.svc にアクセスするときに SharePoint Foundation General 8nca Medium Application エラーを0x1298します。Error=Object 参照はオブジェクトのインスタンスに設定されていません。 at Microsoft.SharePoint.SPAppRequestContext.EnsureTenantPermissions(SPServiceContext serviceContext, ブール型 throwIfAppNotExits, Boolean allowFullReset) at Microsoft.SharePoint.SPAppRequestContext.InitCurrent(HttpContext context) at Microsoft.SharePoint.ApplicationRuntime.SPRequestModule.InitCurrentAppPrincipalToken(HttpContext context) at Microsoft.SharePoint.ApplicationRuntime.SPRequestModule.PostAuthenticateRequestHandler(Object oSender, EventArgs ea) atSystem.Web.HttpApplication.ExecuteStep(IExecutionStep ステップ, Boolean& completedSynchronously) の System.Web.HttpApplication.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()