2015-01-21 122 views
0

我需要使用REST API在項目中顯示SharePoint列表的創建者。如何使用REST API獲取SharePoint列表屬性'創建者'

當我使用

/_api/web/lists/getbytitle('Employee') 

我得到迴應,但,我不找創建現場。 我如何知道誰創建了該列表。 這是我的迴應:

"AllowContentTypes": true, 
"BaseTemplate": 100, 
"BaseType": 0, 
"ContentTypesEnabled": false, 
"CrawlNonDefaultViews": false, 
"Created": "2014-12-03T06:58:18Z", 
"DefaultContentApprovalWorkflowId": "00000000-0000-0000-0000-000000000000", 
"Description": "", 
"Direction": "none", 
"DocumentTemplateUrl": null, 
"DraftVersionVisibility": 0, 
"EnableAttachments": true, 
"EnableFolderCreation": false, 
"EnableMinorVersions": false, 
"EnableModeration": false, 
"EnableVersioning": false, 
"EntityTypeName": "EmployeeList", 
"ForceCheckout": false, 
"HasExternalDataSource": false, 
"Hidden": false, 
"Id": "13cdc8f4-7fed-42eb-9a38-08c30eec6a87", 
"ImageUrl": "/_layouts/15/images/itgen.png?rev=38", 
"IrmEnabled": false, 
"IrmExpire": false, 
"IrmReject": false, 
"IsApplicationList": false, 
"IsCatalog": false, 
"IsPrivate": false, 
"ItemCount": 2, 
"LastItemDeletedDate": "2014-12-03T06:58:18Z", 
"LastItemModifiedDate": "2015-01-21T05:54:31Z", 
"ListItemEntityTypeFullName": "SP.Data.EmployeeListItem", 
"MajorVersionLimit": 0, 
"MajorWithMinorVersionsLimit": 0, 
"MultipleDataList": false, 
"NoCrawl": false, 
"ParentWebUrl": "/", 
"ParserDisabled": false, 
"ServerTemplateCanCreateFolders": true, 
"TemplateFeatureId": "00bfea71-de22-43b2-a848-c05709900100", 
"Title": "Employee" 

謝謝。

回答

3

在服務器端API(SSOM)和客戶端API(REST或CSOM)的對象通常不暴露所述相同的屬性集。列表資源就是這種情況,其中Author屬性在CSOM和REST中不可用,但在SSOM中可用。

您可以考慮採用以下方法通過REST檢索List資源的Author屬性。這個想法是從列表架構得到這個屬性,如下面所示(*):

  • 第一步是檢索列表架構: /_api/web/lists/getbytitle('list title')?$select=schemaXml
  • 然後,你可以從SchemaXml財產中提取的作者ID

(*)名單SchemaXml屬性存儲Author ID財產

function getListAuthor(webUrl,listTitle) 
{ 
    var endpointUrl = webUrl + "/_api/web/lists/getbytitle('" + listTitle + "')?$select=schemaXml"; 
    return executeRequest(endpointUrl,'GET').then(function(data){ 
      var listProperties = schemaXml2Json(data.d.SchemaXml); 
      return parseInt(listProperties.Author); 
      }); 
} 


//Usage: Retrieve List Author Id 
getListAuthor(_spPageContextInfo.webAbsoluteUrl,'Contacts') 
.done(function(authorId){ 
    console.log('List Author Id: ' + authorId); 

}); 

如果列表作者Id屬性是不夠的,你想獲取作者的用戶,那麼你可以利用下面的例子:

var webUrl = _spPageContextInfo.webAbsoluteUrl; 
getListAuthor(webUrl,'Contacts') 
.then(function(authorId){ 
    getSiteUser(webUrl,authorId) 
    .done(function(data){ 
     var listAuthor = data.d; 
     console.log(listAuthor); 
    });  
}); 

其中

function executeRequest(url,method,headers,payload) 
{ 
    if (typeof headers == 'undefined'){ 
     headers = {}; 
    } 
    headers["Accept"] = "application/json;odata=verbose"; 
    if(method == "POST") { 
     headers["X-RequestDigest"] = $("#__REQUESTDIGEST").val(); 
    } 

    var ajaxOptions = 
    {  
     url: url, 
     type: method, 
     contentType: "application/json;odata=verbose", 
     headers: headers 
    }; 
    if(method == "POST") { 
     ajaxOptions.data = JSON.stringify(payload); 
    } 

    return $.ajax(ajaxOptions); 
} 


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


function getSiteUser(webUrl,userId){ 
    var endpointUrl = webUrl + "/_api/web/siteUsers/getById(" + userId + ")"; 
    return executeRequest(endpointUrl,'GET'); 
} 

按照this post瞭解更多詳情。

+0

是這樣我就可以通過REST 2調用獲得作者(從schema獲取userid,然後通過另一個cal獲取用戶名)。但我需要與作者一起顯示網站中的所有列表。 現在想象一下我可能需要撥打的電話數量:( – Vikas 2015-01-22 04:34:03

+0

)由於這個問題是關於獲取Author屬性而沒有其他,所以我建議你發佈另一個問題我很確定我們可以找到一種方法使用作者屬性加載有效列表 – 2015-01-24 09:01:41

相關問題