MFCMAPI で確認できるアイテムやフォルダーの PR_ENTRYID の値を、Microsoft Graph で使用できる REST ID 形式に変換する方法を紹介します。
たとえば PR_ENTRYID の値が以下だったとします。
000000008D6CA63CDFB18D44933B27DCE7E85C5207001E0CC5CE7C4D0446BE4F970F82B9B02600000000010C00001E0CC5CE7C4D0446BE4F970F82B9B0260002FC5A18060000
これはバイナリ データを 16 進数で表現しています。Microsoft Graph の translateExchangeIds で PR_ENTRYID からの変換ができますが、このままでは使用できません。以下の処理を行います。
- バイト配列に変換し、
- Base64 でエンコードして、
- URL Safe に書き換える
PowerShell であれば、以下のように上記のステップ 1 と 2 を行うことができます。$Base64EntryId には Base64 エンコードされた結果が入っています。
$PR_ENTRYID = "000000008D6CA63CDFB18D44933B27DCE7E85C5207001E0CC5CE7C4D0446BE4F970F82B9B02600000000010C00001E0CC5CE7C4D0446BE4F970F82B9B0260002FC5A18060000"
$Base64EntryID = [Convert]::ToBase64String((0..($PR_ENTRYID.Length - 1) | ?{$_ % 2 -eq 0} | %{[Convert]::ToByte($PR_ENTRYID.Substring($_, 2), 16)}))
さらにこれに対して「+」を「-」に置換し、「/」を「_」に置換して、末尾の「=」を「=」の数を表す数字に置き換えます。
$Base64EntryID = $Base64EntryID.Replace('+', '-').Replace('/', '_')
$Base64EntryID -match "=+?$" ? ($Base64EntryID.Replace($Matches.Values, $Matches.Values.Length)) : $Base64EntryID
$Base64EntryID には URL Safe に書き換えられた値が入っています。以下のような値になっているはずです。
AAAAAI1spjzfsY1Ekzsn3OfoXFIHAB4Mxc58TQRGvk-XD4K5sCYAAAAAAQwAAB4Mxc58TQRGvk-XD4K5sCYAAvxaGAYAAA2
これで translateExchangeIds で使用できる形式になりました。以下のようにリクエストを実行することで REST ID へ変換されます。
POST https://graph.microsoft.com/v1.0/me/translateExchangeIds
{
"inputIds" : [
"AAAAAI1spjzfsY1Ekzsn3OfoXFIHAB4Mxc58TQRGvk-XD4K5sCYAAAAAAQwAAB4Mxc58TQRGvk-XD4K5sCYAAvxaGAYAAA2"
],
"sourceIdType": "entryId",
"targetIdType": "restId"
}
以下のようなレスポンスを取得できれば成功です。targetId は REST ID 形式になっていますので、Microsoft Graph で Id として使用できます。
{
"@odata.context": "https://graph.microsoft.com/v1.0/$metadata#Collection(microsoft.graph.convertIdResult)",
"value": [
{
"sourceId": "AAAAAI1spjzfsY1Ekzsn3OfoXFIHAB4Mxc58TQRGvk-XD4K5sCYAAAAAAQwAAB4Mxc58TQRGvk-XD4K5sCYAAvxaGAYAAA2",
"targetId": "AAMkADY0MzFiYWE4LTM2YzUtNDFjZi05MDEyLTg5NjNhZjQ4ZmM5MgBGAAAAAACNbKY837GNRJM7J9zn6FxSBwAeDMXOfE0ERr5Plw_CubAmAAAAAAEMAAAeDMXOfE0ERr5Plw_CubAmAAL8WhgGAAA="
}
]
}