Пример #1
0
        private DomainObjectData loadFolderAndIncident(DomainObjectDataSet dataSet, GetMailMsgInfoRequest request, IXExecutionContext context)
        {
            DomainObjectData xobjFolder;

            if (request.ObjectType == "Folder")
            {
                xobjFolder = dataSet.GetLoadedStub("Folder", request.ObjectID);
                dataSet.LoadProperty(context.Connection, xobjFolder, "Name");
            }
            else
            {
                XDbCommand cmd = context.Connection.CreateCommand(
                    @"SELECT f.ObjectID as FolderID, f.Name as FolderName, i.Name as IncidentName, i.Number as IncidentNumber
					FROM Incident i JOIN Folder f ON i.Folder=f.ObjectID 
					WHERE i.ObjectID = @IncidentID"                    );
                cmd.Parameters.Add("IncidentID", DbType.Guid, ParameterDirection.Input, false, request.ObjectID);
                DomainObjectData xobjIncident = dataSet.GetLoadedStub("Incident", request.ObjectID);
                using (IDataReader reader = cmd.ExecuteReader())
                {
                    if (!reader.Read())
                    {
                        throw new XObjectNotFoundException("Incident", request.ObjectID);
                    }
                    xobjFolder = dataSet.GetLoadedStub("Folder", reader.GetGuid(reader.GetOrdinal("FolderID")));
                    xobjFolder.SetLoadedPropValue("Name", reader.GetString(reader.GetOrdinal("FolderName")));
                    xobjIncident.SetLoadedPropValue("Name", reader.GetString(reader.GetOrdinal("IncidentName")));
                    xobjIncident.SetLoadedPropValue("Number", reader.GetInt32(reader.GetOrdinal("IncidentNumber")));
                    xobjIncident.SetLoadedPropValue("Folder", xobjFolder.ObjectID);
                }
            }
            return(xobjFolder);
        }
Пример #2
0
        /// <summary>
        /// Выполнение команды - типизированный вариант
        /// </summary>
        /// <param name="request">Запрос команды, должен иметь тип XGetPropertyRequest</param>
        /// <param name="context">Контекст выполнения команды</param>
        /// <returns>XGetPropertyResponse</returns>
        public new XGetPropertyResponse Execute(XGetPropertyRequest request, IXExecutionContext context)
        {
            DomainObjectDataSet dataSet = new DomainObjectDataSet(context.Connection.MetadataManager.XModel);
            // создадим болванку объекта
            DomainObjectData xobj = dataSet.GetLoadedStub(request.TypeName, request.ObjectID);

            // загрузим свойства
            dataSet.LoadProperty(context.Connection, xobj, request.PropName);
            // создадим форматировщик
            DomainObjectDataXmlFormatter formatter = new DomainObjectDataXmlFormatter(context.Connection.MetadataManager);
            // и сериализуем свойство в XML
            XmlElement xmlProperty = formatter.SerializeProperty(xobj, request.PropName);

            // по всем объектам в свойстве (LoadProperty вызывается не только для объектных свойств - еще для bin и text)
            // обработаем объект и все вложенные объекты в прогруженных свойства, расставим атрибуты ограничения доступа
            foreach (XmlElement xmlObject in xmlProperty.SelectNodes("*[*]"))
            {
                DomainObjectData xobjValue = xobj.Context.Find(xmlObject.LocalName, new Guid(xmlObject.GetAttribute("oid")));
                if (xobjValue == null)
                {
                    throw new ApplicationException("Не удалось найти в контексте типизированного объекта DomainObjectData для xml-объекта-значения свойства " + xmlProperty.LocalName + " объекта " + xmlObject.LocalName);
                }
                XmlObjectRightsProcessor.ProcessObject(xobjValue, xmlObject);
            }
            XGetPropertyResponse response = new XGetPropertyResponse(xmlProperty);

            return(response);
        }