Поделиться через


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 для записи свойства обратно в объект после изменения свойства.

См. также

IMAPIProp::GetLastError

IMAPIProp::GetProps

IMAPIProp::OpenProperty

IMAPIProp::SaveChanges

MAPIFreeBuffer

SPropProblemArray

SPropValue

IMAPIProp : IUnknown