سؤال

أنا أعمل مع نموذج كائن جانب العميل.في تطبيق وحدة التحكم ، أقوم باسترداد جميع الحقول من قائمة مخصصة.المشكلة هي أن كلينتكونتيكست يجلب لي مجموعة من الحقول الداخلية لا أريد أن يتم تضمينها.يؤدي هذا أيضا إلى ظهور بعض الحقول أكثر من مرة.

string siteURL = "http:XYZ";
ClientContext context = new ClientContext(siteURL);
Web oWebSite = context.Web;
context.Load(oWebSite);
context.ExecuteQuery();

//Get the list by title
List produktKatalogListe = spLists.GetByTitle("Produktkatalog");
CamlQuery camlQuery = new CamlQuery();
camlQuery.ViewXml = "<View/>";
ListItemCollection listItems = produktKatalogListe.GetItems(camlQuery);
context.Load(produktKatalogListe);
context.Load(listItems);
context.Load(produktKatalogListe.Fields);
context.ExecuteQuery();

foreach(Field field in produktKatalogListe.Fields)
{
Console.WriteLine("{0} - {1} - {2} - {3} - {4}",field.Title,field.InternalName,field.Hidden,field.CanBeDeleted,field.FieldTypeKind);
}

هل هناك طريقة لطباعة الحقول المخصصة فقط?هذا يعني حذف الحقول مثل internalID, GUID...

حاولت ما يلي:

if(!field.Hidden)
{
Console.WriteLine("{0} - {1} - {2} - {3} - {4}",field.Title,field.InternalName,field.Hidden,field.CanBeDeleted,field.FieldTypeKind);
}

لسوء الحظ ، لا يؤدي هذا إلى حل المشكلة فحسب ، بل إنه أيضا ليس حلا جيدا جدا للحالة التي أرغب في عرض الحقول المخصصة ولكن المخفية.

هل كانت مفيدة؟

المحلول 2

يبدو أن النهج التالي يحل المشكلة.بدلا من ذلك للتحقق مما إذا كان الحقل ليس كذلك Hidden راجعت ما إذا كان لا FromBaseType.

if(!field.FromBaseType)
{
Console.WriteLine("{0} - {1} - {2} - {3} - {4}",field.Title,field.InternalName,field.Hidden,field.CanBeDeleted,field.FieldTypeKind);
}

نصائح أخرى

في سسوم SPField.SourceId الخاصية تسمح بتحديد

إما مساحة الاسم التي تحدد حقلاً مضمنًا، أو إذا كان مخصص مجال, ، GUID الذي يحدد القائمة أو موقع الويب حيث تم إنشاؤه.

في CSOM SourceId لا يتم الكشف عن الممتلكات ل مجال كائن، ولكن يمكن استخراجه من SchemaXml كما هو موضح أدناه:

    private static Dictionary<string, string> ParseSchemaXml(string schemaXml)
    {
        var properties = new Dictionary<string, string>();
        var xdoc = XDocument.Parse(schemaXml);
        var attributes = xdoc.Descendants("Field").Attributes();
        foreach (var attr in attributes)
        {
          if(!properties.ContainsKey(attr.Name.LocalName))
              properties.Add(attr.Name.LocalName,attr.Value);
        }
        return properties;
    }


    //Usage
    var properties = ParseSchemaXml(field.SchemaXml);
    var sourceId = properties["SourceID"]; 

يوضح المثال التالي كيفية استرداد وطباعة الحقول المخصصة لقائمة:

    public static void PrintCustomFields(string url, string listTitle)
    {
        const string fieldBuiltInNS = "http://schemas.microsoft.com/sharepoint/v3";
        using (var context = new ClientContext(url))
        {
            //context.Credentials = credentials;
            var web = context.Web;
            var list = web.Lists.GetByTitle(listTitle);
            web.Context.Load(list, l => l.Fields);
            web.Context.ExecuteQuery();


            foreach (var field in list.Fields)
            {
                var properties = ParseSchemaXml(field.SchemaXml);
                if (properties["SourceID"] != fieldBuiltInNS)
                {
                    Console.WriteLine("Field: {0}",field.InternalName);
                }

            }

        }
    }
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى sharepoint.stackexchange
scroll top