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

时间:2015-04-18 08:22:38

标签: 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());
   }

    }

但是这段代码会打印所有预定义字段以及我的字段。我不想要预定义的字段,如修改,创建等等。我只想改变编码。用户界面更改不在我手中。

1 个答案:

答案 0 :(得分:1)

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

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

注意:SP.Field object 公开SourceId属性,但可以从SP.Field.schemaXml property中提取,如下所示:

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