Spreadsheet Launcher コントロールを使用して連絡先をインポートする

最終更新日: 2010年10月19日

適用対象: SharePoint Foundation 2010

このコードの例では、SpreadsheetLauncher コントロールを使用してアドレス帳を開き、選択した連絡先を Microsoft SharePoint Foundation に基づく Web サイトの連絡先リストにインポートします。ここでは、ImportFromAddressBook 関数を呼び出すリンク コマンドまたはボタン コマンドが存在することを想定しています。

<!--Create an AddrBookWrapper object to open the address book and return all information for each contact selected.--> 

<SCRIPT language="VBScript"> 
   Function OpenABW() 
      Dim objAddrBkWrap 
      Dim objContacts 
      Dim objABWOp 

      OpenABW = "" 

      On Error Resume Next 

      Set objAddrBkWrap = CreateObject("MsSvAbw.AddrBookWrapper") 

      If IsObject(objAddrBkWrap) Then 
         objABWOp = objAddrBkWrap.AddressBook(, 1, , , , objContacts, , , True) 

         If objABWOp <> 0 then 
            OpenABW = "" 
         Else 
            OpenABW = ProcessABWCollection(objContacts) 
         End If 

      End If 

      On Error GoTo 0 
   End Function 

<!--Create a SpreadsheetLauncher object to use for import of the data and ensure the object's presence.--> 

   Function EnsureImport() 
      Dim objEnsureImport 

      EnsureImport = 0 

      On Error Resume Next 

      Set objEnsureImport = CreateObject("SharePoint.SpreadsheetLauncher.1")
      If IsObject(objEnsureImport) Then 
         objEnsureImport.EnsureImport() 
      End If 

      On Error GoTo 0 
   End Function 
</SCRIPT> 

<!--Return success or failure of importing contacts.--> 

<SCRIPT language="JavaScript"> 
   function DoImportFromAddressBook()         {
      return OpenABW();                       } 

<!--Iterate through the properties and fields arrays created 
per contact by the ProcessABWCollection function, and create 
the CAML for registering each field and value in the 
Office namespace.--> 
   function XMLSetVars(obj, rgstProps, rgstFields)         {
      var ist; 
      var st = ""; 

      for (ist = 0; ist < rgstProps.length; ist++)         {
         { st += "<SetVar Name=\"urn:schemas-microsoft-      
            com:office:office#" +
            rgstFields[ist] + "\">" + 
            STSHtmlEncode(obj[rgstProps[ist]]) + "</SetVar>";
                                                           }
      return st;                                           } 

<!--Using arrays, assign to each contact item the same properties and 
fields, and construct the CAML code for importing the items via the 
batch manager RPC.--> 
   function ProcessABWCollection(col)         { 

      var rgstProps = new Array("FirstName", "LastName", "SMTPAddress", 
         "CompanyName", "JobTitle", "HomeTelephoneNumber", 
         "BusinessTelephoneNumber", "MobileTelephoneNumber", 
         "BusinessFaxNumber", "BusinessAddressStreet", 
         "BusinessAddressCity", "BusinessAddressState", 
         "BusinessAddressPostalCode", "BusinessAddressCountry", 
         "Body"); 
      var rgstFields = new Array("FirstName", "Title", "Email", 
         "Company", "JobTitle", "HomePhone", "WorkPhone", "CellPhone", 
         "WorkFax", "WorkAddress", "WorkCity", "WorkState", "WorkZip", 
         "WorkCountry", "Comments"); 
      var st; 
      var e = new Enumerator(col); 

   if (e.atEnd()) 
      return ""; 

   st = "<" + "ows:Batch OnError=\"Return\">"; 

   for (; !e.atEnd(); e.moveNext())               { 
      st += "<Method ID=\"0\"><SetList Scope=\"Request\">
         </SetList><SetVar Name=\"Cmd\">Save</SetVar>
         <SetVar Name=\"ID\">New</SetVar>"; 
      st += XMLSetVars(e.item(), rgstProps, rgstFields); 
      st += "<SetVar Name=\"urn:schemas-microsoft-
         com:office:office#WebPage" 
         + "\">" + e.item()["WebPage"] + ", </SetVar>"; 
      st += "</Method>";
                                                   } 
      st += "</ows:Batch>"; 

      return st;                                   } 
</SCRIPT> 

<!--Initiate import of address book contacts and submit items to 
server.--> 

<SCRIPT language="JavaScript"> 
   function ImportFromAddressBook()        { 
      if (0 == EnsureImport())             { 

         st = DoImportFromAddressBook(); 

            if (st.length > 0)                     { 
               FormABWImport.NextUsing.value = window.parent.location; 
               FormABWImport.PostBody.value = st; 
               FormABWImport.submit();             } 
                                           } 
                                           } 
</SCRIPT> 

<!--Define a form for posting the imported data to the server.--> 

<FORM id=FormABWImport method="POST" 
      action="http://STSServer1/Sub1/_vti_bin/owssvr.dll?CS=109"> 
   <INPUT type=hidden name="NextUsing" value=""> 
   <INPUT type=hidden name="Cmd" value="DisplayPost"> 
   <INPUT type=hidden name="PostBody" value=""> 
</FORM> 

ImportFromAddressBook 関数では最初に EnsureImport 関数を呼び出して、データを連絡先リストにインポートするための SpreadsheetLauncher オブジェクトを作成することに注意してください。

OpenABW 関数では AddrBookWrapper オブジェクトが使用されています。このオブジェクトは、アドレス帳の参照と選択のユーザー インターフェイス (UI) の表示を容易にする ActiveX コントロールのインターフェイスです。このオブジェクトは、MAPISession オブジェクト用の、修正版 Microsoft Collaboration Data Objects (CDO) バージョン 1.2.1 の AddressBook メソッドを実装します。この例では、メソッドの 9 個のオプション パラメーターのうち 3 つが指定されています。nSelBoxes パラメーターでは、表示するリスト ボックスの数を指定します。この例では 1 つだけ指定されています。SelUsers1Contacts パラメーターでは、選択した連絡先ごとに取得される連絡先アイテムのコレクションを指定します。fFullInfo パラメーターには Boolean 値の true が含まれています。この値では、各連絡先についてのすべての情報が返されます。クライアント コンピューターに Microsoft Office がインストールされている場合、このコントロールは Msosvabw.dll ファイルで提供されます。