簡體   English   中英

Sharepoint 2013 Javascript-獲取列表字段

[英]Sharepoint 2013 Javascript - Get List Fields

我正在使用SharePoint 2013開發和JavaScript進行雙重學習。

請參考以下內容。

function GetListFields(listname, viewname, ResultCallBackFunction)
{
  var clientContext = new SP.ClientContext.get_current();
  var web = clientContext.get_web();
  var list = web.get_lists().getByTitle(listname);
  if (viewname == "")
  {
    var view = list.get_views().getByTitle(viewname);
    var listFields = view.get_viewFields(); 
  }
  else
  {
    this.listFields = list.get_fields().getByInternalNameOrTitle("Title");  
  } 
  clientContext.load(this.listFields);
  clientContext.executeQueryAsync(onListFieldsQuerySucceeded, onListFieldsQueryFailed);


  function onListFieldsQuerySucceeded()
  {
    console.log(listFields.get_fields().getByInternalNameOrTitle("Title").get_internalName());

    var fldArray = new Array();
    var fieldEnumerator = listFields.getEnumerator();
    while (fieldEnumerator.moveNext())
    {
      var oField = fieldEnumerator.get_current();
      fldArray.push(oField);
    }

    ResultCallBackFunction(fldArray);
  }

  function onListFieldsQueryFailed()
  {
    alert("Something went wrong. The End is Nigh.");
  }
}

目的是調用GetListFields以返回具有列表字段名的數組。 這會在“ console.log ....”行中返回錯誤“無法獲取未定義或空引用的屬性'get_fields'”。 請注意,這是為了調試。

如果我更改函數GetListFields的代碼,如下所示:

var clientContext = new SP.ClientContext.get_current();
var web = clientContext.get_web();
var list = web.get_lists().getByTitle(listname);
if (viewname == "")
    viewname = "All Items";
var view = list.get_views().getByTitle(viewname);
this.listFields = view.get_viewFields(); 

我確實得到了一個結果,但是其中包含一個名為“ LinkTitle”的字段,該字段在我的列表中沒有,因為我已將其重命名。 我想念什么?

除此之外,使用時出現錯誤

var listFields = ...

通過做固定

this.listFields = ...

但不了解區別。

感謝您的幫助或指點。

我花了一些時間在Sharepoint 2013環境中測試您的代碼。

我進行了一些更改,現在可以使用了。

您可以在下面看到生成的腳本。

這是有關結果數組中字段名稱的一些重要信息。

Sharepoint返回的視圖中的字段名稱是內部名稱,而不是字段標題。

這就是為什么獲得LinkTitle而不是字段的真實標題的原因。

當您在Sharepoint界面中創建字段時,Sharepoint會為該字段創建一個標題以及一個基於標題的內部名稱。

例如,如果我創建一個名為“我的測試字段”的字段,Sharepoint會說該字段的標題為“我的測試字段”,內部名稱為“ my_x0020_test_x0020_field”。

<script>
function GetListFields(listname, viewname, ResultCallBackFunction)
{
  var clientContext = new SP.ClientContext.get_current();
  var web = clientContext.get_web();
  var list = web.get_lists().getByTitle(listname);
  var listFields;
  var view;
  var defaultViewName = 'All Items';
  if (viewname === "")
  {
    viewname = defaultViewName;
  }
  view = list.get_views().getByTitle(viewname);
  listFields = view.get_viewFields();

  clientContext.load(listFields);
  clientContext.executeQueryAsync(onListFieldsQuerySucceeded, onListFieldsQueryFailed);

  function onListFieldsQuerySucceeded()
  {
    var fldArray = new Array();
    var fieldEnumerator = listFields.getEnumerator();
    while (fieldEnumerator.moveNext())
    {
      var oField = fieldEnumerator.get_current();
      fldArray.push(oField);
    }

    ResultCallBackFunction(fldArray);
  }

  function onListFieldsQueryFailed()
  {
    alert("Something went wrong. The End is Nigh.");
  }
}

function MyCallBack(fieldArray) {
  for (var x=0;x<fieldArray.length;x++) {
    console.log(fieldArray[x]);
  }
}
</script>
<a id="callGetListFields" href="#" onclick="GetListFields('MyListName','MyViewName', MyCallBack);">Call function GetListFields</a>

希望對您有所幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM