@jaricardodev/ews-javascript-api
Version:
EWS Managed api in JavaScript
73 lines (68 loc) • 3.17 kB
text/typescript
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;
}
}
}
}