BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

役に立つリンク集

地域を選ぶ

InfoQ ホームページ アーティクル SharePoint Webサービスを始めましょう

SharePoint Webサービスを始めましょう

SharePointはWebサービス一式を通じて互換性と遠隔オペレーションをサポートしますが、ここでいうSharePointはWSS 3.0(Windows SharePoint Services)とMOSS 2007(Microsoft Office SharePoint Server)のことです。プログラムに基づいてSharePointにアクセスするには、WebDAVに加えて、オブジェクトモデルやWebサービス、HTTP上のRPCなど、多数のやり方があり、アプリケーションのニーズに応じて、それぞれにメリットと使うべき場所があります。SharePoint RPCプロトコルは有用かつ強力になり得ますし、特にコンテンツの追加となると、確かに威力を発揮します。オブジェクトモデルはWebサービスに比べてずっと頑丈で機能が豊富ですが、遠隔オペレーションに対するサポートがないため、オブジェクトモデルを活用するには、コードをSharePointサーバー上で実行しなければならず、活用するには.NETコードを自分で書かねばなりません。管理用のスクリプトや、クライアントマシン上で動作中のアプリケーションや企業内の非SharePointアプリケーションのタスクなどでSharePointコンテンツを操作する必要があるなど、SharePointのデータを遠隔で扱う理由は多種多様にあります。SharePoint Webサービスはオブジェクトモデル上に構築され、オブジェクトモデルで利用可能な機能のサブセットを公開しており、遠隔オペレーションが可能で、Webサービスの消費をサポートするいかなる言語およびプラットフォームの使用も可能にします。SharePointと一緒に出荷されるWebサービスは、ほとんどのタスクをこなすには十分ですが、Webサービスでは表面化していないオブジェクトモデルのオペレーションが必要となる可能性もあり、その場合はカスタムのWebサービス実装によりWebサービスを拡張する必要があるでしょう。この記事では、WSS3とMOSS 2007に難しい設定など一切せず、すぐに利用可能なWeb サービスと、Javaと.NETからそのWebサービスを消費する方法に目を向けます。

Webサービスアーキテクチャの概要 

SSとMOSSの相違を詳細に説明している非常に優れた記事が多数存在するため、Webサービスとの関連で必要とされる場合を除き、相違には触れないつもりです。MOSS 2007はWSS 3.0上に構築されており、そのWSS 3.0もASP.NET 2.0上に構築され、IIS(Internet Information Server)で動作するということを覚えておきましょう。IISとASP.NETを確実に理解することが重要であり、SharePointの取り扱いと理解はその遥か先に位置します。これから検討するSharePoint Webサービスの大多数がWSS 3.0に含まれていますが、進化版のエンタープライズ検索機能など、MOSS 2007同梱の追加機能を活用可能にするため、MOSS 2007に入っている付加的なWebサービスもいくつかあります。

SharePoint WebサービスはASP.NET Web Services(ASMX)に実装されており、こうしたWebサービスの大部分について、その物理的ファイルは「Microsoft Shared」ディレクトリ内の「web server extensions\12\ISAPI」の項目にあり、この項目は通常、「C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\ISAPI」にあります。Central Administrationツール用のadmin WebサービスはADMISAPIフォルダにあり、このフォルダ向けにcentral administrationコンソールには「_vti_adm」という名称の仮想ディレクトリが入っています。SharePointサイトが作成されると、その中には「_vti_bin」という名称の仮想のディレクトリが入り、このロケーションを示すようになっています。IISにはサブwebのためのアプリケーションや仮想ディレクトリはありませんが、SharePointメタデータとHttpModulesを介して_vti_bin仮想のディレクトリへのマッピングは含まれています。



各サービスについて*.wsdl.aspx ファイルがあり、このファイルはサービスWSDL(Web サービス記述言語)を生成し、*.disco.aspxがサービス発見の実装と実際の*.asmxエンドポイント・ファイルを提供しますが、ファイルの大部分には、SharePointアセンブリを参照するページ命令と、サービス向けの実際の実装を含んだ型が入っているだけです。

サービスファイルの型 説明
*.wsdl.aspx (search.wsdl.aspx) SharePointでWSDL(Web サービス記述言語)を生成するファイル
*.disco.aspx (seach.disco.aspx) 発見の実装を提供するファイル
*.asmx (search.asmx) Webサービスのエンドポイントで、その大部分には、SharePointアセンブリを参照するページ命令とサービス向けの実際の実装を含んだ型が入っている

設定せずにすぐ使えるサービス

SharePointにはすぐに使える実装されたWebサービスが多数あり、管理タスクからリスト化されたデータの操作等々、一般的なタスクや基本的なタスクの大部分に対応します。以下はSharePoint Webサービスの一覧ですが、参考までに機能のあらましをつけました。こうしたシンプルな拡張版リストがあれば、利用可能な全サービスとメソッドが簡単に分かり、Webサービス操作時に役立ちます。

サービス 管理
(_vti_adm/Admin.asmx) サイトの作成/削除や、デプロイメントで使用された言語を検索する管理メソッド
  • CreateSite
  • DeleteSite
  • GetLanguage
  • RefreshConfigCache
Alerts (Alerts.asmx) SharePointリストアイテムのアラートを操作するメソッド
  • DeleteAlerts
  • GetAlerts
Authentication (Authentication.asmx) フォーム・ベースの認証を使用するサイト向けにユーザー認証を提供するクライアントプロキシ
  • Login (認証に使用)
  • Mode (現サイトの認証モードを返す)
Copy (Copy.asmx) サイト間やサイト内でファイルをコピーするメソッド
  • CopyIntoItems (サーバー上のロケーションへのバイト配列としてドキュメントをコピー)
  • CopyIntoItemsLocal (同一サーバーのあるロケーションから別のロケーションへドキュメントをコピー)
  • GetItem (CopyIntoItemsメソッドに渡すことのできるドキュメントのバイト配列を作成)
Document Workspace (Dws.asmx) ドキュメント・ワークスペースのサイトおよびデータを管理するメソッド
  • CanCreateDwsUrl
  • CreateDws
  • CreateFolder
  • FindDwsDoc
  • GetDwsData
  • GetDwsMetaData
  • RemoveDwsUser
  • RenameDws
  • UpdateDwsData
Forms (Forms.asmx) リストのコンテンツを操作する際、ユーザーインターフェースで使用するフォームを返すためのメソッド
  • GetForm
  • GetFormCollection
Imaging (Imaging.asmx) 画像ライブラリを作成、管理するメソッド
  • CheckSubwebAndList
  • CreateNewFolder
  • Delete
  • Download
  • Edit
  • GetItemsByIds
  • GetItemsXMLData
  • GetListItems
  • ListPictureLibrary
  • Rename
  • Upload
List Data Retrieval (DspSts.asmx) SharePoint内でサイトやリストに対してクエリを実行
  • Query (SharePointリストおよびサイトに対してクエリを実行)
Lists (Lists.asmx) リストならびにリストデータを処理するためのメソッド
  • AddAttachment
  • AddDiscussionBoardItem
  • AddList
  • AddListFromFeature
  • ApplyContentTypeToList
  • DeleteAttachment
  • DeleteContentType
  • DeleteContentTypeXmlDocument
  • DeleteList
  • GetAttachmentCollection
  • GetList
  • GetListAndView
  • GetListCollection
  • GetListContentType
  • GetListContentTypes
  • GetListItemChanges
  • GetListItemChangesSinceToken
  • GetListItems
  • GetVersionCollection
  • UndoCheckout
  • UpdateContentType
  • UpdateContentTypesXmlDocument
  • UpdateContentTypeXmlDocument
  • UpdateList
  • UpdateListItems
Meetings(Meetings.asmx) 会議ワークスペースのサイトの作成と管理
  • AddMeeting
  • AddMeetingFromICal
  • CreateWorkspace
  • DeleteWorkspace
  • GetMeetingInformation
  • GetMeetingWorkspaces
  • RemoveMeeting
  • RestoreMeeting
  • SetAttendeeResponse
  • SetWorkspaceTitle
  • UpdateMeeting
  • UpdateMeetingFromICal
People(People.asmx) プリンシパルの決定と発見
  • ResolvePrincipals
Permissions (Permissions.asmx) サイトあるいはリストの許可を操作するためのメソッド
  • AddPermission
  • AddPermissionCollection
  • GetPermissionCollection
  • RemovePermission
  • RemovePermissionCollection
  • UpdatePermission
Directory Management(sharepointemailws.asmx) アクティブディレクトリの電子メール配布グループおよびそのメンバーを管理するためのメソッド
  • ChangeContactsMembershipInDistributionGroup
  • ChangeUsersmembershipInDistributionGroup
  • CreateContact
  • CreateDistributionGroup
  • DeleteContact
  • DeleteDistributionGroup
  • GetJobStatus
  • ModifyContact
  • ModifyDistributionGroup
  • RenameDistributionGroup
Site Data (SiteData.asmx) サイトあるいはリストからメタデータやリストデータを返すメソッド
  • EnumerateFolder
  • GetAttachments
  • GetChanges
  • GetContent
  • GetList
  • GetListCollection
  • GetListItems
  • GetSite
  • GetSiteAndWeb
  • GetSiteUrl
  • GetURLSegments
  • GetWeb
Sites(Sites.asmx) コレクションもしくはサイトテンプレートに関する情報を返すためのメソッド
  • ExportWeb
  • GetSiteTemplates
  • GetUpdatedFormDigest
  • ImportWeb
Search(spsearch.asmx) 検索サービスを介して検索するためのメソッド
  • Query
  • QueryEx
  • Registration
  • Status
Users & Groups(usergroup.asmx) ユーザーの役割定義およびグループを操作するためのメソッド
  • AddGroup
  • AddGroupToRole
  • AddRole
  • AddRoleDef
  • AddUserCollectionToGroup
  • AddUserCollectionToRole
  • AddUserToGroup
  • AddUserToRole
  • GetAllUserCollectionFromWeb
  • GetGroupCollection
  • GetList
  • GetListAndView
  • GetListCollection
  • GetGroupCollectionFromRole
  • GetGroupCollectionFromSite
  • GetGroupCollectionFromUser
  • GetGroupCollectionFromWeb
  • GetGroupInfo
  • GetRoleCollection
  • GetRoleCollectionFromGroup
  • GetRoleCollectionFromUser
  • GetRoleCollectionFromWeb
  • GetRoleInfo
  • GetRolesAndPermissionsForCurrentUser
  • GetRolesAndPermissionsForSite
  • GetUserCollection
  • GetUserCollectionFromGroup
  • GetUserCollectionFromRole
  • GetUserCollectionFromSite
  • GetUserCollectionFromWeb
  • GetUserInfo
  • GetUserLoginFromEmail
  • RemoveGroup
  • RemoveGroupFromRole
  • RemoveRole
  • RemoveUserCollectionFromGroup
  • RemoveUserCollectionFromRole
  • RemoveUserCollectionFromSite
  • RemoveUserFromGroup
  • RemoveUserFromRole
  • RemoveUserFromSite
  • RemoveUserFromWeb
  • UpdateGroupInfo
  • UpdateRoleDefInfo
  • UpdateRoleInfo
  • UpdateUserInfo
Versions (Versions.asmx) ファイルのバージョンを操作するためのメソッド
  • DeleteAllVersions
  • DeleteVersion
  • GetVersions
  • RestoreVersion
Views(Views.asmx) リストのビューを操作するためのメソッド
  • AddView
  • DeleteView
  • GetViewCollection
  • GetViewHtml
  • UpdateView
  • UpdateViewHtml
  • UpdateViewHtml2
Web Part Pages(WebPartPages.asmx) Webパーツページを操作するためのメソッド
  • AddWebPart
  • AddWebPartToZone
  • AssociateWorkflowMarkup
  • ConvertWebPartFormat
  • DeleteWebPart
  • ExecuteProxyUpdates
  • FetchLegalWorkflowActions
  • GetAssemblyMetaData
  • GetBindingResourceData
  • GetCustomControlList
  • GetDataFromDataSourceControl
  • GetFormCapabilityFromDataSourceControl
  • GetSafeAssemblyInfo
  • GetWebPart
  • GetWebPart2
  • GetWebPartCrossPageCompatibility
  • GetWebPartPage
  • GetWebPartPageConnectionInfo
  • GetWebPartPageDocument
  • GetWebPartProperties
  • GetWebPartProperties2
  • RemoveWorkflowAssociation
  • RenderWebPartForEdit
  • SaveWebPart
  • SaveWebPart2
  • ValidateWorkflowMarkupAndCreateSupportObjects
Webs(Webs.asmx) サイトおよびサブサイトを操作するためのメソッド
  • CreateContentType
  • CustomizeCss
  • DeleteContentType
  • GetActivatedFeatures
  • GetAllSubWebCollection
  • GetColumns
  • GetContentType
  • GetContentTypes
  • GetCustomizedPageStatus
  • GetListTemplates
  • GetWeb
  • GetWebCollection
  • RemoveContentTypeXmlDocument
  • RevertAllFileContentStreams
  • RevertCss
  • RevertFileContentStream
  • UpdateColumns
  • UpdateContentType
  • UpdateContentTypeXmlDocument
  • WebUrlFromPageUrl
  • MOSS Search (Search.asmx) MOSS(Microsoft Office SharePoint Server)Searchサービスを介して検索するためのメソッドで、マネージドの検索プロパティを取り出すメソッドも含まれます
    • GetSearchMetadata (マネージドのプロパティを検索)
    • Query
    • QueryEx
    • Registration
    • Status

    クエリサービスの消費


    SharePoint Web調WebSharePoint WebXML NodeXMLWeb使XMLXMLqueryresponse.xsd.NETxsd.exe使javaJAXB使

    : Web2MOSSsearch.asmxWSSspsearch.asmxMOSS spsearch.asmxMOSSWSS

    .NET使 


    .NETSharePoint WebWeb使XSDXMLXML使

    Visual Studio 2005XSD.exe


    Visual StudioXSD.exeXSD.NET使Visual StudioIDE
    1. Visual Studioの「Tools」メニューで「External Tools」ダイアログを開きます
    2. 「Add」をクリック
    3. 必要なプロパティを設定後、「OK」をクリック
    プロパティ
    Command(コマンド) XSD >> CSharp
    Title(タイトル) C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin\xsd.exe
    Arguments(引数) $(ItemPath) /c
    Initial Directory(初期ディレクトリ) $(ItemDir)
    Use Output Window(出力ウィンドウを使用) Checked

    選択するXSDファイルをダウンロードする


    使使XSD(zip)XSD

    XSD.NETXSDXSDWindows Forms.NETMicrosft.Search.Query.xsdXSDMicrosoft_Search_Query.cs

    Web


    WebWebsolution explorerreferencesAdd Web ReferenceWebhttp:///_vti_bin/spsearch.asmxURLGoSharePointSharePointWeb Reference NameWebSPSearchAdd Reference


    QueryServiceXSD使QueryXML


    QueryServiceQueryServiceQuery
    SPSearch.QueryService search = new SPSearch.QueryService();
    Microsoft_Query_Request request = new Microsoft_Query_Request();
    search.Query(request);

    Java使


    avaSharePoint WebXSDWebjavaSharePoint WebSharePoint WebDataSet使WebJava IDE.NETSDKIDE

    : J2SE 6.0 Update 3使

    Java SharePoint

    2(zip)JDK binxjc-build.batbuild-run.batwsspsample/Main.java

    Service WSDL


    SharePointWSDL2ADO.NET使WSDLSharePointWSDLJavaWSDL

    Search WSDL

    Windows SharePoint Services 3.0Internet ExplorerError! Hyperlink reference not valid. File|Save As...spsearch.wsdlMOSS 2007Error! Hyperlink reference not valid!使

    Search WSDL

    MOSS 2007GetSearchMetaDataQueryExADO.NETADO.NETWSDL使WSDLJAXB wsimportJava JDK使WSDLWSDLs:schemaelementany
    <s:sequence>
    <s:element ref="s:schema"/>
    <s:any/>
    </s:sequence>


    <s:sequence>
    <s:any minOccurs="0" maxOccurs="unbounded"/>
    </s:sequence>

    WSDL

    WSDLJAXB wsimport.exe使
    wsimport -p wsspsample.webref.spsearch -keep spsearch.wsdl
    wsimport -p wsspsample.webref.search -keep search.wsdl

    調-keep使javaWSDLwebref\search\QueryService.javaURLURLWSDL使
    url = new URL("file:search.wsdl");

    RequestResponse


    RequestResponse4Microsoft.SearchXSDJAXB xjc.exe使
    xjc -npa -p wsspsample.xom.query -d . Microsoft.Search.Query.xsd
    xjc -npa -p wsspsample.xom.response -d . Microsoft.Search.Response.xsd

    使


    QueryServiceQueryQueryQueryResponse使QueryServiceWSDLQueryServicegetQueryServiceSoap使QueryServiceSoapqspQueryServiceSoap使getQueryServiceSoapWSDLWSDLSharePointSubSite
    QueryService qs = new QueryService();
    QueryServiceSoap qsp = qs.getQueryServiceSoap();

    BindingProvider bp = (BindingProvider)qsp;
    //bp.getRequestContext().put(BindingProvider.USERNAME_PROPERTY, "Administrator");
    //bp.getRequestContext().put(BindingProvider.PASSWORD_PROPERTY, "pass@word1");
    bp.getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY,
    "http://barbie/_vti_bin/spsearch.asmx");


    public static String SerializeQuery(QueryPacket qp)
    {
    try
    {
    JAXBContext jc =JAXBContext.newInstance("wsspsample.xom.query");
    Marshaller ma = jc.createMarshaller();
    ma.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT,Boolean.TRUE);
    ByteArrayOutputStream os = new ByteArrayOutputStream();
    ma.marshal(qp, os);
    return os.toString();
    }
    catch(JAXBException ex)
    {
    return "";
    }
    }
    public static ResponsePacket DeserializeResponse(String s)
    {
    try
    {
    JAXBContext jc = JAXBContext.newInstance("wsspsample.xom.response");
    Unmarshaller um = jc.createUnmarshaller();
    StreamSource source = new StreamSource(new StringReader(s));
    return (ResponsePacket)um.unmarshal(source);
    }
    catch (JAXBException ex)
    {
    return new ResponsePacket();
    }
    }

    QueryPacket
    // Create a Search Query Packet Object
    QueryPacket qp = new QueryPacket();
    QueryType qt = new QueryType();
    ContextType ct = new ContextType();
    QueryTextType ctt = new QueryTextType();

    ct.setQueryText(ctt);
    qt.setContext(ct);
    qp.setQuery(qt);

    // Set search values
    ctt.setValue("sharepoint");
    ctt.setType("STRING"); //This is the default - not necessary
    ctt.setLanguage("en-us"); //This is the default - not necessary

    // Call the web service query
    String sResponse = qsp.query(SerializeQuery(qp));

    // Deserialize the response
    ResponsePacket resp = DeserializeResponse(sResponse);


    WebSharePointSharePointMain.java使credentials


    Windows SharePoint Services 3.0 Web Services(source)

    http://www.infoq.com/articles/swanson-moss-web-services
    Article200826 
     
     

    この記事に星をつける

    おすすめ度
    スタイル

    BT