Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

Blog Technique de Romelard Fabrice

Les dernières Actualités de Romelard Fabrice (Alias fabrice69 ou F___) principalement autour des technologies Microsoft

Actualités

  • Toutes les actualités et informations sur les technologies Microsoft principalement autour de .NET et SQL Server

Archives

SharePoint : Retrouver les items d’un sondage non validés par les utilisateurs

SharePoint permet de créer des sondages simples, qui parfois peuvent s’afficher sur plusieurs pages. Dans ce cadre la, l’affichage du formulaire propose un bouton “Save” :

image

Le fait est que de nombreux utilisateurs ne passent pas sur la page suivante et cliquent sur “Save” en pensant valider ce formulaire.

Malheureusement, ce n’est pas le cas en interne, car la réponse est sauvegardée en base mais avec un status “Checked out” proche de celui des fichier Published/Checked Out.

D’ailleurs certains codes existent pour supprimer entèrement ce bouton, mais la n’est pas le sujet :

Un des effets visibles pour le créateur du sondage est la différence entre le nombre d’items visible dans les résultats et le nombre d’items dans la page de résumé :

image

Mais aussi, par le manque de certains numéros dans la suite des items des résultats (dans l’exemple, il manque le 1, le 11 & 12, …) :

image

De ce fait, le propriétaire du sondage veut pouvoir fermer ce sondage avec tous les résultats et souhaite pouvoir relancer uniquement ceux qui sont dans le cas “stand-by”. Il existe d’ailleurs une KB sur ce point qui ne fournit aucune solution.


Obtenir les informations en cours

Pour cela, il faut aller dans les bases de SharePoint, car il n’y a pas de moyen simple pour effectuer cela (pour des raisons évidentes de confidentialités). Il n’y a pas de possibilité de trouver ces informations directement via code/PowerShell.

En revanche, il nous faut connaître la base de données dans laquelle la collection se situe ainsi que l’ID (GUID) de la liste en question, sachant que nous avons l’URL et le nom de la liste. Pour le nom de la Base, on peut aller dans l’interface d’administration, mais le plus simple pour avoir les deux informations est de partir d’un petit script PowerShell :

function Get-AllSurveyItemOwners([string]$SurveyURL, [string]$SurveyName)
{
    [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint") > $null
    [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint.Administration") > $null

    $site = new-object Microsoft.SharePoint.SPSite($SurveyURL)
    Write-Host "SiteURL:", $SurveyURL

    $DBName = [Microsoft.SharePoint.Administration.SPContentDatabase].GetProperty("Name")

    $MyContentDatabase = $site.ContentDatabase
   
    Write-Host " ------------------------------ "
    $CurrentDBName = $DBName.GetValue($MyContentDatabase, $null)
    Write-Host " ---> ContentDB:", $CurrentDBName
   
    $web = $site.OpenWeb()

    Write-Host " ------------------------------ "
    $SurveyList = $web.Lists[$SurveyName];
    Write-Host " ---> Survey ListID:", $SurveyList.Id
    Write-Host " ------------------------------ "
   
    $web.Dispose()
    $site.Dispose()
}

cls
Get-AllSurveyItemOwners  “http://MyWebApp/sites/mysitecoll/lists/mysurvey”
"MySurveyName"

image

Ainsi, nous avons à ce stade la base en question et le GUID de la liste Survey en question, il nous faut aller directement sur le serveur de bases de données et exécuter la requête :

USE [MyContentDB]

SELECT
    usrinf.tp_Login AS UsrLogin,
    usrinf.tp_Email AS UsrEmail,
    AllData.tp_Modified AS LastModified,
    AllData.tp_ID AS IDItem
FROM
    dbo.AllUserData AllData
INNER JOIN dbo.UserInfo usrinf
    ON AllData.tp_Author = usrinf.tp_ID
    AND AllData.tp_SiteID = usrinf.tp_SiteID
WHERE
    (tp_ListId = 'myGUID-myGUID-xxxxXXXX-XXXX)
AND
    (NOT tp_CheckoutUserId IS NULL)

Vous obtiendrez alors en résultat les informations nécessaires pour contacter les utilisateurs :

image

Il ne vous reste plus qu’à envoyer le résultat de cette requête au propriétaire du sondage.

Liens Annexes

Romelard Fabrice [MVP]

Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :
Posted: vendredi 15 mars 2013 16:29 par ROMELARD Fabrice

Commentaires

ROMELARD Fabrice a dit :

Version améliorée de la fonction du script pour générer automatiquement la requête SQL :

---

function Get-AllSurveyItemOwners([string]$SurveyURL, [string]$SurveyName)

{

[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint") > $null

[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint.Administration") > $null

$site = new-object Microsoft.SharePoint.SPSite($SurveyURL)

Write-Host "SiteURL:", $SurveyURL

$DBName = [Microsoft.SharePoint.Administration.SPContentDatabase].GetProperty("Name")

$MyContentDatabase = $site.ContentDatabase

Write-Host " ------------------------------ "

[string]$CurrentDBName = $DBName.GetValue($MyContentDatabase, $null)

Write-Host " ---> ContentDB:", $CurrentDBName

$web = $site.OpenWeb()

Write-Host " ------------------------------ "

$SurveyList = $web.Lists[$SurveyName];

[string]$CurrentListID = $SurveyList.Id

Write-Host " ---> Survey ListID:", $SurveyList.Id

Write-Host " ------------------------------ "

$web.Dispose()

$site.Dispose()

$SQLToLaunch = "USE [$CurrentDBName]"

$SQLToLaunch += " SELECT usrinf.tp_Login AS UsrLogin, usrinf.tp_Email AS UsrEmail, AllData.tp_Modified AS LastModified, "

$SQLToLaunch += " AllData.tp_ID AS IDItem FROM dbo.AllUserData AllData "

$SQLToLaunch += " INNER JOIN dbo.UserInfo usrinf ON AllData.tp_Author = usrinf.tp_ID AND AllData.tp_SiteID = usrinf.tp_SiteID "

$SQLToLaunch += " WHERE (NOT tp_CheckoutUserId IS NULL) AND (tp_ListId = '$CurrentListID')"

Write-Host " ------------------------------------------------------------------ "

Write-Host " SQL Code:"

Write-Host $SQLToLaunch

Write-Host " ------------------------------------------------------------------ "

}

Romelard Fabrice [MVP]

# mars 20, 2013 15:40

ROMELARD Fabrice a dit :

Le script est posté sur le site :

- http://sharepointpsscripts.codeplex.com/releases/view/21675

Fabrice

# mars 20, 2013 15:51
Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- Merci par Blog de Jérémy Jeanson le 10-01-2019, 20:47

- Office 365: Script PowerShell pour auditer l’usage des Office Groups de votre tenant par Blog Technique de Romelard Fabrice le 04-26-2019, 11:02

- Office 365: Script PowerShell pour auditer l’usage de Microsoft Teams de votre tenant par Blog Technique de Romelard Fabrice le 04-26-2019, 10:39

- Office 365: Script PowerShell pour auditer l’usage de OneDrive for Business de votre tenant par Blog Technique de Romelard Fabrice le 04-25-2019, 15:13

- Office 365: Script PowerShell pour auditer l’usage de SharePoint Online de votre tenant par Blog Technique de Romelard Fabrice le 02-27-2019, 13:39

- Office 365: Script PowerShell pour auditer l’usage d’Exchange Online de votre tenant par Blog Technique de Romelard Fabrice le 02-25-2019, 15:07

- Office 365: Script PowerShell pour auditer le contenu de son Office 365 Stream Portal par Blog Technique de Romelard Fabrice le 02-21-2019, 17:56

- Office 365: Script PowerShell pour auditer le contenu de son Office 365 Video Portal par Blog Technique de Romelard Fabrice le 02-18-2019, 18:56

- Office 365: Script PowerShell pour extraire les Audit Log basés sur des filtres fournis par Blog Technique de Romelard Fabrice le 01-28-2019, 16:13

- SharePoint Online: Script PowerShell pour désactiver l’Option IRM des sites SPO non autorisés par Blog Technique de Romelard Fabrice le 12-14-2018, 13:01