SaveToContainer Method
Topic Last Modified: 2006-06-13
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
Type Library
Microsoft CDO for Exchange 2000 Library
DLL Implemented In
CDOEX.DLL
Syntax
Function SaveToContainer( ContainerURL As String,
[ActiveConnection As Object],
[Mode As ConnectModeEnum],
[CreateOptions As RecordCreateOptionsEnum],
[Options As RecordOpenOptionsEnum],
[UserName As String],
[Password As String])
HRESULT SaveToContainer
(
BSTR ContainerURL,
IDispatch* ActiveConnection,
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
' 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
/*
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://" & InfoNt.ComputerName & "." & Info.DomainDNSName & _
"/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: " & iDsrc.SourceURL
iMsg.TextBody = iMsg.TextBody & vbCrLf & "And this is another line."
iDsrc.Save
</script>
</job>