2016-10-27 23 views
0

私は、SharePoint 2013の開発とJavaScriptを使って二重に学習しています。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」という名前のフィールドが含まれていますこの。私は何が欠けていますか?

this.listFields = ... 

を行うことによって固定されているが違いを理解していない

var listFields = ... 

を使用した場合

は、上記に加えて、私はエラーを得ました。

ありがとうございました。

答えて

1

Sharepoint 2013環境でコードをテストするのに少し時間がかかりました。

私はいくつかの変更を加えましたが、現在は機能しています。

結果のスクリプトは次のとおりです。

結果の配列のフィールド名に関する重要な情報を次に示します。

Sharepointによって返されたビュー内のフィールドの名前は、内部名であり、フィールドのタイトルではありません。

これは、フィールドの実際のタイトルの代わりにLinkTitleを取得する理由です。

Sharepointインターフェイスでフィールドを作成すると、Sharepointはフィールドのタイトルとタイトルに基づいた内部名を作成します。

たとえば、 "my test field"という名前のフィールドを作成した場合、Sharepointはフィールドのタイトルが "my test field"で、内部名が "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> 

このヘルプが必要です。

+0

ありがとうございます。 申し訳ありません申し訳ありませんが、コメントを投票することはできませんが、サイトは次のように報告しています。 –

関連する問題