Mettre à niveau SharePoint 2013 vers SharePoint 2016 à l’aide du Gestionnaire de workflow

Numéro de la ko d’origine :   4073758

Synthèse

Lorsque vous mettrez à niveau Microsoft SharePoint 2013 vers Microsoft SharePoint 2016, vous n’avez pas besoin de créer une nouvelle installation de Workflow Manager. Vous pouvez utiliser la même installation que celle utilisée par la batterie de serveurs SharePoint 2013 dans la nouvelle batterie de serveurs SharePoint 2016.

Toutefois, vous de devez peut-être créer une nouvelle installation de Workflow Manager dans certaines circonstances. Par exemple, si vous souhaitez déplacer Workflow Manager vers un autre système d’exploitation Windows, ou si le serveur de base de données principal est désaffecté. Dans ces situations, suivez les étapes de la récupération d’urgence du Gestionnaire de workflow pour créer l’installation du Gestionnaire de workflow à l’aide des anciennes bases de données. Veillez à utiliser la copie la plus récente des bases de données workflow Manager.

Contexte

Lorsque vous utilisez SharePoint Server avec Workflow Manager, workflow manager conserve un enregistrement des sites SharePoint qui ont des flux de travail publiés. Chaque site est représenté dans Workflow Manager en tant qu’étendue. Workflow Manager stocke également les définitions de flux de travail, toutes les instances de flux de travail et leurs états.

SharePoint stocke l’historique des flux de travail et les informations sur les tâches de flux de travail pour les flux de travail SharePoint. Lorsque la page d’état du flux de travail est chargée, SharePoint appelle d’abord workflow Manager pour voir si le flux de travail existe. Pour ce faire, il utilise l’ID d’instance de flux de travail. Ensuite, SharePoint charge le reste des informations de flux de travail. Si l’ID d’instance de flux de travail est manquant dans workflow Manager, ou si une erreur se produit lors de la communication avec Workflow Manager, vous recevez un message d’erreur.

Mettre à niveau SharePoint 2013 vers SharePoint 2016 à l’aide du Gestionnaire de workflow

Configuration requise

  • Installez la dernière mise à jour cumulative pour Workflow Manager à l’aide du Programme d’installation de plateforme Web (PI Web).
  • Installez la dernière version de Workflow Manager Client sur les serveurs SharePoint 2013 et assurez-vous que tous les flux de travail sont fonctionnels.
  • Installez la batterie de serveurs SharePoint 2016 et mettre à niveau toutes les applications de service et bases de données de contenu.
  • Sur tous les serveurs de la batterie de serveurs SharePoint 2016, installez la dernière version du client Workflow Manager à l’aide de Web PI.

Inscrire Workflow Manager avec SharePoint 2016

Pour cela, procédez comme suit :

  1. Dans la batterie de serveurs SharePoint 2013, go to Central Admin > Application Management Manage Service > Application, and then delete Workflow Service Application Proxy.

  2. Dans la batterie de serveurs SharePoint 2016, exécutez l’cmdlet PowerShell suivante pour jumeler SharePoint 2016 avec la même installation de Workflow Manager :

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

Notes

N’ignorez pas que les bases de données de contenu qui ont été mises à niveau dans la nouvelle batterie de serveurs SharePoint 2016 doivent avoir été restaurées à partir de la sauvegarde la plus récente. Cela permet d’éviter les différences et les lacunes entre Workflow Manager et les bases de données de contenu.

Problèmes courants que vous pouvez connaître après la mise à niveau

Problème 1 : l’URL du site est modifiée

Si l’URL de votre site est modifiée dans SharePoint 2016, mais que l’ID de site reste le même, vous devez republier un flux de travail à partir du site affecté à l’aide de SharePoint Designer.

Problème 2 : les flux de travail ne démarrent pas sur certains sites

Si les flux de travail ne démarrent pas sur certains sites, republier les flux de travail à partir du site concerné. Sinon, exécutez le travail du timer de flux De jeton de sécurité approuvé Actualiser.

Problème 3 : les flux de travail échouent et retournent l’erreur « Impossible d’obtenir les informations d’autorisation du principal de l’application »

Symptômes

Prenons l’exemple du scénario suivant :

  • Vous avez des flux de travail SharePoint 2013 et workflow Manager configurés dans votre batterie de serveurs.
  • Vous avez récemment connecté des sites de la batterie de serveurs à une instance existante de Workflow Manager.

Dans ce scénario, les flux de travail créés après la connexion à l’installation du Gestionnaire de workflow se terminent correctement. Toutefois, les flux de travail créés avant de vous connecter au Gestionnaire de workflow ne se terminent pas. Au lieu de cela, ils sont bloqués lorsqu’ils essaient de terminer ou qu’ils restent dans un état suspendu. Pour les flux de travail qui restent suspendus, vous recevez une erreur HTTP 500. En outre, l’entrée suivante est consignée dans le journal ULS :

Impossible d’obtenir les informations d’autorisation du principal d’application.

Cause

Workflow Manager a déjà une étendue pour le site sur lequel les flux de travail sont en cours d’exécution. Étant donné que l’étendue a une valeur incorrecte dans le champ de l’étendue, il n’existe aucune classe sur l’objet SPWeb qui correspond à la valeur SPAuthenticationRealm ApplicationID de SPAppPrincipal ApplicationID l’étendue. Par conséquent, les flux de travail échouent et renvoient un message d’erreur.

Solution

Pour résoudre ce problème, utilisez les commandes PowerShell suivantes pour inscrire le nouvel SPAppPrincipal objet. Vous le faites sur l’objet dont l’ID correspond à la valeur stockée dans SPWeb ApplicationID l’étendue de l’objet SPWeb dans workflow Manager.

#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
$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

Plus d’informations

Pour obtenir la valeur stockée dans SPAuthenticationRealm ApplicationID l’étendue, suivez les étapes suivantes :

  1. Exécutez la requête SQL suivante :

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

    Notes

    <WebID> est l’espace réservé pour l’ID de SPWeb l’objet.

  2. Dans le résultat de la requête, cliquez sur la valeur de la colonne pour ouvrir le XML sous un onglet distinct dans SecuritySettings SQL Server Management Studio.

  3. Dans le fichier XML, recherchez ApplicationID l’élément qui contient la valeur. Par exemple, recherchez l’élément suivant :

    <ApplicationId>SPWeb_object_ID@SPAuthenticationRealm</ApplicationId>

    Notes

    Le GUID qui apparaît avant le signe at (@) est l’ID de l’objet, et le GUID qui apparaît après le signe at SPWeb est la SPAuthenticationRealm valeur.

Vous pouvez également trouver la valeur dans le journal ULS, par exemple dans SPAuthenticationRealm l’exemple d’entrée de journal suivant :

Date/Heure w3wp.exe (SPWFE01:0x51FC) 0x1298'autorisation d’authentification SharePoint Foundation an3eg Medium Ne peut pas obtenir les informations d’autorisation de principal d’application. AppId=i:0i.t|ms.sp.ext|<SPWeb object ID>@<SPAuthenticationRealm>

Date/Time w3wp.exe (SPWFE01:0x51FC) 0x1298 SharePoint Foundation General 8nca Medium Application error when access /site/teamsite/teamweb/_vti_bin/client.svc, Error=Object reference not set to an instance of an object. chez Microsoft.SharePoint.SPAppRequestContext.EnsureTenantPermissions(SPServiceContext serviceContext, Boolean 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) at System.Web.HttpApplication.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)