internal static CoreItem CreateNewCoreItem(StoreSession session, ItemCreateInfo itemCreateInfo, VersionedId itemId, bool useAcr, ItemBuilder.MapiMessageCreator mapiMessageCreator) { PersistablePropertyBag persistablePropertyBag = null; CoreItem coreItem = null; bool flag = false; StoreObjectId storeObjectId = null; byte[] changeKey = null; Origin origin = Origin.New; CoreItem result; try { persistablePropertyBag = ItemBuilder.ConstructItemPersistablePropertyBag(session, itemCreateInfo.Schema.AutoloadProperties, useAcr, itemCreateInfo.AcrProfile, mapiMessageCreator); if (itemId != null) { object obj = persistablePropertyBag.TryGetProperty(CoreItemSchema.ReadCnNew); if (obj is byte[] && ((byte[])obj).Length > 0) { changeKey = itemId.ChangeKeyAsByteArray(); storeObjectId = itemId.ObjectId; origin = Origin.Existing; } } coreItem = new CoreItem(session, persistablePropertyBag, storeObjectId, changeKey, origin, ItemLevel.TopLevel, itemCreateInfo.Schema.AutoloadProperties, ItemBindOption.None); flag = true; result = coreItem; } finally { if (!flag) { Util.DisposeIfPresent(coreItem); Util.DisposeIfPresent(persistablePropertyBag); } } return(result); }