共用方式為


MAPI 具名屬性

適用於:Outlook 2013 |Outlook 2016

MAPI 提供將名稱指派給屬性、將這些名稱對應至唯一標識碼,以及讓此對應永續性的功能。 標識元對應的持續性名稱可確保屬性名稱在會話之間保持有效。

若要定義具名屬性,用戶端或服務提供者會組成名稱,並將它儲存在 MAPINAMEID 結構中。 由於名稱是由 128 位全域唯一標識碼或 GUID 以及 Unicode 字元字串或 32 位數值所組成,因此具名屬性的建立者可以建立有意義的名稱,而不必擔心重複。 名稱是唯一的,不考慮其標識碼的值即可使用。

若要支援具名屬性,服務提供者會實作兩種方法 : IMAPIProp::GetIDsFromNamesIMAPIProp::GetNamesFromIDs - 在名稱和標識符之間轉譯,並允許其 IMAPIProp::GetPropsIMAPIProp::SetProps 方法擷取及修改具名屬性範圍內的標識符屬性。 具名屬性標識碼的範圍介於0x8000和0xFFFE之間。

任何實作 IMAPIProp 介面的物件都可以支援具名屬性。 需要通訊簿提供者,才能將來自其他提供者的專案複製到其容器,以及可用來建立任意訊息類型的訊息存放區提供者,才能提供這項支援。 這是所有其他服務提供者的選項。 不支援具名屬性的提供者會從 GetIDsFromNamesGetNamesFromIDs 方法傳回MAPI_E_NO_SUPPORT,並拒絕設定標識碼為 0x8000 或更新版本的任何屬性,並在 SPropProblemarray 中傳回MAPI_E_UNEXPECTED。

建立屬性名稱是用戶端定義現有或自定義訊息類別新屬性的一種方式。 服務提供者可以使用具名屬性來公開其傳訊系統的獨特功能。 然而,具名屬性的另一個用處是提供替代方式來參照下列標識符的屬性0x8000。

例如,用戶端可以使用類似下列程式代碼的程式代碼來擷取物件所有具名屬性的名稱:

LPSPropTagArray FAR *    lppPropTags = NULL;
LPGUID                   lpPropSetGuid = NULL;
ULONG FAR *              lpcPropNames;
LPMAPINAMEID FAR * FAR * lpppPropNames;
lpMAPIProp->GetNamesFromIDs (lppPropTags,
                             lpPropSetGuid,
                             0,
                             lpcPropNames,
                             lpppPropNames);
 

若要從PS_PUBLIC_STRINGS屬性集要求所有名稱,用戶端會將屬性集參數中的 NULL 取代為 PS_PUBLIC_STRINGS,如下所示:

LPSPropTagArray FAR *    lppPropTags = NULL;
LPGUID                   lpPropSetGuid = &PS_PUBLIC_STRINGS;
ULONG FAR *              lpcPropNames;
LPMAPINAMEID FAR * FAR * lpppPropNames;
lpMAPIProp->GetNamesFromIDs (lppPropTags,
                             lpPropSetGuid,
                             0,
                             lpcPropNames,
                             lpppPropNames);
 

另請參閱