Microsoft KB Archive/289870

= HOWTO: Use PROPPATCH in WebDAV to Change a Property Value of a Word Document =

Article ID: 289870

Article Last Modified on 2/22/2007

-

APPLIES TO


 * Microsoft Exchange 2000 Server Standard Edition
 * Microsoft XML Parser 2.0
 * Microsoft XML Parser 2.5
 * Microsoft XML Parser 2.6
 * Microsoft XML Core Services 4.0
 * Microsoft XML Core Services 4.0
 * Microsoft Visual C++ 6.0 Enterprise Edition
 * Microsoft Visual C++ 6.0 Professional Edition
 * Microsoft Visual C++ 6.0 Standard Edition

-



This article was previously published under Q289870



SUMMARY
This article demonstrates the use of the Web Distributed Authoring and Versioning (WebDAV) PROPRATCH command to change the value of a property on a Microsoft Word document in a public folder.



MORE INFORMATION
The following Visual C++ code sample uses the HTTPRequest object to send a PROPPATCH request to the Exchange server for the Author property of the Word document and get a response back stating if the value was changed.

This sample uses the following namespaces:

xmlns:a='DAV:'

xmlns:o='urn:schemas-microsoft-com:office:office'

This sample requires Msxml.dll version 2.0 or later.

To run this sample, follow these steps:  Under Public folders, create a new folder and name it &quot;Testfolder&quot;. In Testfolder, create a new Word document and name it &quot;Test.doc&quot;. In Visual C++, create a new Win32 console application and name it &quot;Mysample&quot;.  Replace the code in the Mysample.cpp file with the following code:
 * 1) include

//TODO: Change the path here if your Msxml.dll file is in a different location.

// for xml 4.0 using namespace MSXML2;
 * 1) import &quot;c:\winnt\system32\msxml4.dll&quot;

// for xml 2.0 // #import &quot;c:\winnt\system32\msxml2.dll&quot; // using namespace MSXML;

int main(int argc, char* argv[]) {  CoInitialize(NULL); try { //TODO: Change the line below to reflect your server. bstr_t yourServerName = &quot;myserver1&quot;;

bstr_t sUrl = &quot;http://&quot; + yourServerName + &quot;/public/testfolder/test.doc&quot;; bstr_t sMethod = &quot;PROPPATCH&quot;; //TODO: Change the 2 lines below to reflect your user name and password. _variant_t vUser = L&quot;myserver1\\User1&quot;; _variant_t vPassword = L&quot;password&quot;; // for xml 4.0 MSXML2::IXMLHTTPRequestPtr pXMLHttpReq=NULL; // for xml 2.0 MSXML::IXMLHTTPRequestPtr pXMLHttpReq=NULL;

HRESULT hr = ::CoCreateInstance(           CLSID_XMLHTTPRequest,                        NULL,                         CLSCTX_INPROC_SERVER,             IID_IXMLHttpRequest,                       (LPVOID*)&pXMLHttpReq); if (S_OK != hr) {        printf(&quot;XML Http Request pointer creation failed\n&quot;); return 0; }

// Call open function. _variant_t vAsync = (bool)FALSE; pXMLHttpReq->open(sMethod,        sUrl,         vAsync,         vUser,         vPassword);

pXMLHttpReq->setRequestHeader((bstr_t)&quot;Content-Type&quot;,         (bstr_t)&quot;text/xml&quot;); bstr_t sReq; sReq = &quot;&quot;; sReq = sReq + &quot;&quot;; sReq = sReq + &quot;&quot;; sReq = sReq + &quot;<o:Author>someone else</o:Author>&quot;; sReq = sReq + &quot;</a:prop></a:set></a:propertyupdate>&quot;; // Send the request to set the search criteria. pXMLHttpReq->send(sReq);

// OK, get response. long lStatus; pXMLHttpReq->get_status(&lStatus);

printf(&quot;\n\n%d\n&quot;, lStatus); BSTR bstrResp; pXMLHttpReq->get_statusText(&bstrResp); printf(&quot;\n\n%s\n&quot;, (char*)(bstr_t)bstrResp);

_bstr_t bstrAllHeaders; bstrAllHeaders = pXMLHttpReq->getAllResponseHeaders; printf(&quot;\n\n%s\n&quot;, (char*)bstrAllHeaders);

BSTR bstrResponseText; pXMLHttpReq->get_responseText(&bstrResponseText); printf(&quot;\n\n%s\n&quot;, (char*)(bstr_t)bstrResponseText); }  catch(_com_error &e) {     printf(&quot;Error\a\a\n\tCode = %08lx\n&quot;         &quot;\tCode meaning = %s\tSource = %s\n\tDescription = %s\n&quot;,         e.Error,          e.ErrorMessage,          (char*)e.Source,          (char*)e.Description); }

CoUninitialize; return 0; }                   </li> Make the changes marked by &quot;TODO:&quot; in the code.</li> Compile and then run the code.</li> At the end, you will see the Status as &quot;200 OK&quot;. The StatusText will display the status as &quot;HTTP/1.1 200 OK&quot; if the value was changed.</li> You can then use PROPFIND to look up this property and you will see that it has changed to &quot;Someone Else&quot;.</li></ol>

Keywords: kbhowto kbmsg KB289870

-

[mailto:TECHNET@MICROSOFT.COM Send feedback to Microsoft]

© Microsoft Corporation. All rights reserved.