Skip to main content

Introducing IBM Lotus Quickr Web services

Derek Carr (dwcarr@us.ibm.com), Advisory Software Engineer, IBM
Derek Carr is an Advisory Software Engineer at IBM working with the Lotus Quickr team in Research Triangle Park, NC. You can reach Derek at dwcarr@us.ibm.com.
Andreas Goelzer (andreas_goelzer@us.ibm.com), Advisory Software Engineer, IBM
Andreas Goelzer is an Advisory Software Engineer at IBM working with the IBM Lotus Quickr team in Westford, MA. You can reach Andreas at andreas_goelzer@us.ibm.com.
Gregory Melahn (melahn@us.ibm.com), Architect and Senior Technical Staff Member, IBM 
Greg Melahn is an Architect and Senior Technical Staff Member in the Workplace, Portal, and Collaboration portfolio of IBM software. You can reach Greg at melahn@us.ibm.com.

Summary:  Use IBM Lotus Quickr Web services to perform basic document management operations. Develop a Lotus Quickr Connector that lets you navigate a set of Lotus Quickr document libraries and invoke certain actions on individual resources within a library.

Date:  31 Jan 2008 (Published 20 Nov 2007)
Level:  Intermediate
Activity:  5512 views

IBM Lotus Quickr makes it easy for users to share business content. An important design principle of Lotus Quickr is to build the application on open interfaces that let customers and business partners access content where and when they need it. Customers and partners need to interact with content from a variety of content repositories, using a diverse set of clients and programming models. Lotus Quickr Connectors interact with Lotus Quickr content using a set of published interfaces.

In this article, we introduce the basic operations you can perform using Lotus Quickr Web services and some of the best practices that you should follow when interacting with these services. At the end of this article, you should be familiar enough with both the layout of the services and the request-response patterns used that you can start developing your own applications that interact with Lotus Quickr content.

For information on other published interfaces for interacting with Lotus Quickr content, refer to the IBM Lotus Quickr Developer's Guide. For an introduction to Lotus Quickr REST services, refer to the companion developerWorks Lotus article, "Introducing IBM Lotus Quickr REST services."

Prerequisites

You should have a basic understanding of Web services programming methods to get the most out of this article. This includes an understanding of Web Service Description Language (WSDL), Simple Object Access Protocol (SOAP), HTTP, and XML-related technologies.

The sample application described in this article is a series of XML request-response messages with the server. Each request-response message shows the actual contents being transmitted across the wire and gives readers an understanding of how the XML is formatted.

Developers who want to write code using these services often use some type of SOAP tooling to generate client-side proxies to handle serialization of the request-response objects sent across the wire. To use the sample code provided, you should have some knowledge of the C# programming language. The sample code is intended to demonstrate interoperability across programming environments (for example, a .NET client invoking a Web service provided by a J2EE or IBM Lotus Domino server), but the principles and methodologies used to build the code sample are consistent with any other development environment that provides native support for Web service technologies.


Overview

Our goal for Web services is to enable you to rapidly build collaborative document management solutions for Lotus Quickr content with as little effort as possible. Customers familiar with the Web services paradigm should be comfortable working with these services. Because the services are well defined in a machine-readable format through a WSDL document, you can use your preferred tooling environment that supports Web services to generate client-side proxy code that interacts with the service provider. In this way, you don't need to invest significant time and cost in implementing the objects required to send and receive messages across the network. Also, it gives you an object model that can be reused across your application.


About the sample

In this article, we build a simple standalone Lotus Quickr Connector as shown in figure 1. A Lotus Quickr Connector is an extension to an existing application or framework that allows you to access content when and where you need it. Though this sample is standalone, it is representative of the approach that you can use when extending existing applications that you want to interact with Lotus Quickr content.


Figure 1. Sample Lotus Quickr Connector
Sample Lotus Quickr Connector

The connector enables the user to supply a URL and credentials to the Lotus Quickr server, and then to navigate the set of libraries on the server. A user can execute the following actions against content on the Lotus Quickr server using the connector:

  • Single-click a folder or document to see detailed properties for that resource maintained on the server
  • Double-click folders to expand navigation trees to show subfolders and documents
  • Toggle the default double-click behavior on documents either to display a summary view of the content in a Web browser or to directly download the document content to the file system
  • Rename folders and documents by editing the label of each resource in the tree
  • Move folders and documents using drag-and-drop in the tree structure
  • Delete folders and documents using a right-click context menu action

Generating service code

To interact with the Lotus Quickr Web service, you typically start by pointing your IDE SOAP tooling agent to the WSDL document maintained on the Lotus Quickr server at the following URL:

http://<host>:<port>/dm/services/ContentService?wsdl.

for example:

http://localhost:10038/dm/services/ContentService?wsdl

The user should then be prompted to authenticate with the server, after which a series of code artifacts should be generated to interact with the service easily. There are three service port types exposed in the WSDL, so in an object-oriented environment, you typically interact with a service object for ContentService, DocumentService, and LibraryService.


Retrieving server information

The ContentService in Lotus Quickr Web services is intended to provide general operations for content, meaning operations that don't apply specifically to libraries, folders, or documents. For the first version of the services, the service is limited to retrieving basic information about the server and its associated users.

It is expected that, in the future, Lotus Quickr Web services will evolve to include additional service operations that are not currently available. The client needs to know which version of the service is available so that the client does not make calls to operations that were added in a later version of the service supported on that server. To guard against making calls to a remote server that does not support a particular service operation, Web services include the concept of a service version.

To determine the version of the Web services deployed on an instance of a Lotus Quickr server, our example Lotus Quickr Connector makes the request shown in listing 1 to use the ContentService to retrieve information about the server.


Listing 1. SOAP request to retrieve service version information


POST /dm/services/ContentService HTTP/1.1
User-Agent: Mozilla/4.0 (compatible; 
MSIE 6.0; MS Web Services Client Protocol 2.0.50727.832)
Content-Type: text/xml; 
charset=utf-8SOAPAction: ""Authorization: Basic am9obmRvZTpqb2huZG9l
Host: insertyourserver.com
Content-Length: 310
Expect: 100-continue
Connection: Keep-Alive
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:
xsd="http://www.w3.org/2001/XMLSchema">
 <soap:Body>
  <getServerInfo xmlns="http://webservices.clb.content.ibm.com" />
 </soap:Body>
</soap:Envelope>

Notice that this call leverages HTTP Basic Auth to invoke the Web service. When you work with your client applications, you should toggle your client to pre-authenticate with the backend rather than respond to a challenge for authentication when interacting with the services.

The server in the case shown in listing 2 responds with some basic information about the service level. The serverInfo element includes the version attribute that contains a string defining the current service version of the Lotus Quickr server.


Listing 2. SOAP response to retrieve service version information

HTTP/1.1 200 OKDate: Tue, 02 Oct 2007 20:42:52 GMTServer: WebSphere Application 
Server/6.0
Content-Type: text/xml; charset=utf-8
Content-Language: en-US
Content-Length: 2136
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" 
xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <soapenv:Header/>
   <soapenv:Body>
      <p687:getServerInfoResponse xmlns:p687="http://webservices.clb.content.ibm.com">
         <p687:getServerInfoReturn>
            <p687:error xsi:nil="true"/>
            <p687:serverInfo version="8.0.1" locale="en" utcOffset="-14400000" 
            securityEnabled="1">
               <p687:serverProperties key="supported.versions" value="8.0.0,8.0.1"/>
               <p687:serverProperties key="app.url" value="/dm/atom"/>
               <p687:serverProperties key="connectors.install.url" 
               value="/documents/desktop/qkrconn.msi"/>
            </p687:serverInfo>
         </p687:getServerInfoReturn>
      </p687:getServerInfoResponse>
   </soapenv:Body>
</soapenv:Envelope>

In addition, other information is provided that is useful as a series of serverProperties elements. In the previous example, the default locale of the server, the relative URL patterns for invoking the REST-based Atom services, and the URL to download the connectors are all provided for the convenience of the connector.


Retrieving list of top-level libraries

Once the example Lotus Quickr Connector is aware of the service level available on the remote server, the connector attempts to retrieve the list of document libraries available on the server for interaction (see listing 3). To do this, the connector interacts with the LibraryService element, which provides operations for retrieving libraries of a specific category. In addition, it provides an operation to retrieve a library for managing shared resources that span libraries if they exist on the remote server.


Listing 3. SOAP request to retrieve list of document libraries

POST /dm/services/LibraryService HTTP/1.1
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; MS Web Services Client 
Protocol 2.0.50727.832)
Content-Type: text/xml; charset=utf-8
SOAPAction: ""Authorization: Basic am9obmRvZTpqb2huZG9l
Host: insertyourserver.com:9090
Content-Length: 444Expect: 100-continue
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <soap:Body>
   <getBusinessComponents xmlns="http://webservices.clb.content.ibm.com">
   <libraryId xsi:nil="true" />
   <libraryPath xsi:nil="true" />
   <categoryTypes>DocumentManager</categoryTypes>
  </getBusinessComponents>
 </soap:Body>
</soap:Envelope>

This request asks the server to return all library components that are appropriate for use in a document management application.

The response shown in listing 4 enumerates the list of library components that are available for interaction on the server. Each library resource includes metadata such as the ID (for example, d76a1880470797b28552b53e588f1125) and path (for example, /contentRoot/icm:libraries[7]/clb:libraries[2]/clb:libraries) that uniquely addresses that resource on the server. In addition, other system metadata is provided that gives basic attributes about the resource (for example, created, last modified timestamps, description, and title).


Listing 4. SOAP response to retrieve list of document libraries

HTTP/1.1 200 OKDate: Tue, 02 Oct 2007 20:42:52 GMTServer: WebSphere Application 
Server/6.0
Content-Type: text/xml; charset=utf-8
Content-Language: en-US
Content-Length: 1140
<soapenv:Envelope 
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" 
xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <soapenv:Header/>
   <soapenv:Body>
      <p687:getBusinessComponentsResponse 
      xmlns:p687="http://webservices.clb.content.ibm.com">
         <p687:getBusinessComponentsReturn>
            <p687:error xsi:nil="true"/>
            <p687:libraries id="d76a1880470797b28552b53e588f1125" 
            path="/contentRoot/icm:libraries[7]/clb:libraries[2]/clb:libraries" 
            locked="0" permissions="" systemCreated="2007-10-02T20:17:19.125Z" 
            systemLastModified="2007-10-02T20:17:20.484Z" hidden="0" 
            description="This is my team library for content." title="My Team Library">
               <p998:creator dn="uid=johndoe,o=default organization" 
               commonName="John Doe" xmlns:p998="http://model.xsd.content.ibm.com"/>
               <p998:lastModifier xsi:nil="true" 
               xmlns:p998="http://model.xsd.content.ibm.com"/>
               <p998:lockOwner xsi:nil="true" 
               xmlns:p998="http://model.xsd.content.ibm.com"/>
            </p687:libraries>
         </p687:getBusinessComponentsReturn>
      </p687:getBusinessComponentsResponse>
   </soapenv:Body>
</soapenv:Envelope>

Notice in the preceding response that an empty error element is included in the getBusinessComponentsReturn element. This is a common pattern used by Web services to express non-fatal or expected error conditions. Users of the service should check each response for a nested error that may have occurred. SOAP faults are reserved for serious, non-recoverable system errors. If an error was present, an error code and description is provided describing the error that was encountered on the server and allowing the connector to handle error conditions gracefully.


Retrieving subfolders, documents, and metadata

Now that Lotus Quickr Connector has the list of libraries, you need to support further navigation of the hierarchy by enabling users to expand folders in the navigator to see subfolders and documents.

Given the ID or path to the parent resource, it is a simple operation to request the associated child resources. The navigator is interested in displaying the list of folders and published documents, so you make two requests. The first request is to retrieve the list of child folders scoped to the parent folder (see listing 5).


Listing 5. SOAP request to retrieve subfolders

POST /dm/services/DocumentService HTTP/1.1
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; 
MS Web Services Client Protocol 2.0.50727.832)
Content-Type: text/xml; charset=utf-8
SOAPAction: ""Authorization: Basic am9obmRvZTpqb2huZG9l
Host: insertyourserver.com:9090
Content-Length: 382
Expect: 100-continue
<?xml version="1.0" encoding="utf-8"?>
      <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" 
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
      xmlns:xsd="http://www.w3.org/2001/XMLSchema">
         <soap:Body>
            <getFolders xmlns="http://webservices.clb.content.ibm.com">
               <id>d76a1880470797b28552b53e588f1125</id>
               <path xsi:nil="true" />
            </getFolders>
         </soap:Body>
      </soap:Envelope>

This request asks the server to retrieve a list of child folders of the parent folder with the specified ID, and the response (see listing 6) includes the list of folder objects. Each folder object contains its ID and path as well as its associated metadata such as title, description, and so on.


Listing 6. SOAP response to retrieve subfolders

HTTP/1.1 200 OKDate: Wed, 03 Oct 2007 17:18:06 GMT
Server: WebSphere Application Server/6.0
Content-Type: text/xml; charset=utf-8
Content-Language: en-US
Content-Length: 6167
<soapenv:Envelope 
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" 
xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <soapenv:Header/>
   <soapenv:Body>
      <p687:getFoldersResponse xmlns:p687="http://webservices.clb.content.ibm.com">
         <p687:getFoldersReturn>
            <p687:error xsi:nil="true"/>
            <p687:folders id="ccec7380470798c58570b53e588f1125" 
            path="/contentRoot/icm:libraries[7]/clb:libraries[2]/clb:libraries/Drafts" 
            locked="0" permissions="" systemCreated="2007-10-02T20:19:17.219Z" 
            systemLastModified="2007-10-02T20:19:17.219Z" 
            created="2007-10-02T20:19:17.219Z" lastModified="2007-10-02T20:19:17.219Z" 
            hidden="0" label="Drafts" title="Drafts">
               <p998:creator dn="uid=johndoe,o=default organization" 
               commonName="John Doe" xmlns:p998="http://model.xsd.content.ibm.com"/>
               <p998:lastModifier dn="uid=johndoe,o=default organization" 
               commonName="John Doe" xmlns:p998="http://model.xsd.content.ibm.com"/>
               <p998:lockOwner xsi:nil="true" 
               xmlns:p998="http://model.xsd.content.ibm.com"/>
               <p998:authors dn="uid=johndoe,o=default organization" 
               commonName="John Doe" xmlns:p998="http://model.xsd.content.ibm.com"/>
               <p998:owners dn="uid=johndoe,o=default organization" 
               commonName="John Doe" xmlns:p998="http://model.xsd.content.ibm.com"/>
            </p687:folders>
         </p687:getFoldersReturn>
      </p687:getFoldersResponse>
   </soapenv:Body>
</soapenv:Envelope>

Now that the example connector has a list of child folders from a given node in the hierarchy, you need to retrieve the list of child document resources (see listing 7).


Listing 7. SOAP request to retrieve documents

POST /dm/services/DocumentService HTTP/1.1
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; 
MS Web Services Client Protocol 2.0.50727.832)
Content-Type: text/xml; charset=utf-8
SOAPAction: ""Authorization: Basic am9obmRvZTpqb2huZG9l
Host: insertyourserver.com:9090
Content-Length: 423
Expect: 100-continue
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
 <soap:Body>
  <getDocuments xmlns="http://webservices.clb.content.ibm.com">
   <id>d76a1880470797b28552b53e588f1125</id>
   <path xsi:nil="true" />
   <serviceOptions>None</serviceOptions>
  </getDocuments>
 </soap:Body>
</soap:Envelope>

This request asks the server to retrieve a list of child documents of the parent folder with the specified ID, and the response (see listing 8) includes the list of document objects. Each document object contains its ID and path as well as its associated metadata such as title, description, and so on.


Listing 8. SOAP response to retrieve documents

HTTP/1.1 200 OKDate: Wed, 03 Oct 2007 17:18:06 GMT
Server: WebSphere Application Server/6.0
Content-Type: text/xml; charset=utf-8
Content-Language: en-US
Content-Length: 7321
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" 
xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
 <soapenv:Header/>
 <soapenv:Body>
  <p687:getDocumentsResponse xmlns:p687="http://webservices.clb.content.ibm.com">
   <p687:getDocumentsReturn>
    <p687:error xsi:nil="true"/>
    <p687:documents id="7cbce380470798bc855eb53e588f1125" 
    path="/contentRoot/icm:libraries[7]/clb:libraries[2]/clb:libraries/New Idea.doc" 
    locked="0" permissions="" systemCreated="2007-10-02T20:19:13.219Z" 
    systemLastModified="2007-10-02T20:19:13.219Z" created="2007-03-14T18:21:56.000Z" 
    lastModified="2007-03-18T17:44:39.000Z" hidden="0" language="en" 
    label="New Idea.doc" description="" title="New Idea.doc" 
    effectiveDate="2007-10-02T20:19:13.203Z" dataLength="249856" 
    dataLastModified="2007-10-02T20:19:13.219Z" dataMimeType="application/msword">
     <p998:creator dn="uid=johndoe,o=default organization" commonName="John Doe" 
     xmlns:p998="http://model.xsd.content.ibm.com"/>
     <p998:lastModifier dn="uid=johndoe,o=default organization" 
     commonName="John Doe" xmlns:p998="http://model.xsd.content.ibm.com"/>
     <p998:lockOwner xsi:nil="true" xmlns:p998="http://model.xsd.content.ibm.com"/>
     <p791:documentType xsi:nil="true" 
     xmlns:p791="http://model.xsd.clb.content.ibm.com"/>
    </p687:documents>
   </p687:getDocumentsReturn>
  </p687:getDocumentsResponse>
 </soapenv:Body>
</soapenv:Envelope>

Because the example connection builds only a simple navigation tree, the connector does not need to retrieve all the detailed information about the resource. For the sake of efficiency, the example connector retrieves only the minimal information it needs. If the connector needs associated information about a document, it can specify that the associated metadata be retrieved in a single call by using a list of service options.

Service options enable clients of the service to specify optional behavior for a call. For a list of each option supported by a particular call, it is best to reference the WSDL; however, for convenience, table 1 provides a list of each defined option and its effect on the data retrieved.


Table 1. Service options
OptionBehavior
NoneThe default behavior of the call is requested.
IncludeDraftsEach document retrieved includes its associated draft, if it exists.
IncludeApproveDraftsEach document retrieved includes its associated draft, if the user whose credentials are provided on the service is an approver on the draft.
IncludeSubmittedDraftsEach document retrieved includes its associated draft, if the user whose credentials are provided on the service has submitted the draft for approval.
IncludeReferencesEach object that is retrieved includes its associated reference type. Reference types are currently limited to document type and property sheet type.
IncludePermissionsRetrieves the permissions for a piece of content for the given user.
IncludePropertySheetsRetrieves a list of any custom property sheets associated with the document.
ResolveLockOwnerPopulates the ID of the user who has the document locked.
RetrieveDownloadURLPopulates the URL attribute for a resource for retrieving the binary contents of the document.
RetrieveViewURLPopulates the URL attribute for a resource for viewing a summary of the resource.
IncludeFolderChildrenRetrieves child documents and folders in a single request when retrieving a folder object. Not recommended for large numbers of child folders and documents.

For example, let's demonstrate how the service options can be used to manipulate the metadata retrieved on a single document request (see listing 9).


Listing 9. SOAP request for document metadata

POST /dm/services/DocumentService HTTP/1.1
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; 
MS Web Services Client Protocol 2.0.50727.832)
Content-Type: text/xml; charset=utf-8
SOAPAction: ""Authorization: Basic cXVpa3JhZG06cXVpa3JhZG0=Host: 
insertyourserver.comContent-Length: 527
Expect: 100-continue
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
 <soap:Body>
  <getDocument xmlns="http://webservices.clb.content.ibm.com">
   <id>a8959480470798cf8587b53e588f1125</id>
   <path xsi:nil="true" />
   <downloadOption>None</downloadOption>
   <serviceOptions>IncludePropertySheets</serviceOptions>
   <serviceOptions>RetrieveDownloadURL</serviceOptions>
  </getDocument>
 </soap:Body>
</soap:Envelope>

This request passes two options to the server requesting that the server return custom attributes, if they exist on the document and are supported by the server (see IncludePropertySheets) as well as a URL that can be used for direct download of the document binary contents (see RetrieveDownloadURL).

Notice that the response (see listing 10) includes a list of dynamic maps for each custom attribute in the document. In addition, the url attribute on the document resource contains a link to download the binary contents of the resource.


Listing 10. SOAP response for document metadata

HTTP/1.1 200 OKDate: Mon, 08 Oct 2007 18:10:38 GMT
Server: WebSphere Application Server/6.0
Content-Type: text/xml; charset=utf-8
Content-Language: en-US
Content-Length: 4243
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" 
xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
 <soapenv:Header/>
 <soapenv:Body>
  <p687:getDocumentResponse xmlns:p687="http://webservices.clb.content.ibm.com">
   <p687:getDocumentReturn>
    <p687:error xsi:nil="true"/>
    <p687:document id="a8959480470798cf8587b53e588f1125" 
    path="/contentRoot/icm:libraries[7]/clb:libraries[2]/clb:
    libraries/Help UX Mockup.jpg" 
    locked="0" permissions="" systemCreated="2007-10-02T20:19:21.453Z" 
    systemLastModified="2007-10-08T18:09:44.375Z" created="2007-03-27T00:51:29.000Z" 
    lastModified="2007-10-08T18:09:44.375Z" hidden="0" language="en" 
    label="Help UX Mockup.jpg" description="" title="Help UX Mockup.jpg" 
    effectiveDate="2007-10-08T18:09:44.344Z" url="http://insertyourserver.com:
    10038/lotus/mypoc?uri=
    dm:a8959480470798cf8587b53e588f1125&verb=download" 
    dataLength="117516" dataLastModified="2007-10-02T20:19:21.453Z" 
    dataMimeType="image/jpeg">
     <p998:creator dn="uid=johndoe,o=default organization" commonName="John Doe" 
     xmlns:p998="http://model.xsd.content.ibm.com"/>
     <p998:lastModifier dn="uid=johndoe,o=default organization" commonName="John Doe" 
     xmlns:p998="http://model.xsd.content.ibm.com"/>
     <p998:lockOwner xsi:nil="true" xmlns:p998="http://model.xsd.content.ibm.com"/>
     <p998:authors dn="uid=johndoe,o=default organization" commonName="John Doe" 
     xmlns:p998="http://model.xsd.content.ibm.com"/>
     <p998:owners dn="uid=johndoe,o=default organization" commonName="John Doe" 
     xmlns:p998="http://model.xsd.content.ibm.com"/>
     <p791:propertySheets propertySheetTypeId="49cc3e004719baea98f99be57ed4c640" 
     extracted="0" label="propSheet49cc3e004719baea98f99be57ed4c640" title="Custom PS" 
     xmlns:p791="http://model.xsd.clb.content.ibm.com">
      <p791:dynamicLongs 
      key="clb:p_1191866765906a1b675004719bae9a53abf471f54238f_0">
      <p791:values>46800</p791:values>
      </p791:dynamicLongs>
      <p791:dynamicDates 
      key="clb:p_119186676589198c5a3804719bae9a539bf471f54238f_0">
      <p791:values>2007-10-08T18:08:59.093Z</p791:values>
      </p791:dynamicDates>
      <p791:dynamicDates 
      key="clb:p_1191866765906a1b675004719bae9a53bbf471f54238f_0">
      <p791:values>2007-10-08T13:00:00.000Z</p791:values>
      </p791:dynamicDates>
      <p791:dynamicDoubles 
      key="clb:p_11918667658758f3c3b804719bae9a535bf471f54238f_0">
      <p791:values>1234.0</p791:values>
      </p791:dynamicDoubles>
      <p791:dynamicStrings 
      key="clb:p_119186676582885b2d3804719bae9a533bf471f54238f_0">
      <p791:values>sample text</p791:values>
      </p791:dynamicStrings>
      <p791:dynamicStrings 
      key="clb:p_11918667658758f3c3b804719bae9a537bf471f54238f_0">
      <p791:values>0</p791:values>
      </p791:dynamicStrings>
      <p791:dynamicStrings 
      key="clb:p_1191866765906a1b675004719bae9a53cbf471f54238f_0">
      <p791:values>http://www.ibm.com</p791:values>
      </p791:dynamicStrings>
      <p791:dynamicStrings 
      key="clb:p_11918667658758f3c3b804719bae9a534bf471f54238f_0">
      <p791:values>sample multi-line text</p791:values>
                  </p791:dynamicStrings>
                  <p791:dynamicStrings 
                  key="clb:p_11918667658758f3c3b804719bae9a536bf471f54238f_0">
      <p791:values>uid=johndoe,o=default organization</p791:values>
      </p791:dynamicStrings>
      <p791:dynamicStrings 
      key="clb:p_119186676589198c5a3804719bae9a538bf471f54238f_0">
      <p791:values>1</p791:values>
      <p791:values/>
      </p791:dynamicStrings>
     </p791:propertySheets>
     <p791:propertySheetTypes id="49cc3e004719baea98f99be57ed4c640" title="Custom PS" 
     extracted="0" xmlns:p791="http://model.xsd.clb.content.ibm.com">
     <p791:templateXml xsi:nil="true"/>
     </p791:propertySheetTypes>
     <p791:documentType versioning="NONE" approvalEnabled="0" defaultExtension="" 
     id="a5f38a004719bb0b98fa9be57ed4c640" 
     path="/contentRoot/icm:libraries[7]/clb:libraries[2]/clb:libraries/
     clb:documentTypeContainer/
     Custom DT" locked="0" systemCreated="2007-10-08T18:06:20.516Z" 
     systemLastModified="2007-10-08T18:06:20.516Z" hidden="0" description="" 
     title="Custom DT" xmlns:p791="http://model.xsd.clb.content.ibm.com">
     <p791:propertySheetTypes id="49cc3e004719baea98f99be57ed4c640" title="Custom PS"
     extracted="0">
     <p791:templateXml xsi:nil="true"/>
     </p791:propertySheetTypes>
     <p791:template xsi:nil="true"/>
    </p791:documentType>
   </p687:document>
  </p687:getDocumentReturn>
 </p687:getDocumentResponse>
</soapenv:Body>
</soapenv:Envelope>

The example Lotus Quickr Connector is read only with respect to document resource metadata. It is also possible to create new documents and update existing documents using Lotus Quickr Web services. To do this, the user must first lock the document, create a draft of the resource, make the modifications to the draft resource (metadata or binary contents), and then publish the draft as the current document. Refer to the WSDL (as described in the "Generating service code" section earlier) for detailed documentation on the enumerated options.


Renaming and deleting resources

Rename, move, and delete operations are scoped to a resource type; in other words, these are operations specific to folder and document resources. Each of the requested operations is subject to access control constraints enforced by the Lotus Quickr server.

When attempting to rename a resource, the caller must specify the ID or the absolute path of the resource to be modified. The new name must conform to a file system mapping scheme as enforced by the server.

When attempting to delete a resource, the caller must specify the ID or the absolute path of the resource to be deleted. Folder and document resources may be deleted, but the root folder of a library may not be deleted through Lotus Quickr Web services.


Conclusion

Lotus Quickr Web services offer a simple way to work with documents. Because the operations are described using a WSDL document, you can use your programming language of choice and the associated tooling support to quickly generate code for interacting with the remote server (the C# language in this example). This article demonstrated how to use the service to perform basic operations on documents while explaining the basic pattern for each request and response message.



Download

NameSizeDownload method
QuickrNavigator.zip730KB HTTP

Information about download methods


Resources

Learn

Discuss

About the authors

Derek Carr is an Advisory Software Engineer at IBM working with the Lotus Quickr team in Research Triangle Park, NC. You can reach Derek at dwcarr@us.ibm.com.

Andreas Goelzer is an Advisory Software Engineer at IBM working with the IBM Lotus Quickr team in Westford, MA. You can reach Andreas at andreas_goelzer@us.ibm.com.

Greg Melahn is an Architect and Senior Technical Staff Member in the Workplace, Portal, and Collaboration portfolio of IBM software. You can reach Greg at melahn@us.ibm.com.

Comments (Undergoing maintenance)



Trademarks  |  My developerWorks terms and conditions

Help: Update or add to My dW interests

What's this?

This little timesaver lets you update your My developerWorks profile with just one click! The general subject of this content (AIX and UNIX, Information Management, Lotus, Rational, Tivoli, WebSphere, Java, Linux, Open source, SOA and Web services, Web development, or XML) will be added to the interests section of your profile, if it's not there already. You only need to be logged in to My developerWorks.

And what's the point of adding your interests to your profile? That's how you find other users with the same interests as yours, and see what they're reading and contributing to the community. Your interests also help us recommend relevant developerWorks content to you.

View your My developerWorks profile

Return from help

Help: Remove from My dW interests

What's this?

Removing this interest does not alter your profile, but rather removes this piece of content from a list of all content for which you've indicated interest. In a future enhancement to My developerWorks, you'll be able to see a record of that content.

View your My developerWorks profile

Return from help

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=1
Zone=Lotus
ArticleID=269389
ArticleTitle=Introducing IBM Lotus Quickr Web services
publish-date=01312008
author1-email=dwcarr@us.ibm.com
author1-email-cc=
author2-email=andreas_goelzer@us.ibm.com
author2-email-cc=
author3-email=melahn@us.ibm.com
author3-email-cc=debcot@us.ibm.com

My developerWorks community

Tags

Help
Use the search field to find all types of content in My developerWorks with that tag.

Use the slider bar to see more or fewer tags.

Popular tags shows the top tags for this particular content zone (for example, Java technology, Linux, WebSphere).

My tags shows your tags for this particular content zone (for example, Java technology, Linux, WebSphere).

Use the search field to find all types of content in My developerWorks with that tag. Popular tags shows the top tags for this particular content zone (for example, Java technology, Linux, WebSphere). My tags shows your tags for this particular content zone (for example, Java technology, Linux, WebSphere).

Special offers