示例#1
0
        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);
        }