WEBDAV - MS Exchange - Adding Calendar Appointment WITH ASSIGNED CATEGORY

I'm trying to create limited integration between our "home grown" CRM system and our Exchange Server.  I have code that's working, however I cannot figure out how to pass a CATEGORY value in my code.  Can someone give me the line of code I need to pass the category value?

The code below currently creates a calendar appointment but does not create a category on the appointment.
<html>
<body>
<%
 
 ' Exchange server name.
 strExchSvrName = "xxx"
 
 ' Mailbox folder name.
 strMailbox = "yyy"
 
 
 ' Appointment item.
 strApptItem = trim(year(date)) & "-" & trim(month(date)) & "-" & trim(day(date)) & "-" & trim(hour(now)) & trim(minute(now)) & trim(second(now))
 
 ' Username and password of appointment creator.
 strUserName = "123123"
 strPassWord = "xxxxx"
 
 ' URL of the appointment item.
 strApptURL = "http://" & strExchSvrName & "/exchange/" & _
    strMailbox & "/Calendar/" & strApptItem
 
 ' XML namespace info of the WebDAV request.
 strXMLNSInfo = "xmlns:g=""DAV:"" " & _
    "xmlns:e=""http://schemas.microsoft.com/exchange/"" " & _
    "xmlns:mapi=""http://schemas.microsoft.com/mapi/"" " & _
    "xmlns:mapit=""http://schemas.microsoft.com/mapi/proptag/"" " & _
    "xmlns:x=""xml:"" xmlns:cal=""urn:schemas:calendar:"" " & _
    "xmlns:dt=""urn:uuid:c2f41010-65b3-11d1-a29f-00aa00c14882/"" " & _
    "xmlns:header=""urn:schemas:mailheader:"" " & _
    "xmlns:mail=""urn:schemas:httpmail:"">"
 
 ' Set the appointment item properties.  The reminder time is set in seconds.
 ' To create an all-day meeting, set the dtstart/dtend range for 24 hours
 ' or more and set the alldayevent property to 1.  See the documentation
 ' on the properties in the urn:schemas:calendar: namespace for more information.
 
 'Eastern Standard Time Offset = 5 hours
 strCalInfo = "<cal:location>test location 21</cal:location>" & _
    "<cal:dtstart dt:dt=""dateTime.tz"">2008-11-18T20:50:00.000Z</cal:dtstart>" & _
    "<cal:dtend dt:dt=""dateTime.tz"">2008-11-18T20:50:00.000Z</cal:dtend>" & _
    "<cal:instancetype dt:dt=""int"">0</cal:instancetype>" & _
    "<cal:busystatus>BUSY</cal:busystatus>" & _
    "<cal:meetingstatus>CONFIRMED</cal:meetingstatus>" & _
    "<cal:alldayevent dt:dt=""boolean"">0</cal:alldayevent>" & _
    "<cal:responserequested dt:dt=""boolean"">0</cal:responserequested>" & _
    "<cal:reminderoffset dt:dt=""int"">900</cal:reminderoffset>"
 
 
    
    
 ' Set the required attendee of the appointment.
  strHeaderInfo = "<header:to>" & strMailbox & "</header:to>"
 
 ' Set the subject of the appointment.
 strMailInfo = "<mail:subject>New Calendar Appointment Test</mail:subject>" & _
    "<mail:htmldescription>This is a test description</mail:htmldescription>"
 
 ' Build the XML body of the PROPPATCH request.
 strApptRequest = "<?xml version=""1.0""?>" & _
 "<g:propertyupdate " & strXMLNSInfo & _
  "<g:set><g:prop>" & _
    "<g:contentclass>urn:content-classes:appointment</g:contentclass>" & _
    "<e:outlookmessageclass>IPM.Appointment</e:outlookmessageclass>" & _
    strMailInfo & _
    strCalInfo & _
    strHeaderInfo & _
 
    "<mapi:finvited dt:dt=""boolean"">1</mapi:finvited>" & _
   "</g:prop></g:set>" & _
   
 "</g:propertyupdate>" 
 
 
 
 
 ' Create the DAV PROPPATCH request.
 Set xmlReq = CreateObject("Microsoft.XMLHTTP")
 xmlReq.open "PROPPATCH", strApptURL, False, strUserName, strPassWord
 xmlReq.setRequestHeader "Content-Type", "text/xml"
 xmlReq.send strApptRequest
 
 ' The PROPPATCH request was successful.
 If (xmlReq.Status >= 200 And xmlReq.Status < 300) Then
  response.write "Appointment created successfully."
 
 ' Display error info.
 Else
 
  response.write "PROPPATCH status: " & xmlReq.Status & vbCrLf & _
    "Status text: " & xmlReq.statusText
 End If
 
' Clean up.
Set xmlReq = Nothing
 
 
 
    Set xmlReq = Nothing
 
 
 
 
 
 
%>
</body>
</html>

Open in new window

jaypappasAsked:
Who is Participating?

[Product update] Infrastructure Analysis Tool is now available with Business Accounts.Learn More

x
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

jaypappasAuthor Commented:
Ha! I'm answering my own question.... (how does that work? :) ).

The answer is:

Adding this:
strMiscInfo = "<e:keywords-utf8><x:v>Buddies</x:v><x:v>Engineers</x:v></e:keywords-utf8>"
Then in the proppatch call add the new string (see below):

' Build the XML body of the PROPPATCH request.
 strApptRequest = "<?xml version=""1.0""?>" & _
 "<g:propertyupdate " & strXMLNSInfo & _
  "<g:set><g:prop>" & _
    "<g:contentclass>urn:content-classes:appointment</g:contentclass>" & _
    "<e:outlookmessageclass>IPM.Appointment</e:outlookmessageclass>" & _
   
strMiscInfo & _
   strMailInfo & _
    strCalInfo & _
    strHeaderInfo & _
    "<mapi:finvited dt:dt=""boolean"">1</mapi:finvited>" & _
   "</g:prop></g:set>" & _
   
 "</g:propertyupdate>"

This assigns categories quite nicely.... it was in some webdav code for entering contacts and I played with it....
 


 
0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
File Sharing Software

From novice to tech pro — start learning today.