SaveToContainer Method

SaveToContainer Method

This content is no longer actively maintained. It is provided as is, for anyone who may still be using these technologies, with no warranties or claims of accuracy with regard to the most recent product version or service release.

Binds to and saves data into a new item in the folder/container specified by URL. The item name is a generated globally unique identifier (GUID).

Applies To

IDataSource Interface

Type Library

Microsoft CDO for Exchange 2000 Library

DLL Implemented In

CDOEX.DLL

Syntax

[Visual Basic]Function SaveToContainer
(
    ContainerURL As String,     [ActiveConnection As Object],     [Mode As ConnectModeEnum],     [CreateOptions As RecordCreateOptionsEnum],     [Options As RecordOpenOptionsEnum],     [UserName As String],     [Password As String]
)

[C++]HRESULT SaveToContainer (     BSTR ContainerURL,     IDispatchActiveConnection,     ConnectModeEnum Mode,     RecordCreateOptionsEnum CreateOptions,     RecordOpenOptionsEnum Options,     BSTR UserName,     BSTR Password );

Parameters

  • ContainerURL
    The URL of the folder/collection resource which the item is to be saved.
  • ActiveConnection
    Specifies the optional connection to use when saving. This is an IDispatch interface to a Microsoft ActiveX Data Objects (ADO) Connection object. A new Connection (session) object is implicitly created if none is specified.
  • Mode
    Access mode. This value is always ORed with adModeReadWrite. That is, at least read-write access is required to save the item to the container/folder.
  • CreateOptions
    Set of flags to specify creation options. The values adFailIfNotExists and adOpenIfExists should not be used. If used, an E_INVALIDARG exception is raised.
  • Options
    This specifies options flag(s) used when opening the source. Your setting is always ORed with adOpenSource.
  • UserName
    Not Supported - Reserved for future use. Used to pass a user name for authentication.
  • Password
    Not Supported - Reserved for future use. Used to pass a password for authentication.

Return Value

Returns S_OK if successful, or an error value otherwise.

Remarks

The specified URL must identify a valid URL namespace that the OLE DB 2.5 root binder can resolve to a registered provider binder. Once resolved, the URL must conform to that provider binder's URL semantics.

The enumerated values and their semantic definitions are defined as part of the ADO type library and documentation. Consult the ADO 2.5 documentation for a list of valid enumeration values and their intended purposes. Use of various enumerated values and their intended meanings are specific to a particular OLE DB 2.5 provider.

Restrictions on what types of data can be saved into a particular resource and how that data is handled by an implementation of the IDataSource interface is not part of this definition. Consult the appropriate Component Object Model (COM) class reference for further information.

The SaveToContainer method differs from SaveTo in that the name for the resource is automatically generated for you in the container collection specified by URL. The name generated by this method is not defined here and is implementation specific.

After successful completion of this method, you can retrieve the full URL to the new object to which you are currently bound by examining the IDataSource.SourceURL property.

Examples

[Visual Basic]

' Reference to Microsoft CDO for Exchange 2000 Library ' Reference to Microsoft ActiveX Data Objects 2.5 Library

Sub SaveEmbeddedPartsToFolder(iMsg As CDO.message, Url As String)

Dim iMsgB As New CDO.message
Dim iDsrcB As CDO.IDataSource
Dim iFldr As New Folder
Dim iDsrcFldr As CDO.IDataSource
Dim Conn As New ADODB.Connection
Dim iBp As IBodyPart
Dim iBps As IBodyParts
Dim ContType As String

Conn.Provider = "ExOLEDB.DataSource"
Conn.Open Url

Set iDsrcFldr = iFldr
iDsrcFldr.Open Url, Conn

Set iDsrcB = iMsgB

Set iBp = iMsg
Set iBps = iBp.BodyParts

For Each iBp In iBps
    ContType = iBp.ContentMediaType
    If ContType = "message/rfc822" Then

        iDsrcB.OpenObject iBp, "IBodyPart"
        iDsrcB.SaveToContainer Url, Conn, adModeReadWrite, adCreateOverwrite
        Debug.Print "Saved message has URL " & iDsrcB.SourceURL

    ElseIf ContType = "application/octet-stream" Or _
                ContType = "application/x-msdownload" Then

        Dim iItem As New Item
        Dim Flds As ADODB.Fields
        Dim Fld As ADODB.Field
        Dim Stm1 As Stream
        Dim Stm2 As Stream

        Set Stm1 = iItem.GetStream

        ' Get Decoded BodyPart stream
        Set Stm2 = iBp.GetDecodedContentStream
        ' Copy bodypart stream to resource stream
        Stm2.CopyTo Stm1

        ' Commit
        Stm1.Flush
        Stm1.Close
        iItem.DataSource.SaveToContainer Url, Conn, adModeReadWrite

    End If
Next iBp

End Sub ' Reference to Microsoft CDO for Exchange 2000 Library ' Reference to Microsoft ActiveX Data Objects 2.5 Library

Function CreateAndSaveMessageToContainer(Url1 As String) As CDO.message

Dim iDsrc As CDO.IDataSource
Dim Conn As New ADODB.Connection
Conn.Provider = "ExOLEDB.DataSource"
Conn.Open Url1

Dim iMsg As New CDO.message

With iMsg
    .To = "someone@microsoft.com"
    .From = "another@microsoft.com"
    .Subject = "Here is the subject"
    .TextBody = "Here is the text of the message"
End With

Set iDsrc = iMsg

iDsrc.SaveToContainer Url1, _
            Conn, _
            adModeReadWrite

Set CreateAndSaveMessageToContainer = iMsg

End Function

[C++]

/* You must have the following paths in your INCLUDE path. %CommonProgramFiles%\system\ado %CommonProgramFiles%\microsoft shared\cdo

*/ #ifndef _CORE_EXAMPLE_HEADERS_INCLUDED #define _CORE_EXAMPLE_HEADERS_INCLUDED #import <msado15.dll> no_namespace #import <cdoex.dll> no_namespace #include <iostream.h> #endif

void SaveMessageToFolder2(IMessagePtr pMsg, bstr_t url) {

_ConnectionPtr pConn(__uuidof(Connection));

if(pMsg == NULL) throw _com_error(E_INVALIDARG); // for passing optional variants, we may need this _variant_t varOpt(DISP_E_PARAMNOTFOUND,VT_ERROR); IDataSourcePtr pDsrc = pMsg;

pConn->Provider = "ExOLEDB.DataSource"; try { pConn->Open(url,bstr_t(),bstr_t(),-1); } catch(_com_error e) { throw e; }

try { pDsrc->SaveToContainer( url, variant_t((IDispatch*)pConn,true), //Connection from Folder bind above adModeReadWrite, adCreateNonCollection, (RecordOpenOptionsEnum) NULL, bstr_t(), bstr_t() ); } catch(_com_error e) { cerr << "Error saving message to folder!" << endl; throw e; } }

<job id="idatasource_savetocontainer"> <reference object="adodb.record"/> <reference object="cdo.message"/> <script language="vbscript">

Dim iDsrc
Dim iMsg
Dim Conn
Dim InfoNT
Dim Info
Dim sFolderUrl

Set Info   = CreateObject("ADSystemInfo")
Set InfoNT = CreateObject("WinNTSystemInfo")
Set Conn   = CreateObject("ADODB.Connection")
Set iMsg   = CreateObject("CDO.Message")

sFolderUrl = "http://" &amp; InfoNt.ComputerName &amp; "." &amp; Info.DomainDNSName &amp;  _
       "/public/test_folder/"

Conn.Provider = "ExOLEDB.DataSource"
Conn.Open sFolderUrl

' ...

With iMsg
    .To   = "someone@microsoft.com"
    .From = "another@microsoft.com"
    .Subject = "Here is the subject"
    .TextBody = "Here is the text of the message"
End With

Set iDsrc = iMsg.DataSource
iDsrc.SaveToContainer sFolderUrl, Conn
Wscript.Echo "Saved To and bound to item at URL: " &amp; iDsrc.SourceURL

iMsg.TextBody = iMsg.TextBody &amp; vbCrLf &amp; "And this is another line."
iDsrc.Save

</script> </job>

Send us your feedback about the Microsoft Exchange Server 2003 SDK.

Build: June 2007 (2007.618.1)

© 2003-2006 Microsoft Corporation. All rights reserved. Terms of use.