如何使用JavaScript仅打印Sharepoint中创建的列



我只需要打印我创建的列。

function retrieveFieldsOfListView(listTitle,viewName){
var context = new SP.ClientContext.get_current();
var web = context.get_web();
var list = web.get_lists().getByTitle(listTitle);
var listFields = list.get_fields();
context.load(listFields);
context.executeQueryAsync(printFieldNames,onError);

function printFieldNames() {
var e = listFields.getEnumerator();
while (e.moveNext()) {
var fieldName = e.get_title();
console.log(fieldName);
}
}
function onError(sender,args)
{
console.log(args.get_message());
}
}

但这段代码正在打印所有预定义的字段以及我的字段。我不想要像"修改、创建等"这样的预定义字段。我只想更改编码。UI更改不取决于我。

如何确定字段是系统还是用户定义

确定字段是系统还是用户定义的最可靠方法可能是利用字段的SourceId属性。对于系统字段,其值设置为http://schemas.microsoft.com/sharepoint/v3

注意:SP。字段对象不暴露SourceId属性,但可以从SP.Field.schemaXml属性中提取,如下所示:

function getListFields(listTitle,success,error){
var context = SP.ClientContext.get_current();
var web = context.get_web();
var list = web.get_lists().getByTitle(listTitle);
var fields = list.get_fields();
context.load(fields);
context.executeQueryAsync(
function(){
success(fields);
},
error);
}


//Usage
getListFields('Pages',
function(fields) {
//get only user defined fields
var userDefinedFields = fields.get_data().filter(function(f){
var schema = f.get_schemaXml();
if (schema.indexOf('SourceID="http://schemas.microsoft.com/sharepoint/v3"') === -1){
return f;
}
});
//print user defined fields title
userDefinedFields.forEach(function(f){
console.log(f.get_title()); 
});
},
function(sender,args)
{
console.log(args.get_message());
});

就像所说的SourceId属性不可用于Field对象一样,下面的示例演示了获取字段属性的不同方法

function getListFields(listTitle,success,error){
var context = SP.ClientContext.get_current();
var web = context.get_web();
var list = web.get_lists().getByTitle(listTitle);
var fields = list.get_fields();
context.load(fields,'Include(SchemaXml)');
context.executeQueryAsync(
function(){
var result = [];
fields.get_data().forEach(function(f){
var schema = f.get_schemaXml(); 
result.push(schemaXml2Json(schema));
});    
success(result);
},
error);
}

function schemaXml2Json(schemaXml)
{ 
var jsonObject = {};
var schemaXmlDoc = $.parseXML(schemaXml);
$(schemaXmlDoc).find('Field').each(function() {
$.each(this.attributes, function(i, attr){
jsonObject[attr.name] = attr.value;
});
});
return jsonObject;
}

然后您可以使用SourceId属性:

getListFields('Pages',
function(fields) {
//get only user defined fields
var userDefinedFields = fields.filter(function(f){
if (f.SourceID !== "http://schemas.microsoft.com/sharepoint/v3"){
return f;
}
});
//print user defined fields title
userDefinedFields.forEach(function(f){
console.log(f.DisplayName); 
});
},
function(sender,args)
{
console.log(args.get_message());
});

最新更新