Platform SDK: CDO 1.2.1 |
The ConversationIndex property specifies the index to the conversation thread of the message. Read/write.
objMessage.ConversationIndex
String
The ConversationIndex property is a string that represents a hexadecimal number. Valid characters within the string include the numbers 0 through 9 and the letters A through F (uppercase or lowercase).
A conversation is a group of related messages that have the same ConversationTopic property value. In a discussion application, for example, users can save original messages and responses in their personal folders. Messages can be tagged with the ConversationIndex property so that users can order the messages within the conversation.
The Session object provides the CreateConversationIndex method to create or update a conversation index.
This convention uses concatenated time stamp values, with each new message in the conversation adding a new time stamp to the end of the ConversationIndex string. You can see time relationships among the messages when you sort them by ConversationIndex values.
For more information on conversations, see Working With Conversations.
The ConversationIndex property is not exposed on AppointmentItem objects created by Microsoft® Schedule+, and it is not automatically set when you create an appointment within a CDO application. In these cases, the application must assign a value to ConversationIndex or an attempt to read it returns CdoE_NOT_FOUND.
The ConversationIndex property corresponds to the MAPI property PR_CONVERSATION_INDEX. It can be rendered into HTML hypertext using the CDO Rendering ObjectRenderer object. To specify this, set the object renderer's DataSource property to this Message object and the property parameter of the RenderProperty method to CdoPR_CONVERSATION_INDEX.
This code fragment demonstrates the old procedure used prior to version 1.1 of CDO. It takes advantage of the OLE CoCreateGUID function, which returns a value that consists of a time stamp and a machine identifier. The code fragment saves the time stamp part of the GUID.
For an example of the new procedure available with CDO version 1.1, see the CreateConversationIndex method.
' declarations section Type GUID ' global unique identifier; contains a time stamp Guid1 As Long Guid2 As Long Guid3 As Long Guid4 As Long End Type ' function appears in OLE32.DLL on Windows NT and Windows 95 Declare Function CoCreateGuid Lib "COMPOBJ.DLL" (pGuid As GUID) As Long Global Const S_OK = 0 ' return value from CoCreateGuid Function Util_GetEightByteTimeStamp() As String Dim lResult As Long Dim lGuid As GUID ' Exchange conversation is a unique 8-byte value ' Exchange client viewer sorts by concatenated properties On Error GoTo error_actmsg lResult = CoCreateGuid(lGuid) If lResult = S_OK Then Util_GetEightByteTimeStamp = _ Hex$(lGuid.Guid1) & Hex$(lGuid.Guid2) Else Util_GetEightByteTimeStamp = "00000000" ' zero time stamp End If Exit Function error_actmsg: MsgBox "Error " & Str(Err) & ": " & Error$(Err) Util_GetEightByteTimeStamp = "00000000" Exit Function End Function Function Util_NewConversation() Dim i As Integer Dim objNewMsg As Message ' new message object Dim strNewIndex As String ' value for ConversationIndex ' ... error handling ... Set objNewMsg = objSession.Outbox.Messages.Add ' ... error handling ... With objNewMsg .Subject = "used car wanted" .ConversationTopic = .Subject .ConversationIndex = Util_GetEightByteTimeStamp() ' utility .Text = "Wanted: late-model used car with low mileage." Set objOneRecip = .Recipients.Add(Name:="Car Ads", Type:=CdoTo) ' or you could pick the public folder from the address book If objOneRecip Is Nothing Then MsgBox "Unable to create the public folder recipient" Exit Function End If .Recipients.Resolve .Update ' save everything in the MAPI system .Send showDialog:=False End With End Function
A subsequent reply to this message should copy the ConversationTopic property and append its own time stamp to the original message’s time stamp, as shown in the following code fragment:
Function Util_ReplyToConversation() Dim objPublicFolder As Folder Dim i As Integer Dim objOriginalMsg As Message ' original message in public folder Dim objNewMsg As Message ' new message object for reply Dim strPublicFolderID As String ' ID for public folder Set objNewMsg = objSession.Outbox.Messages.Add ' error checking ... obtain objOriginalMsg and check that it is valid With objNewMsg .Text = "How about a slightly used bicycle?" ' new text .Subject = objOriginalMsg.Subject ' copy original properties .ConversationTopic = objOriginalMsg.ConversationTopic ' append time stamp; compatible with Microsoft Exchange client .ConversationIndex = objOriginalMsg.ConversationIndex & _ Util_GetEightByteTimeStamp() ' new stamp ' message was sent to a public folder so can copy recipient Set objOneRecip = .Recipients.Add( _ Name:=objOriginalMsg.Recipients.Item(1).Name, _ Type:=CdoTo) ' ... more error handling .Recipients.Resolve .Update ' save everything in the MAPI system .Send showDialog:=False End With ' ... error handling End Function