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

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

关于javascript - 如何使用 JavaScript 仅打印 Sharepoint 中创建的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29714776/

相关文章:

javascript - jQuery slider /切换器/选项卡

javascript - 访问位于 SharePoint 文档库中的多个文件夹并在网页上显示其内容

sharepoint - 通过 ADFS 的 SSO for Office 365 (SharePoint Online)

javascript - Javascript 中的特定正则表达式正面外观(周围|前方|背后)

javascript - 将原型(prototype)函数存储在变量中

javascript - Twitter Typeahead 最小长度 = 0 等效?

javascript - indexedDB 最高键路径

sharepoint - PowerShell 中的泛型

c# - 递归 SharePoint 事件处理程序

C# VSTO 展望 2007/Sharepoint : AddIn wont save contact item