Comment puis-je obtenir le bon SPFieldalervalue d'utiliser SpsiSiteDataQuery pour agréger les tâches d'un utilisateur?

sharepoint.stackexchange https://sharepoint.stackexchange.com//questions/91625

  •  10-12-2019
  •  | 
  •  

Question

J'essaie de rassembler toutes les tâches d'un certain type de contenu pour un certain utilisateur.Pour accomplir cela, j'utilise une spsi abandonnée qui ressemble à ceci:

string where = String.Format(@"<Where>
                                        <And>
                                            <BeginsWith>
                                                <FieldRef Name='ContentTypeId'/>
                                                <Value Type='Text'>0x0108010031C20CDC28544f93B27958D36ACBE2F5</Value>
                                            </BeginsWith>
                                            <Eq>
                                                <FieldRef Name='AssignedTo'/>
                                                <Value Type='Text'>{0}</Value>
                                            </Eq>
                                        </And>
                                     </Where>", userValue.ToString());
query.Query = where;
DataTable results = web.GetSiteData(query);

Cela fonctionne bien si je veux juste filtrer pour le type de contenu, mais le filtrage de l'utilisateur échoue.

Voici ce que je pense que le problème est .. Le champ assigné contient des valeurs qui ressemblent à ceci

17;#TestUser01

Mais mon nom de connexion régulier contient la chaîne de réclamation et le domaine et ressemble à ceci

i:0#.w|test\TestUser01

J'ai essayé de créer le SPFielduserValue pour obtenir la même chaîne d'utilisateur que l'on trouve dans le champ attribué. Comme ça:

SPFieldUserValue userValue = new SPFieldUserValue(web, SPContext.Current.Web.CurrentUser.ID, SPContext.Current.Web.CurrentUser.LoginName);

.. mais alors je reçois juste une valeur qui ressemble à ceci:

17;#i:0#.w|test\TestUser01

.. et je n'ai toujours aucun résultat de ma requête ..

Comment puis-je obtenir la chaîne correcte pour exécuter ma requête?

Était-ce utile?

La solution

By changing the CAML like this:

string where = @"<Where>
                                        <And>
                                            <BeginsWith>
                                                <FieldRef Name='ContentTypeId'/>
                                                <Value Type='Text'>0x0108010031C20CDC28544f93B27958D36ACBE2F5</Value>
                                            </BeginsWith>
                                            <Eq>
                                                <FieldRef Name='AssignedTo' LookupId='TRUE' />
        <Value Type='Integer'><UserID /></Value>
                                            </Eq>
                                        </And>
                                     </Where>";
query.Query = where;
DataTable results = web.GetSiteData(query);

it will fetch for current user :)

If you need to specify another user you can use:

string where = String.Format(@"<Where>
                                        <And>
                                            <BeginsWith>
                                                <FieldRef Name='ContentTypeId'/>
                                                <Value Type='Text'>0x0108010031C20CDC28544f93B27958D36ACBE2F5</Value>
                                            </BeginsWith>
                                            <Eq>
                                                <FieldRef Name='AssignedTo' LookupId='TRUE' />
                                                <Value Type='Integer'>{0}</Value>
                                            </Eq>
                                        </And>
                                     </Where>", userValue.ToString());
query.Query = where;
DataTable results = web.GetSiteData(query);

and just make sue you have the ID of the user in userValue

Autres conseils

The CAML Query for fetching the values for current user is:

"<Where><Eq><FieldRef Name='AssignedTo' /><Value Type='Integer'><UserID Type='Integer' /></Value></Eq></Where>";

And for another user it should be as mentioned by @Robert.

Licencié sous: CC-BY-SA avec attribution
Non affilié à sharepoint.stackexchange
scroll top