ОбъектМетаданных (MetadataObject)
Inheritance: MetadataBase
        /// <summary>
        /// Create
        /// </summary>
        /// <param name="session"></param>
        /// <param name="ptr"></param>
        /// <returns></returns>
        internal static MetadataObject Create(Session session, object ptr)
        {
            string fullName = GetV8Property(ptr, FullNameProperty) as string;

            MetadataObject meta;

            if (fullName.StartsWith(RussianConsts.Catalog))
            {
                meta = new MetadataObject(session, MetadataType.Catalog, ptr);
            }
            else if (fullName.StartsWith(RussianConsts.Document))
            {
                meta = new DocumentMetadata(session, ptr);
            }
            else
            {
                meta = new MetadataObject(session, MetadataType.Unknown, ptr);
            }

            meta.PutToCache(FullNameProperty, fullName);
            
            return meta;
        }
        /// <summary>
        /// Create
        /// </summary>
        /// <param name="session"></param>
        /// <param name="ptr"></param>
        /// <returns></returns>
        internal static MetadataObject Create(Session session, object ptr)
        {
            string fullName = GetV8Property(ptr, FullNameProperty) as string;

            MetadataObject meta;

            if (fullName.StartsWith(RussianConsts.Catalog))
            {
                meta = new MetadataObject(session, MetadataType.Catalog, ptr);
            }
            else if (fullName.StartsWith(RussianConsts.Document))
            {
                meta = new DocumentMetadata(session, ptr);
            }
            else
            {
                meta = new MetadataObject(session, MetadataType.Unknown, ptr);
            }

            meta.PutToCache(FullNameProperty, fullName);

            return(meta);
        }
 private void ReadV8XmlAsRequisite(XmlElement valueTag, MetadataObject reqMeta)
 {
     object value;
     if (reqMeta.Type.TryParseV8XmlValue(valueTag, out value))
     {
         PutToCache(valueTag.Name, value);
     }
 }
        internal protected object ConvertV8Value(object obj, TypeDescription typeDescription)
        {
            if (!IsInternalV8Object(obj))
            {
                return(obj);
            }


            if (typeDescription != null)
            {
                var types = typeDescription.Types;

                if (types.Length == 1)
                {
                    var typeInfo = types[0];

                    switch (typeInfo.Type)
                    {
                    case TypeEnum.DocumentRef:
                        return(new DocumentRef(this.Session, typeInfo.ReferenceTypeName, obj));

                    case TypeEnum.CatalogRef:
                        return(new CatalogRef(this.Session, typeInfo.ReferenceTypeName, obj));

                    case TypeEnum.EnumRef:
                        return(new EnumRef(this.Session, typeInfo.ReferenceTypeName, obj));
                    }
                }
            }

            object ptrMeta;

            try
            {
                ptrMeta = InvokeV8Method(obj, RussianConsts.Metadata, new object[0]);
            }
            catch
            {
                ptrMeta = null;
            }

            if (ptrMeta == null)
            {
                return(null);
            }


            MetadataObject metadata = MetadataObject.Create(this.Session, ptrMeta);

            switch (metadata.MetadataType)
            {
            case MetadataType.Catalog:
                return(new CatalogRef(this.Session, metadata.Name, obj));

            case MetadataType.Document:
                return(new DocumentRef(this.Session, metadata.Name, obj));
            }

            //not implemented

            return(null);
        }