French SharePoint GBS Blog

  • How to delete a problematic External User account from a SharePoint Online site Users List?

    As this issue keeps showing up again and again in support requests, I thought it is worth mentioning here.

    The problem is that the External User account gets, somehow, associated with a different UPN in the Users List of SharePoint Online or gets corrupted somehow. Either way the first thing to do is to find it and get rid of it so that we can recreate a health account in the Users List.

    I had like to mention that I have seen cases where the Administrator has executed the command Get-SPOExternalUser in the Power Shell Administration console but the External User account was not found using this method.

    The solution in this case was to look for the External User account in the Users List page:

    <URL>/_layouts/15/people.aspx?MembershipGroupId=0

    If the account appears listed in there, just delete it and then re-invite the user. This time around it should work.

    I hope this works for you, when facing a similar problem.

    Helio De Andrade

  • Site Administrator is unable to change the Regional Settings of site collection

    The site Administrator is unable to change the regional settings for a site collection. Whenever he tries to do so a message appears that says something similar to the following:

    "The column "Workflow History Parent Instance" in the list or library "CreateDateExpiredTasks History" has been marked for indexing. Please turn off all indexed columns before changing the collation of this site. You may re-index those columns after the collation of the site has been changed."

    Or

    "The column "Invitation" in the list or library "correlation ID number" has been marked for indexing. Please turn off all indexed columns before changing the collation of this site. You may re-index those columns after the collation of the site has been changed."

    Or 

    "The site regional settings cannot be changed because one or more columns has been marked for indexing".

     You could try to get rid of the afore mentioned column manually but that could take hours on a medium to large site.

     The best way I have found so far to be able to change the Regional Settings under this condition is to make sure the "Sort Order" option is set to "General", as in this screen-shot:


    I hope this help.

     

    Thanks to Dominique VIVES for having reviewed my post.

    Helio De Andrade

     

  • How to activate Yammer enterprise in your Office 365 Tenant ?

    1. When should you activate Yammer?

    • If you use Yammer Basic, the free version of Yammer, you don't need to activate Yammer.
    • You need to activate Yammer if you paid for Yammer Enterprise which is available online with the following plans :
      • Yammer Enterprise Standalone
      • Office 365 Enterprise Plans
      • Office 365 Midsize Business
      • SharePoint Online + Yammer Enterprise Plans
      • Office 365 Education Plans

       

    For more details: https://about.yammer.com/success/activate/activation-guide/why-yammer/

     

    2. Where do you activate Yammer?

    As part of Yammer Enterprise, you receive access to your own Office 365 Admin Portal with a Global Admin account. Use this portal to configure your account and activate your Yammer Enterprise network.

     

    3. What are Yammer activation prerequisites?

    Yammer requires a company domain, such as contoso.com to activate the network. This means the default domain (contoso.onmicrosoft.com) you created with your Office 365 account can't be used to activate Yammer Enterprise. So, if you don't have a company domain, you can purchase one from a domain name registrar (for example GoDaddy.com, Gandi.net, etc.), or on the Domains page in O365 Admin portal.

     

    If your enterprise domain is already created, you'll need to have access to your DNS hosting provider or domain registrar to confirm ownership of this domain.

     

    For more details: Add a Company Domain

     

    4. How to activate Yammer?

    1. Create your enterprise domain (for this lab, I created imenbacha.com domain).

       

    2. Log into your Office 365 Admin Center and go to Domains > Add a domain.

       

    3. Add your domain

       

    4. Confirm that you own the specified domain

       

    5. You are redirected to the site where you created your domain to confirm the ownership of this domain. You'll need to have access to your DNS hosting provider or domain registrar.

       

       

    6. Once the ownership confirmed, you can add users immediately or later.

    By default, Office 365 uses the user authentication service of Azure Active Directory to provide authentication to Office 365 services (such as Exchange Online, Lync Online, SharePoint Online, and so on). This means Office 365 uses the identity that is synchronized with Azure AD to provide authentication. This flexible model allows you to use one of the following three methods to manage your accounts:

    • First method: Manage user accounts in Office 365
    • Second method: Synchronize on-premises directory objects with Office 365
    • Third method: Use Active Directory Federation Services (AD FS) to manage users

    Source : Plan for managing Office 365 user accounts using Azure Active Directory

     

     

    7. Define how you'll use your domain by selecting Yammer or a combination with other Office 365 services like Exchange Online or Lync Online.

    8. Set up DNS records for your enterprise domain at your DNS hosting provider

    9. If this domain is your organization's primary domain, change your default Office 365 domain from onmicrosoft.com to the company domain you just added. Go to Admin > Office 365, click your organization name in the upper-right corner, and then choose Default domain.

    10. If you choose to manage user accounts in Office 365, you should create a new user in this newly configured domain (for example johndoe@imenbacha.com) and assign it "Global admin". He will automatically be Yammer administrator.

    Note :

    Assign Global Admins :

    Office 365 Global Admin accounts assigned to *.onmicrosoft.com or with generic usernames will not be synchronized with Yammer.

    Generic usernames include: admin, noreply, help, support, workfeed, feedback, yammer, api, abuse, postmaster, hostmaster, root, new, create, index, show, destroy, delete, and update.

     

    Source : https://about.yammer.com/success/activate/activation-guide/why-yammer/

      

    Create a new user in the new domain:

     

    11. Assign "Global Admin" role to this user. He will automatically be Yammer Admin. To do this Click on the user > Settings

     

    12. Now you are ready to activate Yammer in O365 Admin center!

    To do this: Office 365 Admin Site > Dashboard > Included Services > Yes, activate Yammer Enterprise for my network

    You can now see Yammer Admin Link:

     

     

    13. Click on this Yammer Admin Link, you will be redirected to https://www.yammer.com/yourDomain/admin

    Note: Your account is Global Admin in O365 Admin center, so it will automatically be Yammer Admin. However you should explicitly create your Yammer profile.

     

     

    14. Click on: Don't have an account? Sign Up

    15. When you signup, you will receive an email in order to complete registration. Click on "Complete Signup":

    16. Complete the creation of your Yammer profile

         

    17. And you're done!

     

    18. You are in "Global Admin" role in Office 365 admin site, so you are automatically a Yammer Administrator.

    To access Yammer's administration menu, click on "Network Admin"

    19. Now you can use your enterprise social network.

    Thanks to Hélène Lemontvert & Dominique VIVES for having reviewed my post.

    Imen Bacha

     

    Version : Microsoft Office 365 Plan E3

    Date : 25/09/2014

  • How To Upgrade PowerPivot for SharePoint

     

    As we all know we have multiple flavors of PowerPivot for SharePoint and sometimes it's a bit strange how you install updates for PowerPivot.

    Let us start with the beginning J We have SharePoint 2010 that can use PowerPivot from SQL 2008 R2 or PowerPivot from SQL 2012 SP1/SQL 2014 and on the other hand we have SharePoint 2013 that can use only PowerPivot from SQL 2012 SP1/SQL 2014. I'm grouping SQL 2012 SP1 and SQL 2014 because from the update perspective they are behaving identical.

     

    Situation 1: SharePoint 2010 with PowerPivot from SQL 2008R2

     

    You are installing an update for SQL 2008 R2 like SP2 due to the fact that you need to have your environment supported (SQL 2008 R2 is out of main support starting with 08/07/2014 and the least supported version is SQL 2008 R2 SP2). You can download SP2 and the latest Cumulative Update for it (CU 13) from Update Center for Microsoft SQL Server

    In order to upgrade the PowerPivot service application and its components all you have to do is to install the updates and check the Health Analyzer that it picked up the correct version. As explained in the following article Upgrade (PowerPivot for SharePoint), here are the steps to do it:

    1. Install the patch using the instructions that are provided with the QFE.
    2. In Central Administration, in Monitoring, click Review rule definitions.
    3. In the Configuration category, find an then click the following rule:

    PowerPivot: The deployed farm solution is not up-to-date

    1. In the Health Analyzer Rule Definitions box for this rule, click Run Now.
    2. Reset IIS to ensure the older version is no longer available. To do this, open an Administrator command prompt and type IISRESET.

     

    Situation 2: SharePoint 2010 with PowerPivot from SQL 2012 SP1/ SQL 2014

     

    Now we start to have some fun! While for SQL 2008 R2 all you had to do was to install the hotfix (QFE) with PowerPivot 2012 SP1 the situation has changed and be careful you should install the x64 hotfix as SharePoint and PowerPivot for SharePoint are only on x64.

    Please check the articles describing procedure:

    Upgrade PowerPivot for SharePoint (SQL 2012 SP1)

    Upgrade PowerPivot for SharePoint (SQL 2014)

    • Once you have installed the hotfix/CU you will need to run the PowerPivot Configuration Tool as now it's like applying a hotfix for SharePoint (install windows binaries and then run the SharePoint configuration wizard)

     

    • The first thing you will notice is the 3rd option in the PowerPivot Configuration Tool (Upgrade Features, Services, Applications and Solutions) is not grayed out anymore and you will even have a nice message saying that you need to run it.

    • You should Click OK on the information window and then click OK to execute the Upgrade.

       

    • Click Run. Sit back, relax have a tea or coffee and wait for the update to finish

     

    Situation 3: SharePoint 2013 with PowerPivot from SQL 2012 SP1 / SQL 2014

     

    1. If the Analysis Services instance in SharePoint mode (PowerPivot) is installed on one or multiple servers in the farm you will do the same steps as for the Situation 2.

       

    2. If you SSAS in SharePoint mode is on a server that is not a member of the SharePoint farm you will have to execute some extra steps:

       

    • Install the CU for SQL 2012 SP1 / SQL 2014
    • Copy the spPowerPivot.msi to your SharePoint server(s) where you have installed it before. You can find it here: C:\Program Files\Microsoft SQL Server\110 or 120\Setup Bootstrap\Update Cache\<KB number you have installed>\QFE\1033_enu_lp\x64\setup\ or you can do a Start – Run – path to CU including the name of the file and then /extract

       

    • Install the newer version of the spPowerPivot.msi and click Yes on the warning message

       

     

    • Finalize the installation wizard

       

        

    • Run the PowerPivot Configuration Tool and upgrade the existing installation and from here is the same as Situation 2.

       

      Thanks to Dominique VIVES for having reviewed my post.

      Radu CARAIVAN

  • How to manage your O365 sites with PowerShell and CSOM?

    This post explains how to manage your SharePoint Online environment and manipulate SPO objects. In other words, this post describes how to manage SharePoint sites, SharePoint lists using Powershell and CSOM (Client Side Object Model).

    1. Prerequisites

    In order to use CSOM within your PowerShell scripts, you first need to download the "Office Developer Tools for Visual Studio 2013". This package contains the client Dlls components for SharePoint Online. You can download the office Developer tools on this link.

    You can find more details regarding the Office Developer Tools for Visual Studio in the following articles:

    Note: the examples of this post use the office developer tools of March 2014.

    In this post, I' am using a PowerShell version 4.0 provided with Windows 8.1, however the scripts should also work since PowerShell 2.0 (at least).

    2. Walkthrough

    a. Loading Clients Assemblies

    In order to manipulate SharePoint Online objects in our PowerShell script, we first need to load the Clients DLL installed with the Office Developer tools on our local machine.

    We will load two client DLLs with the two following lines:

    [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint.Client")

    [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint.Client.Runtime")

     Note: "Add-Type" cmdlet is an alternative to Loadwithpartialname. LoadWithPartialName is actually deprecated (link).

    b. Create Client Context and Authenticate to SPO

    Now that the client DLLs have been loaded with the previous lines, we can access the SP client objects model. However in order to manipulate SharePoint objects and run operations, we need a new client context.

    To create the context, we first have to provide the site collection URL:

    $weburl= 'https://tenant.sharepoint.com/sites/team'

    $ctx = New-Object Microsoft.SharePoint.Client.ClientContext($webUrl)

     

    Then we should provide the site collection administrator credentials to the context object to authenticate against on the site:

    $username = 'user@tenant.onmicrosoft.com'

    $password = Read-Host -Prompt "Password for $username" –AsSecureString

     $ctx.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($username, $password)

     Note: if the credentials or the WebUrl are wrong, you will face an error when executing the above command.

    c. Query Objects through Context

    Now that we are authenticated to a SPO Site and that we have a context object, we can access objects by loading them in the current context.

    The following query will retrieve the site (SPWeb) in the $ctx:

    $web = $ctx.Web

    $ctx.Load($web);

    $ctx.ExecuteQuery();

    $web.Title # will print the name of the site

    Note: we could also retrieve the site collection (SPSite), $site = $ctx.Site

     

    Now, that we have the site (SPWeb), we can also query objects like lists (SPList) and their basic properties:

    $listname = "Documents"

    $list = $context.Web.Lists.GetByTitle($listname);

    $ctx.Load($list);

    $ctx.ExecuteQuery();

    $list.ItemCount # will print the number of documents and folders

    3. Example Script

    With the following PowerShell script, we will upload a local Temp.txt file to a SharePoint document library.

    This script is provided on an "as is" basis without warranties of any kind, whether express or implied. The entire risk as to the quality and performance of the code is with the end user.

    $loadInfo1 = [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint.Client")

    $loadInfo2 = [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint.Client.Runtime")

     

    $weburl= Read-Host -Prompt "Please type or paste the site url you want to connect to (ex: https://tenant.sharepoint.com/sites/TeamSite)"

    $username = Read-Host -Prompt "Enter or paste the site collection administrators user name"

    $password = Read-Host -Prompt "Password for $username" -AsSecureString

    $listTitle= Read-Host -Prompt "Please type the Documents library TITLE in which you updload the demo text file(ex: Documents)"

    #$webUrl = 'https://contoso.sharepoint.com/sites/dev/'

    #$username = 'administrator@contoso.onmicrosoft.com'

    #$password = ConvertTo-SecureString 'passwod' -AsPlainText -Force

    #$ListTitle= "Documents"

    try

    {

    #Creating the SharePoint Context with SP Site Url and the Site Collection admin credential.

    Write-Output "Connecting to $weburl ...";

    $ctx = New-Object Microsoft.SharePoint.Client.ClientContext($webUrl)

    $ctx.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($username, $password)

    }

    catch

    {

    Write-output "... Couldn't connect. Please check your credential or the provided Url: $weburl." ;

    break

    }

    #Retrieving the Root Web

    Write-Output "`nRetrieving Web ..."

    try

    {

    $web = $ctx.Web

    $ctx.Load($web);

    $ctx.ExecuteQuery();

    }

    catch{

    Write-output 'Unable to get the $web site.';

    break

    }

    write-output "Web title : $($web.Title)";

    write-output "Web Template : $($web.WebTemplate)";

     

    #Retrieving the "Documents" list.

    Write-Output "`nRetrieving Documents document library..."

    try

    {

    $list = $ctx.Web.Lists.GetByTitle("$ListTitle");

    $ctx.Load($list);

    $ctx.ExecuteQuery();

    }

    catch

    {

    Write-Output "Unable to get Documents library. Please check the $listTitle document library exists..." ;

    break;

    }

    Write-Output "List contains: $($list.ItemCount) items."

    try

    {

    #Retrieving the root folder and the Sub folders.

    Write-Output "`nRetrieving Root Folder of list..."

    $ctx.Load($list.RootFolder);

    $ctx.ExecuteQuery();

    $folder = $list.RootFolder;

    Write-Output "Root Folder Name : $($folder.Name)"

    }

    catch

    {

    Write-Output "Face an error when retrieving RootFolder object or Folders nested in this RootFolder.";

    break;

    }

    #Creating a file on local folder.

    Write-Output "`nCreating a file on local folder."

    $myfile = New-Item -Path .\Temp.txt -ItemType file -Force

    $textFile = "Congratulations, this file has been updloaded through CSOM & PowerShell";

     

    #Adding data to file

    Out-File -InputObject $textFile -Append -FilePath $($myfile.FullName)

    Write-Output "`nAdded Text to Temp file."

     

    #Retrieving the root folder and the Sub folders.

    Write-Output "`nAdding file to $($folder.Name) root folder in List ..."

    try

    {

    $FileInfo = New-Object Microsoft.SharePoint.Client.FileCreationInformation($null);

    $FileInfo.Content = get-content -encoding byte -path $($myfile.FullName)

    $FileInfo.Url = "$($myfile.Name)";

    $FileInfo.Overwrite = $true;

    $fileUpload = $folder.Files.Add($FileInfo);

    $ctx.Load($fileUpload);

    $ctx.ExecuteQuery();

    $ctx.Load($list);

    $ctx.ExecuteQuery();

    }

    catch

    {

    Write-Output "... Face an issue when updloading file to the $ListTitle Doc Library.";

    break

    }

    Write-Output "File was added sucessfully."

    Write-Output "Now List contains: $($list.ItemCount) items.

    You can find the script attached to this post in "SPO_CreateListItem.zip".
     
     
    Thanks to Vincent Runge for having reviewed my post.
    Dominique VIVES
  • Rich Text Editor (RTE) et code réentrant dans un contexte de Minimal Download Strategy (MDS)

    Contexte

    Vous avez généré sur votre environnement SharePoint 2013 une solution Visual Studio de type Visual Web Part et cette solution comporte un élément UpdatePanel (AJAX Extensions) ainsi qu’un élément InputFormTextBox (Microsoft.SharePoint.WebControls.InputFormTextBox).

    Cette solution pourrait avoir la forme suivante :

    L’intérêt du contrôle <asp:Button ID="btn" runat="server"  Text="Refresh Panel" OnClick="btn_Click"/> est de pouvoir déclencher un post de la page et de mettre en évidence le fonctionnement présenté dans cet article de blog.  Le code « behind » de ce contrôle pourrait effectuer l’action suivante :

    Au final la page affichée par SharePoint pourrait avoir la forme suivante :

    Un clic sur le bouton « Refresh Panel » aura l’effet suivant :

    Le contrôle RTE ainsi que la barre d’outils sont dupliqués, le contenu est perdu et le contrôle devient non opérationnel.

    Résolution

    Des informations complémentaires sur ce comportement sont données dans le paragraphe « Conclusion ».

    Depuis SharePoint 2013, un nouveau mode de rendu des pages ASPX est proposé, nommé « Minimal Download Strategy ».  Cette fonctionnalité accélère le rendu d’une page lorsque peu d’éléments changent sur cette page.  Dans ce contexte, les contrôles utilisés sur la page doivent pouvoir être rappelés. En d’autres termes, le code de l’élément doit être fonctionnel en mode réentrant. Dans l’exemple ci-dessus, nous voyons très bien que l’élément InputFormTextBox présente un dysfonctionnement dans un tel contexte.

    Pour contourner ce fonctionnement, l'idée est de vérifier si l'élément est déjà sur la page lors de son appel pour affichage. Si tel est le cas il faut bloquer cet appel.

    Voici, ci-dessous, quelques méthodes permettant de mettre en place ce contournement :

    Premier exemple, dans une simple page ASPX

    Dans un tel contexte, le code suivant, ajouté dans une page ASPX, serait suffisant :

    Deuxième exemple, dans le cadre de notre web-part

    Dans ce cas, cela se complique un peu. En effet, la fonction document.getElementById, pour pouvoir être utilisable, va nécessiter de fournir le ClientID du contrôle recherché sur la page ASPX.

    Première solution

    Il faut récupérer le ClientID du contrôle en éditant le code source de la page dans IE.  La contrainte ici est que si la page est modifiée, alors le ClientID va changer. Il sera nécessaire de recompiler la solution Visual Studio et la redéployer.

    Le code aurait la forme suivante :

    Deuxième solution

    Cette solution semble plus optimale pour contourner ce comportement.  Elle consiste à remplacer la fonction JavaScript exposée ci-dessus par la version suivante :

    Dernière précision

    Il n’est pas nécessaire d’ajouter le code ci-dessus directement dans le fichier ASCX de la solution Visual Studio.  Ce code peut être injecté par la fonction suivante déclarée dans le fichier ASCX.CS de la solution Visual Studio.

    Conclusion

    Ce dysfonctionnement a été rapporté au groupe produit SharePoint.  Leur décision a été de ne pas toucher au code source utilisé par l’élément Rich Text Editor.  RTE existe depuis plusieurs versions de SharePoint et le modifier maintenant pourrait avoir des impacts inattendus sur des plateformes SharePoint déjà installées.

    La solution de contournement exposée ci-dessus a été officialisé par le groupe produit SharePoint et la fourniture d’une solution sous forme de correctif est pour l’instant exclue des prochaines mises à jour SharePoint.

    Je remercie Cédric Naudy pour la relecture de ce billet.

    Yamine Taiëb

  • Connaître les temps d’exécution … sans Développeur Dashboard!

    En analysant des problèmes de performance, je me suis confronté à un environnement où le developer dashboard n'est pas disponible.

    Les logs ULS contiennent les temps d'exécution dans les évènements B4LY. Les évènements B4LY ne sont logués que lorsque pour le produit SharePoint Foundation, la catégorie Monitoring est à High ou plus verbeuse.

    J'ai écrit un script PowerShell pour extraire les temps d'exécution des logs ULS, pour un correlation ID donné. L'objectif est de comprendre rapidement ce qui a consommé le temps de réponse. J'ai publié le script à https://dumpexecutiontime.codeplex.com/  

    La documentation complète (syntaxe, exemples, paramètres) est disponible sur codeplex.

    Pour extraire les temps d'exécution:

    1. Mettre le niveau de diagnostic pour le produit SharePoint Foundation, catégorie Monitoring à High ou supérieur.
    2. Reproduire le problème
    3. Enregistrer localement le script Dump-ExecutionTime.ps1 depuis https://dumpexecutiontime.codeplex.com/.
    4. Dans une session PowerShell, exécuter Dump-ExecutionTime.ps1 :

    dir v:*log | C:\Tests\Dump-ExecutionTime.ps1 -Threshold 500

    La sortie sera par exemple:

    Extracting Execution Times above 500 ms from file V:\srs\Ignacio Verbose-c52663.log with correlation

    id matching *

    ExecTime         Monitored Scope
    ----------       ------------------------------
       729.130       Leaving Monitored Scope (Directory Search).
       792.014       Leaving Monitored Scope (Directory Search).
       666.610       Leaving Monitored Scope (PortalSiteMapNode: Populating navigation children for web:

    /<PII:..>).
       722.340       Leaving Monitored Scope (Directory Search).
       659.460       Leaving Monitored Scope (Directory Search).
       675.208       Leaving Monitored Scope (Directory Search).
       510.887       Leaving Monitored Scope (Directory Search).
       616.288       Leaving Monitored Scope (Directory Search).
       603.682       Leaving Monitored Scope (Directory Search).
       523.035       Leaving Monitored Scope (Directory Search).
       592.420       Leaving Monitored Scope (Directory Search).
       507.795       Leaving Monitored Scope (Directory Search).
       620.947       Leaving Monitored Scope (Directory Search).
     8,580.957       Leaving Monitored Scope (Render the Web part of the PII own documents).
     8,581.096       Leaving Monitored Scope (Redner the Web part- Main).
     8,641.322       Leaving Monitored Scope (SharePointForm Control Render).
    14,294.430       Leaving Monitored Scope (Request GET:https://server.domain.com/Forms/AllItems.aspx)).

    17 monitored scopes matched, for a total of 48317.62 ms

    Dans cet exemple, les appels à Directory Search (surlignés en jaune) sont responsables de la plus grande partie du temps de réponse.

    Je remercie Dominique Vives pour la relecture de ce billet.

    Vincent Runge

  • Mise à jour labels enfants non fonctionnels après migration de SP2010 vers SP2013

    Contexte

     

    Vous avez généré sur votre environnement SharePoint 2010 une solution basée sur la fonctionnalité variations.

     

    Imaginons que cette solution est la forme simple suivante :

     

    • Une collection de sites générée à partir du template de site « Publishing Portal ».
    • Cette collection de site héberge le site racine (de référence) pour les autres labels.
    • Un ou deux autres labels, voir beaucoup plus, sont présents dans cette solution basée sur les variations.

    Au final la solution disponible sur SharePoint 2010 pourrait avoir la forme suivante.

     

     

    Vous décidez de migrer ce contenu vers SharePoint 2013. Pour ce faire, la base de données est sauvegardée, restaurée sur le nouvel environnement SQL et attachée à la nouvelle application web SharePoint 2013 avec la commande PowerShell « Mount-SPContentDatabase ».

     

    Dans ce nouvel environnement toute modification effectuée sur le label racine ne sera plus propagée vers les labels « enfants » faisant parties de la hiérarchie.

    Résolution

     

    La raison de ce dysfonctionnement, après la migration, est que tous les labels, autre que le label racine, devraient avoir une propriété nommée « NotificationMode » égale à False, alors que le label racive devrait cette propriété égale à True, ce qui n'est pas le cas. Cette propriété après la migration est positionnée à Null pour tous les labels.

     

    Une solution de contournement a été trouvée par le service support de Microsoft et ce dysfonctionnement a été reportée auprès du groupe produit SharePoint.

    Conclusion

     

    La solution de contournement suivante a été officialisée (supporté) par le groupe produit SharePoint et la fourniture d'une solution sous forme de correctif est pour l'instant hors du champ de vision des prochaines mises à jour SharePoint 2013.

     

    Le script PowerShell suivant peut être utilisé pour mettre à jour les labels appartenant à la hiérarchie.

     

    $web = Get-SPWeb http://nomDuSite

    $list = $web.GetListFromUrl("/Variation Labels/AllItems.aspx")

    $nbItems = $list.ItemCount

    For ($i = 0 ; $i -lt $nbItems ; $i++)

    {

       If ($i -eq 0)

       {

         $item = $list.Items[$i]

         $item["NotificationMode"] = $true

         $item.Update()

       }

       Else

       {

         $item = $list.Items[$i]

         $item["NotificationMode"] = $false

         $item.Update()

       }

    }

    Je remercie Dominique Vives pour la relecture de ce blog.

     

    Yamine Taiëb

  • Diagnostic des Workflows 2013

    an English version of this post is also available - click here for English  

    Après avoir donné les formations internes Workflows, j'ai trouvé utile de compiler une "checklist" de référence pour le support des workflows 2013. Voici donc cette liste, contenant les actions de diagnostic les plus usitées.

    Problèmes d'exécution du flux de travail

    1.       Observer la "Workflow History list", eg "http://sp2013/Lists/Workflow History". Y a-t-il des erreurs?

    2.       Le compte de l'utilisateur qui démarre le workflows est-il:

      • correctement synchronisé dans la base des profils utilisateurs?
      • distinct du compte de setup du Workflow manager?

    (Plus de détails à http://technet.microsoft.com/en-us/library/jj658588.aspx#section7)

    3.       Les services User Profile Service et App Management Service sont-ils démarrés ? Voir les cadres verts dans copie d'écran depuis  l'Administration Centrale \ Manage Services on Server :

     

    4.       Les service-applications App Management Service Application et User Profile Service Application sont-elles démarrées? Leurs proxies sont-elles également démarrées ? Voir les cadres verts dans copie d'écran depuis l'Administration Centrale \ Manage Service Applications :

    Comment retrouver une exception dans les base Workflow Manager

    Non supporté en production, mais très pratique en développement!

    Dans la page SharePoint workstat.aspx , copier le champs "requestor id"


    1.       Puis dans les paramètres d'appels de l'url de la page worsktat.aspx, copier le champs "instanceid"

    2.       Ouvrir la base WFInstanceManagementDB avec SQLManagement Studio,  faire une requête table DebugTrace

    3.       l'exception est dans la colonne "WorkflowStatusDetail"

     

    Configuration du serveur SharePoint

    Dans l'Administration Centrale \ MaService Applications \ Workflow Service Application Proxy:

    Quel est le status? Le status est-il bien "connecté" comme dans la copie d'écran ci-dessous:

    La ferme Worflow Manager est-elle en cours d'exécution?


    Sur un serveur de la ferme Worflow Manager,

    1.       Lancer un Workflow Manager PowerShell

    2.       lancer la commande get-WFStatus

    3.       Les status sont-ils Running comme sur la copie d'écran ci-dessous:


    Les information Oauth sont-elles publiées et accessibles depuis le serveur SharePoint?


    Sur le serveur SharePoint 2013, lancer IE, et vérifier que les metadonnées OAuth sont accessibles. L'url est de la forme: http://wfm1:12291/$SYSTEM/$Metadata/json/1

    Voici un exemple de résultat:


     

     

     

    Les scopes sont-ils bien enregistrés dans la ferme Workflow Manager?


    Il est possible de vérifier depuis Internet Explorer que les scopes sont bien enregistrés. Il est également possible de parcourir les données des workflows. Les URLs indiquées ci-dessous permettent de vérifier ces éléments:

    http://wfm1:12291/$ChildScopes

    http://wfm1:12291/SharePoint/default/659f1e87-c228-420e-9eb6-c2ca4b5b7cf8/aa605c44-734b-4bd4-b961-2afd253d1c3d/$ChildScopes

    http://wfm1:12291/SharePoint/default/659f1e87-c228-420e-9eb6-c2ca4b5b7cf8/aa605c44-734b-4bd4-b961-2afd253d1c3d/$Workflows

    http://wfm1:12291/SharePoint/default/659f1e87-c228-420e-9eb6-c2ca4b5b7cf8/aa605c44-734b-4bd4-b961-2afd253d1c3d/$Workflows/0ce48b29-b821-4785-ab12-34564e7332a3/$Instances

     

    Notes


    Les GUIDs des URLs ci-dessus ne sont pas fixes.

    L'outil ci-dessous pour naviguer plus simplement dans les données du workflows manager:

    http://code.msdn.microsoft.com/windowsdesktop/Workflow-Resource-Browser-a67b1d27

    Sur un serveur Workflows Manager, il convient d'exécuter l'outil Workflow-Resource-Browser en tant qu'administrateur

    Activer les logs Workflows Manager

     1.       Lancer l'observateur d'évènements

    2.       Étendre Applications and Services Logs \ Microsoft-Workflow

    3.       Dans le menu View \ Show Analytical and Debug logs

    4.       Sélectionner le log Debug, cliquer-droit enable Log


     5.       Reproduire le problème

    6.       Sélectionner le log Debug, cliquer-droit Disable Log. (L'objectif est de ne pas saturer la plateforme.)

    7.       Il est alors possible d'enregistrer le log au format EVTX

     

    Versions utilisées:

    SharePoint 2013 v15.0.4551.1001

    Workflow Manager 1.0.0


     Je remercie Yvan Duhamel pour la relecture de ce blog.

      

    Vincent Runge

  • A propos du blog de l’équipe française GBS SharePoint

    Notre objectif est d’aider les utilisateurs directement, leur évitant l’ouverture d’un incident support. Ce blog, ainsi que les exemples et le code inclus, sont fournis à titre d'information uniquement et ne sont assortis d'aucune garantie expresse ou implicite. Les informations contenues dans ce blog, y compris les URL et autres références à des sites Web Internet, pourront faire l'objet de modifications sans préavis. L'utilisateur reconnaît assumer tous les risques liés à l'utilisation ou aux résultats de l'utilisation de ce blog.

     

    -----------------------------------------------------------------------------

    Dominique VIVES de la part de l'équipe "GBS SharePoint FR"

  • About the SharePoint Blog of the French GBS team

    Our blog is aimed at helping people help themselves, and to avoid having to open a support incident for the more common problems.  We cannot engage deeply with anyone via the blog - but if we get a comment where a quick response should help someone on their way then we will try to do this.  We do monitor comments before publishing, but so far it is only spam we have not published.  Feel free to respond to others comments if you have the answers before we do.  Also we enjoy feedback pointing us in a direction the readers need us to go in - so let us know of any specific topics you need covering.

    All messages posted to this blog are provided "AS IS" with no warranties, and confer no rights. Use of any script or code samples is subject to the terms specified in the
    Terms of Use

    --------------------------------------------------------------------------

    Dominique VIVES on behalf of the SharePoint GBS Team