程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> SharePoint 2010客戶端對象模型異常處理

SharePoint 2010客戶端對象模型異常處理

編輯:關於.NET

本文中我們將討論在使用客戶端對象模型時,如何處理異常。將分別針對 .Net 托管客戶端和和ECMAScript進行解釋。

為了滿足對多個服務器請求進行響應的需要,依托於異常機制,在 SharePoint 2010中引入一個新類ExceptionHandlingScope。這個類包含了一些 方法,用來把代碼包裝在一個范圍內,來對 ClientContext實例中的批處理命令 中發生的異常進行處理。

讓我們看一個例子。該例子會查詢一個名為NonExistentList的列表,並更新 該列表的描述屬性。 當第一次執行此代碼,並假設該列表不存在,將會在調用 ExecuteQuery時拋出一個異常。這個異常會被捕獲,並其接下來會在catch塊中 創建該列表。

.Net 對象模型

以下是在控制台應用程序中的實現:

01 public static void exceptionExample()
02 {
03     ClientContext ctx = new ClientContext ("http://sp2010u/it");
04     ExceptionHandlingScope exScope = new  ExceptionHandlingScope(ctx);
05     using (exScope.StartScope())
06     {
07         using (exScope.StartTry())
08         {
09             //獲取列表 NonExistingList 並更新其描 述
10             List myList =  ctx.Web.Lists.GetByTitle("NonExistingList");
11             myList.Description = "這是一段新的描述 ";
12             myList.Update();
13         }
14         using (exScope.StartCatch())
15         {
16             // 新建一個名為 NonExistingList的列表
17             ListCreationInformation  listCreationInfo = new ListCreationInformation();
18             listCreationInfo.Title =  "NonExistingList";
19             listCreationInfo.Description = "在 catch塊中創建的";
20             listCreationInfo.TemplateType = (int) ListTemplateType.GenericList;
21             List oList = ctx.Web.Lists.Add (listCreationInfo);
22         }
23         using (exScope.StartFinally())
24         {
25             // 更新列表 NonExistingList的描述
26             List myList =  ctx.Web.Lists.GetByTitle("NonExistingList");
27             myList.Description = "這是一段在final 塊中創建出來的描述";
28             myList.Update();
29         }
30     }
31     ctx.ExecuteQuery();
32 }

整個客戶端代碼塊被包在一個ExceptionHandlingScope的StartScope方法內 ,該對象定義在客戶端代碼塊的頂部,放在所有客戶端對象操作之前。

然後,每個邏輯塊(比如獲取,創建和更新該列表的代碼塊)分別被包裝在 其各自的操作范圍中(StartTry,StartCatch和 StartFinally)。 只有在 StartTry代碼塊中發生一個例外時StartCatch塊才會被執行。StartFinally代碼 塊將永遠會被執行,不論是否發生異常。

運行後在SharePoint中可以看到如下結果:

在ECMAScript中使用

下面的代碼可以放在一個HTML表單Web部件中運行(直接貼在WebPart屬性- >源編輯器中):

01 <script type="text/ecmascript"  language="ecmascript">
02     var targetWeb;
03     var clientContext;
04     function exceptionExample()
05    {
06     clientContext = new SP.ClientContext.get_current ();
07     var exScope = new SP.ExceptionHandlingScope (clientContext);
08     var startScope = exScope.startScope();
09     var tryScope = exScope.startTry();
10     // 獲取NonExistingList列表並更新其描述
11     var myList = clientContext.get_web().get_lists ().getByTitle("NonExistingList");
12     myList.set_description("這是一段新描述");
13     myList.update();
14     tryScope.dispose();
15
16     var catchScope = exScope.startCatch();
17     //新建一個NonExistingList列表
18     var listCreationInfo = new  SP.ListCreationInformation();
19     listCreationInfo.set_title("NonExistingList");
20     listCreationInfo.set_description("在catch塊中創建的描 述");
21     listCreationInfo.set_templateType (SP.ListTemplateType.genericList);
22     clientContext.get_web().get_lists().add (listCreationInfo);
23     catchScope.dispose();
24
25     var finallyScope = exScope.startFinally();
26     // 更新列表NonExistingList的描述
27     var myList = clientContext.get_web().get_lists ().getByTitle("NonExistingList");
28     myList.set_description("這是一段在final塊中創建的描 述");
29     myList.update();
30     finallyScope.dispose();
31     startScope.dispose();
32      
33     this.clientContext.executeQueryAsync (Function.createDelegate(this,  this.onSucceededCallback),Function.createDelegate(this,  this.onFailedCallback));
34     }
35     function onSucceededCallback(sender, args)
36     {
37         alert("完成!");
38     }
39
40     function onFailedCallback(sender, args) {
41         alert('請求失敗. \nError: ' +  args.get_message() + '\nStackTrace: ' + args.get_stackTrace ());
42     }
43 </script>
44 <input id="Button1" type="button" value="運行代碼"  onclick="exceptionExample()" />

ExceptionHandlingScope在JavaScript中的用法幾乎和在C#中相同。因為 JavaScript中沒有使用構造器,所以您必須手工調用scope.dispose來銷毀范圍 對象。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved