Пример #1
0
        internal void RegisterNewItem(ClientXObject <TKind> _child, Guid _collectionOwnerUid, int _fieldId)
        {
            var ownerDescriptor = GetDescriptor(_collectionOwnerUid);
            ClientXObjectDescriptor <TKind> childDescriptor;

            if (m_descriptors.TryGetValue(_child.Uid, out childDescriptor))
            {
                if (!childDescriptor.CollectionOwnerUid.Equals(_collectionOwnerUid))
                {
                    throw new ApplicationException("Object owned by another parent");
                }
                ProcessAddedToCollection(_child, ownerDescriptor, _fieldId);
                return;
                //throw new ApplicationException("Object is not unique");
            }

            var kindId = KindToInt(_child.Kind);
            var report = new XReport(_child.Uid, _child.GetChanges(), kindId, EState.SINGLE);

            m_transport.AddNew(report, m_sessionId, _collectionOwnerUid);

            var descriptor = new ClientXObjectDescriptor <TKind>(_child, this, kindId, _collectionOwnerUid);

            m_descriptors.Add(_child.Uid, descriptor);

            ProcessAddedToCollection(_child, ownerDescriptor, _fieldId);
            _child.SetClientInternal(this);
            _child.OnInstantiationFinished();
        }
Пример #2
0
        /// <summary>
        /// Вызывается для создания дескриптора для нового объекта
        /// </summary>
        /// <param name="_newBorn"></param>
        /// <param name="_client"></param>
        /// <param name="_kindId"></param>
        /// <param name="_parentUid"></param>
        public ClientXObjectDescriptor(ClientXObject <TKind> _newBorn, AbstractXClient <TKind> _client, int _kindId, Guid _parentUid)
            : this(_newBorn.Uid, _client, _parentUid)
        {
            var child = _newBorn as IClientXChildObject <TKind>;

            if (child != null)
            {
                child.SetParent(_parentUid);
            }
            m_instances.Add(_newBorn.GetType(), _newBorn);
            m_instancesCounter.Add(_newBorn, 1);
            Kind = _kindId;
            ResetState();
            _newBorn.Changed += XObjectChanged;
            var changes = _newBorn.GetChanges();

            if (changes.Any())
            {
                Report = new ServerXReport(_newBorn.Uid, _newBorn.GetChanges(), 0, m_client.KindToIntInternal(_newBorn.Kind), EState.SINGLE);
            }
        }