Можно ли установить несколько пользовательских свойств для элемента календаря с помощью PHP EWS? Я не смог найти никакой документации по этому вопросу, кроме этот пример получения расширенных свойств. Мне удалось заставить его работать для одного поля, но мне интересно, если вы можете установить несколько пользовательских свойств. API
кажется, намекает на эту возможность.
Например, следующие свойства определены в ExtendedPropertyType.php:
class EWSType_ExtendedPropertyType extends EWSType
{
/**
* ExtendedFieldURI property
*
* @var EWSType_PathToExtendedFieldType
*/
public $ExtendedFieldURI;
/**
* Value property
*
* @var string
*/
public $Value;
/**
* Values property
*
* @var EWSType_NonEmptyArrayOfPropertyValuesType
*/
public $Values;
}
$Values
Свойство выглядит как массив, но я так и не смог ничего там успешно сохранить. Мой обходной путь состоял в том, чтобы свернуть массив значений в строку JSON и сохранить его в $Value
собственность (см. мой ответ ниже). Это работает, но кажется немного хакерским. Есть ли способ лучше?
Вот мой обходной путь в настоящее время (только соответствующие части). Сохраните несколько значений в виде строки JSON в $Value
имущество:
Установите свойство при сохранении элемента календаря:
// define custom property
$extendedProperty = new EWSType_PathToExtendedFieldType();
$extendedProperty->PropertyName = 'MyCustomProperty';
$extendedProperty->PropertyType = EWSType_MapiPropertyTypeType::STRING;
$extendedProperty->DistinguishedPropertySetId = EWSType_DistinguishedPropertySetIdType::PUBLIC_STRINGS;
$request->Items->CalendarItem->ExtendedProperty = new EWSType_ExtendedPropertyType();
$request->Items->CalendarItem->ExtendedProperty->ExtendedFieldURI = $extendedProperty;
// store custom data as JSON string
$custom_data = array(
'scheduled_by' => 'staff',
'send_to' => $users_email
);
$request->Items->CalendarItem->ExtendedProperty->Value = json_encode($custom_data);
Получить свойство при чтении календаря:
// initialize the request
$request = new EWSType_FindItemType();
$request->Traversal = EWSType_ItemQueryTraversalType::SHALLOW;
$request->ItemShape = new EWSType_ItemResponseShapeType();
$request->ItemShape->BaseShape = EWSType_DefaultShapeNamesType::ALL_PROPERTIES;
$request->ItemShape->AdditionalProperties = new EWSType_NonEmptyArrayOfPathsToElementType();
// get custom property
$extendedProperty = new EWSType_PathToExtendedFieldType();
$extendedProperty->PropertyName = 'MyCustomProperty';
$extendedProperty->PropertyType = EWSType_MapiPropertyTypeType::STRING;
$extendedProperty->DistinguishedPropertySetId = EWSType_DistinguishedPropertySetIdType::PUBLIC_STRINGS;
$request->ItemShape->AdditionalProperties->ExtendedFieldURI = array($extendedProperty);
Декодируйте JSON для каждого элемента календаря в ответе:
// get JSON data from custom property
$custom_data = json_decode($item->ExtendedProperty->Value, true);
$oProperty = new EWSType\ExtendedPropertyType();
$oProperty->ExtendedFieldURI = ExchangeConnector_Connection_Connector::getExtendedFieldUri();
$oProperty->Value = $this->_iCRMId;
if ( isset( $oItem->ExtendedProperty ) ) {
if ( !is_array( $oItem->ExtendedProperty ) ) {
$oItem->ExtendedProperty = [ $oItem->ExtendedProperty ];
}
$oItem->ExtendedProperty[] = $oProperty;
} else {
$oItem->ExtendedProperty = $oProperty;
}
Это работает для меня. print_r выглядит так:
[ExtendedProperty] => Array
(
[0] => PhpEws\DataType\ExtendedPropertyType Object
(
[ExtendedFieldURI] => PhpEws\DataType\PathToExtendedFieldType Object
(
[DistinguishedPropertySetId] =>
[PropertySetId] =>
[PropertyTag] => 0x3A45
[PropertyName] =>
[PropertyId] =>
[PropertyType] => String
)
[Value] => Herr
[Values] =>
)
[1] => PhpEws\DataType\ExtendedPropertyType Object
(
[ExtendedFieldURI] => PhpEws\DataType\PathToExtendedFieldType Object
(
[DistinguishedPropertySetId] =>
[PropertySetId] => ef11e53c-f1b8-45bd-8d2a-db90c5498569
[PropertyTag] =>
[PropertyName] => crm_record_id
[PropertyId] =>
[PropertyType] => String
)
[Value] => 76
[Values] =>
)
)