关于复制状态机

适用于:Outlook 2013 | Outlook 2016

本主题包含用于数据复制的状态Microsoft Outlook 2013 Microsoft Outlook 2010概述。

备注

复制 API 必须完全按照本主题中的说明实现,才能有用或受支持。 复制 API 仅可用于将 Outlook 2013 或 Outlook 2010 更改复制到服务器和从服务器复制。

IOSTX 和状态机

客户端按顺序调用 IOSTX::SyncBegIOSTX::SyncEndIOSTX::SyncHdrBegIOSTX::SyncHdrEnd,以在本地存储与服务器之间同步 Outlook 2013 或 Outlook 2010 文件夹和项目。 实际的调用顺序取决于需要复制的数据 (例如, Outlook 2013 或 Outlook 2010 文件夹、Outlook 2013 或 Outlook 2010 文件夹、邮件项目、日历项目等) 以及同步 (无论是从本地存储上载到服务器还是从服务器下载到本地存储的方向) 。 下面是典型的调用序列:

  1. 客户端调用 IOSTX::SyncBeg 以开始复制,并指定状态标识符和指向相应数据结构地址的指针。

  2. Outlook 2013 或 Outlook 2010 分配数据结构,并初始化具有客户端必要信息的数据结构。

  3. 客户端执行复制,更新数据结构以将有关复制的任何必要信息传达给本地存储。

  4. 执行复制后,客户端调用 IOSTX::SetSyncResultIOSTX::SyncEnd 以通知本地存储特定复制的完成情况。

备注

客户端始终调用 IOSTX::SyncEnd 以结束客户端为特定状态已开始的复制。 根据客户端需要同步的总体数据,客户端可能会多次调用 IOSTX::SyncBegIOSTX::SyncEnd 对。

状态表

备注

下表列出了复制状态机中所有有效状态,以及相应的状态标识符和数据结构。 在" 数据复制" 列中,术语"items"包括邮件、日历、联系人、便笺、日记和任务项目。 将更改从本地存储复制到服务器时,请使用指定"UPLOAD"的状态标识符和前缀为"UP"的数据结构 (例如, LR_SYNC_UPLOAD_HIERARCHY UPHIER ) 。 将更改从服务器复制到本地存储时,请使用指定"DOWNLOAD"的状态标识符和前缀为"DN"的数据结构 (例如 LR_SYNC_DOWNLOAD_HIERARCHY 和 DNHIER ) 。

State
数据复制
状态标识符
数据结构
空闲状态

LR_SYNC_IDLE

同步状态
文件夹或项目
LR_SYNC
SYNC
Upload层次结构状态
Folders
LR_SYNC_UPLOAD_HIERARCHY
UPHIER
Upload文件夹状态
Folder
LR_SYNC_UPLOAD_FOLDER
UPFLD
同步内容状态
项目
LR_SYNC_CONTENTS
SYNCCONT
Upload表状态
项目
LR_SYNC_UPLOAD_TABLE
UPTBL
Upload邮件状态
Item
LR_SYNC_UPLOAD_MESSAGE
UPMSG
Upload读取状态
项目
LR_SYNC_UPLOAD_MESSAGE_READ
UPREAD
Upload删除状态
项目
LR_SYNC_UPLOAD_MESSAGE_DEL
UPDEL
下载层次结构状态
Folders
LR_SYNC_DOWNLOAD_HIERARCHY
DNHIER
下载表状态
项目
LR_SYNC_DOWNLOAD_TABLE
DNTBL
下载邮件头状态
邮件头
LR_SYNC_DOWNLOAD_HEADER
HDRSYNC

示例:上载文件夹层次结构

上载文件夹层次结构时,将执行以下步骤:

步骤
操作
State
相关数据结构
1. 客户端使用 IOSTX::SyncBeg 启动层次结构上载 LR_SYNC_UPLOAD_HIERARCHY
UPHIER
2. Outlook 2013 或 Outlook 2010 会向 UPHIER 填充 客户端的信息。 这包括初始化 [out] 参数: iEnt 设置为 0, cEnt 设置为 层次结构中需要上载的文件夹数。 LR_SYNC_UPLOAD_HIERARCHY
UPHIER
3. 客户端执行实际的层次结构上载。 例如,如果 cEnt 为 10,则对于这 10 个文件夹,客户端将调用 IOSTX::SyncBeg,以指定用于上载文件夹的适当状态标识符和数据结构。 LR_SYNC_UPLOAD_FOLDER
UPFLD
4. Outlook 2013 或 Outlook 2010 通过初始化 UPFLD 的 [out] 参数填充 UPFLD,包括文件夹上载的原因、指向文件夹对象的指针以及文件夹的条目 ID。 LR_SYNC_UPLOAD_FOLDER
UPFLD
5. 客户端上载指定的文件夹。 LR_SYNC_UPLOAD_FOLDER
UPFLD
6. 客户端将文件夹上载完成通知本地存储:成功后,客户端使用 UPF_OKUPFLD 中设置 [in] 参数 ulFlags,然后调用 IOSTX::SetSyncResult (S_OK)IOSTX::SyncEnd。 失败后,客户端不会设置 ulFlagsUPF_OK 标志。 它调用 IOSTX::SetSyncResult,从而传递 HRESULT 值和 IOSTX::SyncEnd LR_SYNC_UPLOAD_FOLDER
UPFLD
7. 如果 UPF_OK,Outlook 2013 或 Outlook 2010 将清除上载文件夹的内部请求。 然后,无论 ulFlags 的状态如何,它都将清理所有内部记帐信息。 尽管层次结构中仍有文件夹要上载 (iEnt 仍小于 cEnt) ,但客户端和 Outlook 2013 或 Outlook 2010 重复步骤 3 至 7。 LR_SYNC_UPLOAD_FOLDER
UPFLD
8. 客户端将层次结构上载完成情况通知本地存储:成功后,客户端使用 UPH_OKUPHIER 中设置 [in] 标志,然后调用 IOSTX::SetSyncResult (S_OK)IOSTX::SyncEnd。 失败时,客户端不会设置 UPH_OK标志。 它调用 IOSTX::SetSyncResult,从而传递 HRESULT 值和 IOSTX::SyncEnd LR_SYNC_UPLOAD_HIERARCHY
UPHIER
9. 如果 UPH_OK,Outlook 2013 或 Outlook 2010 将清除上载层次结构的内部请求。 然后,无论 ulFlags 的状态如何,它都将清理所有内部记帐信息。 LR_SYNC_UPLOAD_HIERARCHY
UPHIER

另请参阅

关于复制 API
MAPI 常量
SYNCSTATE