문제

클라이언트 측 객체 모델로 작업하고 있습니다.콘솔 응용 프로그램에서는 사용자 정의 목록에서 모든 필드를 검색하고 있습니다.문제는 clientContext가 포함되지 않으려는 내부 필드의 무리를 가져 오는 것입니다.또한 일부 필드는 두 번 이상 나타납니다.

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);
}
.

다른 팁

ssom spfield.sourceID 속성을 사용하면

내장 필드를 정의하는 네임 스페이스 또는 사용자 정의 필드 , 그 목록이나 웹 사이트를 식별하는 GUID 생성 된.

CSOM SourceId 속성은 필드 객체에 대해 노출되지 않습니다.그러나 ScheMaxML에서 추출 할 수 있습니다./ a> 아래에서 설명한 것처럼 :

    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