0

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プロパティに格納することでした (以下の回答を参照)。それは機能しますが、少しハックな気がします。より良い方法はありますか?

4

2 に答える 2

1

当面の私の回避策は次のとおりです(関連する部分のみ)。複数の値を 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);
于 2015-02-16T21:18:30.480 に答える
0
$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] => 
                                    )

                            )
于 2016-06-24T11:46:17.890 に答える