UNPKG

@jaricardodev/ews-javascript-api

Version:
73 lines (68 loc) 3.17 kB
import {Item} from "../ServiceObjects/Items/Item"; import {ExchangeService} from "../ExchangeService"; import {ServiceResult} from "../../Enumerations/ServiceResult"; import {ItemInfo} from "../ServiceObjects/Items/ItemInfo"; import {EwsServiceJsonReader} from "../EwsServiceJsonReader"; import {XmlElementNames} from "../XmlElementNames"; import {Convert} from "../../ExtensionMethods"; import {EwsLogging} from "../EwsLogging"; import {ServiceResponse} from "./ServiceResponse"; export class UpdateItemResponse extends ServiceResponse { private item: Item = null; private returnedItem: Item = null; private conflictCount: number = 0; get ReturnedItem(): Item { return this.returnedItem; } get ConflictCount(): number { return this.conflictCount; } constructor(item: Item) { super(); EwsLogging.Assert( item != null, "UpdateItemResponse.ctor", "item is null"); this.item = item; } GetObjectInstance(service: ExchangeService, xmlElementName: string): Item { this.returnedItem = new ItemInfo().CreateEwsObjectFromXmlElementName<Item>(service, xmlElementName); return this.returnedItem; } Loaded(): void { if (this.Result == ServiceResult.Success) { this.item.ClearChangeLog(); } } ReadElementsFromXmlJsObject(responseObject: any, service: ExchangeService): void { EwsServiceJsonReader.ReadServiceObjectsCollectionFromJson<Item>( responseObject, service, XmlElementNames.Items, this.GetObjectInstance.bind(this), false, /* clearPropertyBag */ null, /* requestedPropertySet */ false); /* summaryPropertiesOnly */ // ConflictResults was only added in 2007 SP1 so if this was a 2007 RTM request we shouldn't expect to find the element if (!service.Exchange2007CompatibilityMode) { this.conflictCount = Convert.toNumber(responseObject[XmlElementNames.ConflictResults][XmlElementNames.Count]); } // If UpdateItem returned an item that has the same Id as the item that // is being updated, this is a "normal" UpdateItem operation, and we need // to update the ChangeKey of the item being updated with the one that was // returned. Also set returnedItem to indicate that no new item was returned. // // Otherwise, this in a "special" UpdateItem operation, such as a recurring // task marked as complete (the returned item in that case is the one-off // task that represents the completed instance). // // Note that there can be no returned item at all, as in an UpdateItem call // with MessageDisposition set to SendOnly or SendAndSaveCopy. if (this.returnedItem != null) { if (this.item.Id.UniqueId == this.returnedItem.Id.UniqueId) { this.item.Id.ChangeKey = this.returnedItem.Id.ChangeKey; this.returnedItem = null; } } } }