목록에서 사용자 정의 필드 만 가져 오는 방법은 무엇입니까?
-
10-12-2019 - |
문제
클라이언트 측 객체 모델로 작업하고 있습니다.콘솔 응용 프로그램에서는 사용자 정의 목록에서 모든 필드를 검색하고 있습니다.문제는 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"];