IMAPIProp::SetProps
Область применения: Outlook 2013 | Outlook 2016
Обновления одно или несколько свойств.
HRESULT SetProps(
ULONG cValues,
LPSPropValue lpPropArray,
LPSPropProblemArray FAR * lppProblems
);
Параметры
cValues
[в] Количество значений свойств, на которые указывает параметр lpPropArray . Параметр cValues не должен иметь значение 0.
lpPropArray
[в] Указатель на массив структур SPropValue , содержащих обновляемые значения свойств.
lppProblems
[вход, выход] На входных данных — указатель на указатель на структуру SPropProblemArray ; в противном случае значение NULL, указывающее на отсутствие необходимости в информации об ошибке. Если lppProblems является допустимым указателем на входные данные, SetProps возвращает подробные сведения об ошибках при обновлении одного или нескольких свойств.
Возвращаемое значение
S_OK
Свойства были успешно обновлены.
Следующие значения могут быть возвращены в структуре SPropProblemArray , но не в качестве возвращаемых значений для SetProps:
MAPI_E_BAD_CHARWIDTH
Либо был установлен флаг MAPI_UNICODE и реализация не поддерживает Юникод, либо MAPI_UNICODE не задан и реализация поддерживает только Юникод.
MAPI_E_COMPUTED
Невозможно обновить свойство, так как оно доступно только для чтения и вычисляется поставщиком услуг, отвечающим за объект .
MAPI_E_INVALID_TYPE
Недопустимый тип свойства.
MAPI_E_NO_ACCESS
Предпринята попытка изменить объект, доступный только для чтения, или получить доступ к объекту, для которого у пользователя недостаточно разрешений.
MAPI_E_NOT_ENOUGH_MEMORY
Невозможно обновить свойство, так как оно больше размера буфера удаленного вызова процедур (RPC).
MAPI_E_UNEXPECTED_TYPE
Тип свойства не является типом, ожидаемым реализацией вызова.
Примечания для исполнителей
Игнорируйте тег свойства PR_NULL (PidTagNull) и все свойства с типом PT_ERROR. Не вносите изменения и не сообщайте о проблемах в структуре SPropProblemArray .
Возвращает MAPI_E_INVALID_PARAMETER, если свойство типа PT_OBJECT включено в массив значений свойства. Также возвращается эта ошибка, если свойство с несколькими значениями включено в массив, а его член cValues имеет значение 0.
Если вызов в целом выполнен успешно, но возникли проблемы с настройкой некоторых свойств, верните S_OK и поместите сведения о проблемах в соответствующую запись структуры SPropProblemArray , на которую указывает параметр lppProblems .
Примечания для вызывающих методов
В зависимости от поставщика услуг вы также можете изменить тип свойства, передав тег свойства, содержащий тип, отличный от типа, используемого ранее с заданным идентификатором свойства.
Если добавить тег свойства для свойства, которое не поддерживается объектом, и реализация SetProps позволяет создавать новые свойства, свойство добавляется в объект . Любое предыдущее значение, хранящееся с идентификатором свойства, которое использовалось для нового свойства, отбрасывается.
Обратите внимание, что возвращаемое значение S_OK не гарантирует успешное обновление всех свойств. Некоторые поставщики кэшируют вызовы SetProps до тех пор, пока не получат вызов, требующий вмешательства поставщика, например IMAPIProp::SaveChanges или IMAPIProps::GetProps. Таким образом, можно получать значения ошибок, связанные с вызовом SetProps с последующими вызовами.
Если SetProps возвращает S_OK, проверка структуру SPropProblemArray, на которую указывает lppProblems, для проблем с обновлением отдельных свойств. Если SetProps возвращает ошибку, не проверка массив проблем со свойством. Вместо этого вызовите метод IMAPIProp::GetLastError объекта.
При обновлении больших свойств SetProps может завершиться ошибкой и вернуть MAPI_E_NOT_ENOUGH_MEMORY. Максимальный размер свойств отсутствует, и у разных объектов могут быть разные ограничения. Если вы работаете с потенциально большими свойствами, будьте готовы вызвать метод IMAPIProp::OpenProperty с IID_IStream в качестве идентификатора интерфейса, если SetProps возвращает это значение ошибки.
Вызовите функцию MAPIFreeBuffer , чтобы освободить структуру SPropProblemArray .
Справочные материалы по MFCMAPI
Пример кода MFCMAPI указан в приведенной ниже таблице.
Файл | Функция | Comment |
---|---|---|
PropertyEditor.cpp |
CPropertyEditor::WriteSPropValueToObject |
MFCMAPI использует метод IMAPIProp::SetProps для записи свойства обратно в объект после изменения свойства. |