关于复制状态机
适用于:Outlook 2013 | Outlook 2016
本主题包含用于数据复制的状态Microsoft Outlook 2013 Microsoft Outlook 2010概述。
备注
复制 API 必须完全按照本主题中的说明实现,才能有用或受支持。 复制 API 仅可用于将 Outlook 2013 或 Outlook 2010 更改复制到服务器和从服务器复制。
IOSTX 和状态机
客户端按顺序调用 IOSTX::SyncBeg、IOSTX::SyncEnd、IOSTX::SyncHdrBeg 和 IOSTX::SyncHdrEnd,以在本地存储与服务器之间同步 Outlook 2013 或 Outlook 2010 文件夹和项目。 实际的调用顺序取决于需要复制的数据 (例如, Outlook 2013 或 Outlook 2010 文件夹、Outlook 2013 或 Outlook 2010 文件夹、邮件项目、日历项目等) 以及同步 (无论是从本地存储上载到服务器还是从服务器下载到本地存储的方向) 。 下面是典型的调用序列:
客户端调用 IOSTX::SyncBeg 以开始复制,并指定状态标识符和指向相应数据结构地址的指针。
Outlook 2013 或 Outlook 2010 分配数据结构,并初始化具有客户端必要信息的数据结构。
客户端执行复制,更新数据结构以将有关复制的任何必要信息传达给本地存储。
执行复制后,客户端调用 IOSTX::SetSyncResult 和 IOSTX::SyncEnd 以通知本地存储特定复制的完成情况。
备注
客户端始终调用 IOSTX::SyncEnd 以结束客户端为特定状态已开始的复制。 根据客户端需要同步的总体数据,客户端可能会多次调用 IOSTX::SyncBeg 和 IOSTX::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_OK 在 UPFLD 中设置 [in] 参数 ulFlags,然后调用 IOSTX::SetSyncResult (S_OK) 和 IOSTX::SyncEnd。 失败后,客户端不会设置 ulFlags 和 UPF_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_OK 在 UPHIER 中设置 [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 |