2016-01-19 82 views
0

我試圖弄清楚如何獲取用於特定頁面的頁面佈局,但是沒有使用vail。如何從SharePoint Online中的項目獲取頁面佈局

我使用的代碼是:

public void ItemAddedHandler(ClientContext clientContext, Guid listId, int listItemId) { 

    var web = clientContext.Web; 

    List list = clientContext.Web.Lists.GetById(listId); 
    ListItem item = list.GetItemById(listItemId); 
    clientContext.Load(item, i => i["PublishingPageLayout"]); 

    // item["PublishingPageLayout"] should contain the Page Layout used but is empty. 
} 

什麼我錯在這裏做什麼?

+0

我已經做了一個測試,並檢查「PublishingPageLayout」屬性上的刪除也,然後我可以得到文件的頁面佈局。奇怪。似乎佈局沒有完全設置項目添加(我正在使用事件接收器觸發創建該文件中的代碼) –

回答

0

在嘗試訪問項目屬性之前,請確保您在clientContext對象上致電ExecuteQuery/ExecuteQueryAsync

當與客戶端對象模型,你執行了上述兩種方法實際上是建築查詢什麼檢索之前做的,但要等到執行查詢本身,什麼都不會被髮送一切工作/接收/從SharePoint 。

+0

實際的錯誤不是我忘記了ExecuteQuery,因爲即使在添加ExecuteQuery後我什麼都沒有。在執行ItemUpdatedHandler之前,PublishingPageLayout的屬性不適用。所以當實際添加文檔時,該屬性不存在,但在第二次更新時,UpdateItem上的事件接收器已使用pagelayout更新。 –

0

正確的代碼如下。我必須檢查updateitem事件處理程序中的pagelayout屬性,而不是在itemadded處理程序中。

public void ItemUpdatedHandler(ClientContext clientContext, Guid listId, int listItemId, ContextInfo logContext) { 
    ListItem item = list.GetItemById(listItemId); 
    clientContext.Load(item, i => i["PublishingPageLayout"], i => i.DisplayName); 
    clientContext.ExecuteQuery(); 
    FieldUrlValue fuv = (FieldUrlValue)item["PublishingPageLayout"]; 
} 
相關問題