1

ユーザーまたはグループのいずれかになることができるリストに sharepoint フィールドがあります。サーバー オブジェクト モデルを使用すると、ユーザーがグループかどうかを簡単に識別できます。

ただし、Managed Client Object モデルを使用してこれを実現する方法が見つかりません。知る方法はありますか。

グループのリストをループして、その名前のグループがあるかどうかを確認することで、なんとか機能させることができました。ただし、これは正確でも効率的でもありません。ユーザーの ListItem を使用して調べる方法があるかもしれません。しかし、ユーザーが管理者であることを示すフィールドはありませんでした。また、EnsureUser も試しました。ユーザーがグループでない場合、これはクラッシュします。したがって、try/catch を使用して解決できますが、これは非常に悪いプログラミングになります。

ありがとう、

ジョセフ

4

2 に答える 2

2

これを行うには、からユーザーのリストを取得し、返された各アイテムの をClientContext.Current.Web.SiteUserInfoListチェックして、それが何であるかを判断します。ContentType

ただし、各アイテムから実際に返されるのは のみであるため、コンテンツ タイプの確認はあまり直接的ではありませんContentTypeID。これを、 のユーザー リストのコンテンツ タイプと照合する必要がありますClientContext.Current.Web.SiteUserInfoList.ContentTypes。そのルックアップは ContentType オブジェクトを返し、Nameそのオブジェクトのプロパティから読み取って、リスト項目が何であるかを確認できます。

したがって、これを行うための単純化されたコードのチャンクは次のようになります。

using Microsoft.SharePoint.Client;

...

ClientContext context = ClientContext.Current;

var q = from i in context.Web.SiteUserInfoList.GetItems(new CamlQuery()) select i;
IEnumerable<ListItem> Items = context.LoadQuery(q);
context.ExecuteQueryAsync((s, e) => {
    foreach (ListItem i in Items) {
        //This is the important bit:
        ContentType contenttype = context.Web.SiteUserInfoList.ContentTypes.GetById(i["ContentTypeId"].ToString());
        context.Load(contenttype); //It's another query so we have to load it too
        switch (contenttype.Name) {
            case "SharePointGroup":
                //It's a SharePoint group
                break;
            case "Person":
                //It's a user
                break;
            case "DomainGroup":
                //It's an Active Directory Group or Membership Role
                break;
            default:
                //It's a mystery;
                break;
        }
    }
},
    (s, e) => { /* Query failed */ }
);

プラットフォームは指定されませんでしたが、SharePoint クライアント オブジェクト モデルを使用して、Silverlight でこれらすべてを実行しました。JavaScriptでも同じことが可能であることは当然です。

于 2013-04-05T18:26:00.453 に答える
0

試してくださいMicrosoft.SharePoint.Client.Utilities.Utility.SearchPrincipals(...)

var resultPrincipals = Utility.SearchPrincipals(clientContext, clientContext.Web, searchString, PrincipalType.All, PrincipalSource.All, null, maxResults);

戻り値の型 にはPrincipalInfo、Group をチェックできる PrincipalType プロパティがあります。

于 2014-11-28T15:48:53.013 に答える