IABLogon::PrepareRecips
適用対象: Outlook 2013 | Outlook 2016
メッセージング システムで後で使用できるように受信者リストを準備します。
HRESULT PrepareRecips(
ULONG ulFlags,
LPSPropTagArray lpPropTagArray,
LPADRLIST lpRecipList
);
パラメーター
ulFlags
[in]返される文字列内のテキストの型を制御するフラグのビットマスク。 次のフラグを設定できます。
- MAPI_CACHE_ONLY: 名前解決を実行するには、オフライン アドレス帳のみを使用します。 たとえば、このフラグを使用すると、クライアント アプリケーションがグローバル アドレス一覧 (GAL) をキャッシュ交換モードで開き、クライアントとサーバー間のトラフィックを作成せずにキャッシュからそのアドレス帳内のエントリにアクセスできます。 このフラグは、Exchange アドレス帳プロバイダーによってのみサポートされます。
lpPropTagArray
[in]更新が必要なプロパティ (存在する場合) を示すプロパティ タグの配列を含む SPropTagArray 構造体へのポインター。 lpPropTagArray パラメーターには NULL を指定できます。
lpRecipList
[in]受信者リストを保持する ADRLIST 構造体へのポインター。
戻り値
S_OK
受信者リストが正常に準備されました。
MAPI_E_NOT_FOUND
lpRecipList パラメーター内の 1 つ以上の受信者が存在しません。
クライアントは MAPI IAddrBook::P repareRecips メソッドを呼び出して、1 つ以上の受信者のプロパティセットを変更または再配置します。 受信者は、送信メッセージの受信者リストに含まれている場合と含まれていない場合があります。 MAPI は、この呼び出しをアドレス帳プロバイダーの IABLogon::P repareRecips メソッドに転送します 。
IABLogon::P repareRecips は、次の 4 つのメイン タスクを実行します。
lpRecipList パラメーターが指すアドレス一覧内のすべての受信者に、長期的なエントリ識別子があることを確認します。
すべての受信者が 、lpPropTagArray パラメーターによって指されるプロパティ値配列で指定されたプロパティを持っていることを確認します。
呼び出しの前に存在していた他のプロパティの前に、プロパティ値配列のプロパティが表示されるようにします。
ADRLIST 構造体内の各受信者の ADRENTRY 構造体のプロパティの順序が、プロパティ値配列と同じであることを確認します。
lpRecipList パラメーターの ADRENTRY 構造体には、受信者ごとに 1 つの ADRENTRY 構造体が含まれています。 各 ADRENTRY 構造体には、受信者のプロパティを記述する SPropValue 構造体の配列が含まれています。 IABLogon::P repareRecips が返されると、各受信者の SPropValue 構造体配列には、lpPropTagArray のプロパティと受信者の他のプロパティが含まれます。
実装に関するメモ
IABLogon::P repareRecips の実装には、特定の順序でプロパティを配置し、プロパティ値を取得し、短期エントリ識別子を長期的なエントリ識別子に変換する必要があります。 lpPropTagArray パラメーターで要求されるプロパティは、lpRecipList パラメーター内の各受信者の ADRENTRY 構造体に関連付けられているプロパティ値配列の先頭にある必要があります。 これらのプロパティの値が存在しない場合は、エントリ識別子を使用して関連付けられているメッセージング ユーザーまたは配布リストを開き、不足しているプロパティ値を取得します。
lpRecipList で渡された各 SPropValue 構造体を個別に割り当てて、構造体を個別に解放できるようにします。 文字列プロパティのデータを格納するために 、SPropValue 構造体に追加の領域を割り当てる必要がある場合は、 MAPIAllocateBuffer 関数を使用して、プロパティ値の配列全体に追加の領域を割り当てます。 MAPIFreeBuffer 関数を使用して元のプロパティ値配列を解放し、MAPIAllocateMore 関数を使用して、必要な追加のメモリを割り当てます。
IABLogon::P repareRecips を実装するには、次の手順を使用します。
lpPropTagArray パラメーターのエントリを確認します。 プロパティ値配列が空の場合、実行する作業はありません。 成功値を返します。
lpRecipList パラメーターで各受信者を処理します。 リスト内の受信者ごとに 1 つの ADRENTRY 構造体メンバーがあります。 次の種類の受信者を無視します。
ADRENTRY 構造体の rgPropVals メンバーにエントリ識別子がない受信者 (つまり、未解決の受信者)。
プロバイダーに属していないエントリ識別子を持つ受信者。 これらの受信者は、別のアドレス帳プロバイダーに渡されます。
受信者を開き、受信者に対して既に設定されているプロパティを取得します。
lpRecipList で指定されたプロパティ値配列を、GetProps から返されるプロパティの配列とマージします。 両方のプロパティ配列に同じプロパティが存在する場合は、 lpRecipList の値を使用します。
lpRecipList プロパティ値配列が必要なすべてのプロパティを保持するのに十分な大きさの場合は、マージされた配列に置き換えてください。 lpRecipList プロパティ値配列の大きさが十分でない場合は、新しく割り当てられた配列に置き換えます。 新しい配列の 各 cValues メンバーに更新された値があることを確認します。
lpPropTagArray パラメーター内の 1 つ以上のプロパティを認識しない場合は、受信者の ADRENTRY 構造体のプロパティの種類を PT_ERROR に設定し、プロパティ値を MAPI_E_NOT_FOUND または プロパティを使用できないより具体的な理由を示す別の値に設定します。 PT_ERRORの詳細については、「 プロパティの種類」を参照してください。
注:
IABLogon::P repareRecips に渡される ADRLIST 構造体を再割り当てしたり、エントリ数を変更したりしないでください。