【问题标题】:PHP-EWS: Set multiple extended properties on calendar itemPHP-EWS:在日历项上设置多个扩展属性
【发布时间】:2016-06-24 19:46:17
【问题描述】:

是否可以使用 PHP EWS 在日历项上设置多个自定义属性?除了this example of retrieving extended properties,我找不到任何关于此的文档。我能够让它适用于单个字段,但我想知道您是否可以设置多个自定义属性。 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 属性中(请参阅下面的答案)。这行得通,但感觉有点骇人听闻。有没有更好的办法?

【问题讨论】:

    标签: php calendar php-ews


    【解决方案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);
    

    【讨论】:

      【解决方案2】:
      $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] => 
                                          )
      
                                  )
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多