7

SharePoint 2010 のクライアント オブジェクト モデル (C#) を使用して、指定した列 (フィールド) 名が特定のリストに存在するかどうかを確認するにはどうすればよいですか?

ありがとう、マジックアンディ。

4

9 に答える 9

12

同じものを検索しているときにこれを見つけましたが、Sharepoint 2010 には、少なくともサーバー モデルについては、このために何かが組み込まれているようです。list.Fields.ContainsField("fieldName");

ただし、クライアント側に存在するかどうかはわかりません。ただし、この情報を保存するのに適した場所であると考えました。

于 2012-03-19T15:47:35.023 に答える
7

サーバーオブジェクトモデル

string siteUrl = "http://mysite";
using (SPSite site = new SPSite(siteUrl))
{
    using (SPWeb web = site.OpenWeb())
    {
        SPList list = web.Lists["my forum"];
        for (int i = 0; i < list.Fields.Count; i++)
        {
            if (list.Fields[i].Title == "xyz")
            {
                -
                -
            }
        }
    }
}

クライアントオブジェクトモデル

string siteUrl = "http://MyServer/sites/MySiteCollection";
ClientContext clientContext = new ClientContext(siteUrl);
SP.List List = clientContext.Web.Lists.GetByTitle("my forum");
for (int i = 0; i < list.Fields.Count; i++)
{
    if (list.Fields[i].Title == "xyz")
    {
        -
        -
    }
}
于 2010-12-09T18:32:10.320 に答える
5

List次のメソッドは、指定された列がusing CSOMに存在するかどうかを判断する方法を示しています。

static class FieldCollectionExtensions
{
    public static bool ContainsField(this List list,string fieldName)
    {
        var ctx = list.Context;
        var result = ctx.LoadQuery(list.Fields.Where(f => f.InternalName == fieldName));
        ctx.ExecuteQuery();
        return result.Any();
    }
}

使用法

using(var ctx = new ClientContext(webUrl))
{
    var list = ctx.Web.Lists.GetByTitle(listTitle);
    if(list.ContainsField("Title")){
       //...
    }
}
于 2014-10-02T21:01:54.187 に答える
2

上記のいくつかの良い答え。私は個人的にこれを使用しました:

            List list = ctx.Web.Lists.GetByTitle("Some list");
            FieldCollection fields = list.Fields;
            IEnumerable<Field> fieldsColl = ctx.LoadQuery(fields.Include(f => f.InternalName));
            ctx.ExecuteQuery();

            bool fieldMissing = fieldsColl.Any(f => f.InternalName != "Internal_Name");

Include メソッドの後に 'Where' を使用して、返されたコレクション/フィールドが null かどうかを確認することもできます。どちらのオプションもクライアント側でクエリを実行するため、個人的な好みに関するものです。

于 2016-07-22T12:35:58.317 に答える
2

操作の前にリストのフィールドの詳細を取得し、それらを構造体の一般的なリスト (各フィールドの詳細を含む) に保存することになりました。次に、この (一般的な) リストにクエリを実行して、指定された (SharePoint) リストに現在のフィールドが実際に存在するかどうかを確認します。

// Retrieve detail sof all fields in specified list
using (ClientContext clientContext = new ClientContext(SharePointSiteUrl))
{
    List list = clientContext.Web.Lists.GetByTitle(listName);
    _listFieldDetails = new List<SPFieldDetails>();

    // get fields name and their types
    ClientObjectPrototype allFields = list.Fields.RetrieveItems();
    allFields.Retrieve( FieldPropertyNames.Title, 
                        FieldPropertyNames.InternalName,
                        FieldPropertyNames.FieldTypeKind,
                        FieldPropertyNames.Id,
                        FieldPropertyNames.ReadOnlyField);
    clientContext.ExecuteQuery();

    foreach (Field field in list.Fields)
    {
        SPFieldDetails fieldDetails = new SPFieldDetails();
        fieldDetails.Title = field.Title;
        fieldDetails.InternalName = field.InternalName;
        fieldDetails.Type = field.FieldTypeKind;
        fieldDetails.ID = field.Id;
        fieldDetails.ReadOnly = field.ReadOnlyField;
        listFieldDetails.Add(fieldDetails);
    }
}

// Check if field name exists
_listFieldDetails.Exists(field => field.Title == fieldName);

 // Struct to hold details of the field
public struct SPFieldDetails
{
    public string Title { get; set; }
    public string InternalName { get; set; }
    public Guid ID { get; set; }
    public FieldType Type { get; set; }
    public bool ReadOnly { get; set; }
}
于 2010-12-10T16:33:16.473 に答える
0

私は SharePoint Plus Library がとてもきれいなので気に入っています: http://aymkdn.github.io/SharepointPlus/symbols/%24SP%28%29.list.html

$SP().list("My List").get({
  fields:"Title",
  where:"Author = '[Me]'"
},function getData(row) {
  console.log(row[0].getAttribute("Title"));
});

for ループを設定して行をループし、探している列が存在するかどうかを確認できます。

于 2015-11-19T05:04:45.107 に答える