public override XResponse Execute(XRequest request, IXExecutionContext context)
        {
            XDataSource ds = context.Connection.GetDataSource(DATASOURCE_NAME);

            ds.ExecuteScalar();

            return(new XResponse());
        }
Esempio n. 2
0
        /// <summary>
        /// Выполняет указанный источник данных; ожидается, что в результате
        /// выполнения этого источника данных получим идентификатор некого
        /// объекта (тип тут не задан)
        /// </summary>
        /// <param name="sDataSourceName">Наименование источника данных</param>
        /// <param name="dictionaryParams">
        /// Хеш параметров; здесь в паре ключ пары - наименование параметра,
        /// значение пары - собственно значение параметра. Последний может быть
        /// типизированным значением, значением в стрковом представленнии.
        /// Технически допустимо значение в виде массива типизированных значений
        /// или их строковых представлений - в этом случае такие данные
        /// приводят к формированию условий виде Param IN (value1, ..., valueN)
        /// </param>
        /// <param name="connection">Соединение с СУБД; на момент вызова д.б. открыто</param>
        /// <returns>Значение ObjectID экземпляра объекта</returns>
        protected Guid processDataSource(
            string sDataSourceName,
            Hashtable dictionaryParams,
            XStorageConnection connection)
        {
            // Получим источник данных, подставим переданные параметры и выполним его:
            XDataSource dataSource = connection.GetDataSource(sDataSourceName);

            dataSource.SubstituteNamedParams(dictionaryParams, true);
            dataSource.SubstituteOrderBy();

            object oResult = dataSource.ExecuteScalar();
            // Ожидается, что в результате мы получаем GUID:
            Guid uidResult = Guid.Empty;

            if (null != oResult && DBNull.Value != oResult)
            {
                uidResult = connection.Behavior.CastGuidValueFromDB(oResult);
            }

            return(uidResult);
        }
Esempio n. 3
0
        /// <summary>
        /// ¬нутренний метод получени¤ данных объекта UserProfile дл¤ пользовател¤
        /// системы, заданного идентификатором (SystemUser.ObjectID).
        /// </summary>
        /// <param name="uidSystemUserID">»дентификатор пользовател¤</param>
        /// <returns>
        /// -- »нифиализированный объект DomainObjectData, описывающий данные UserProfile
        /// -- null, если профил¤ пользовател¤ нет (что, в принципе возможно)
        /// </returns>
        protected DomainObjectData getUserProfile(Guid uidSystemUserID, XStorageConnection connection)
        {
            // ѕолучим идентификатор объекта UserProfile, соответствующего
            // указанному пользователю; дл¤ этого воспользуемс¤ запросом,
            // "зашитым" в data-source:

            // ...параметр запроса - идентификатор пользовател¤:
            XParamsCollection datasourceParams = new XParamsCollection();

            datasourceParams.Add("UserID", uidSystemUserID);
            // ...получение и выполнение источника данных:
            XDataSource dataSource = connection.GetDataSource(DEF_DATASOURCE_NAME);

            dataSource.SubstituteNamedParams(datasourceParams, true);
            dataSource.SubstituteOrderBy();
            object oResult = dataSource.ExecuteScalar();

            // ќжидаетс¤, что в результате мы получаем GUID: если в результате
            // получили null - что говорит об отсутствии профил¤ - возвращаем null:
            Guid uidResult = Guid.Empty;

            if (null != oResult && DBNull.Value != oResult)
            {
                uidResult = connection.Behavior.CastGuidValueFromDB(oResult);
            }
            if (Guid.Empty == uidResult)
            {
                return(null);
            }

            // «агрузка данных профил¤ пользовател¤:
            DomainObjectDataSet dataSet = new DomainObjectDataSet(connection.MetadataManager.XModel);
            DomainObjectData    xobj    = dataSet.Load(connection, "UserProfile", uidResult);

            return(xobj);
        }
Esempio n. 4
0
        public GetMailMsgInfoResponse Execute(GetMailMsgInfoRequest request, IXExecutionContext context)
        {
            if (request.ObjectType != "Incident" && request.ObjectType != "Folder")
            {
                throw new ArgumentException("Поддерживается два типа Incident и Folder, передано: " + request.ObjectType);
            }
            bool bLinkToIncident        = request.ObjectType == "Incident";
            DomainObjectDataSet dataSet = new DomainObjectDataSet(context.Connection.MetadataManager.XModel);
            // загрузим Папку и Инцидент
            DomainObjectData xobjFolder   = loadFolderAndIncident(dataSet, request, context);
            DomainObjectData xobjIncident = null;

            if (bLinkToIncident)
            {
                xobjIncident = dataSet.Find("Incident", request.ObjectID);
            }

            // Получим путь к папке от корневой
            XDataSource ds       = context.Connection.GetDataSource("GetFolderPath");
            Hashtable   dsParams = new Hashtable();

            dsParams.Add("FolderID", xobjFolder.ObjectID);
            ds.SubstituteNamedParams(dsParams, true);
            GetMailMsgInfoResponse response = new GetMailMsgInfoResponse();

            response.FolderPath = "Проект: " + (string)ds.ExecuteScalar();

            StringBuilder bld = new StringBuilder();

            // заголовок - наименование инцидента или проекта
            bld.Append("ITRACKER: ");
            if (bLinkToIncident)
            {
                bld.Append("Инцидент №");
                bld.Append(xobjIncident.GetLoadedPropValue("Number"));
                bld.Append(" - ");
                bld.Append(xobjIncident.GetLoadedPropValue("Name"));
            }
            else
            {
                bld.Append(xobjFolder.GetLoadedPropValue("Name"));
            }
            response.Subject = bld.ToString();

            XmlNodeList xmlNodes = context.Config.SelectNodes("it:app-data/it:system-location/*");

            string[] aAppInstanceUrls = new string[xmlNodes.Count];
            for (int i = 0; i < xmlNodes.Count; ++i)
            {
                aAppInstanceUrls[i] = xmlNodes[i].InnerText;
                if (!aAppInstanceUrls[i].EndsWith("/"))
                {
                    aAppInstanceUrls[i] = aAppInstanceUrls[i] + "/";
                }
            }

            // ссылки на проект
            bld.Length = 0;
            bld.Append("Просмотр проекта:");
            bld.Append(Environment.NewLine);
            foreach (string sAppUrl in aAppInstanceUrls)
            {
                bld.AppendFormat("\t{0}x-get-report.aspx?Name=r-Folder.xml&ID={1}{2}", sAppUrl, xobjFolder.ObjectID, Environment.NewLine);
            }
            bld.Append("Открыть в дереве:");
            bld.Append(Environment.NewLine);
            foreach (string sAppUrl in aAppInstanceUrls)
            {
                bld.AppendFormat("\t{0}x-tree.aspx?METANAME=Main&LocateFolderByID={1}{2}", sAppUrl, xobjFolder.ObjectID, Environment.NewLine);
            }
            response.ProjectLinks = bld.ToString();

            // ссылки на инцидент
            bld.Length = 0;
            if (bLinkToIncident)
            {
                bld.Append("Редактирование инцидента:");
                bld.Append(Environment.NewLine);
                foreach (string sAppUrl in aAppInstanceUrls)
                {
                    bld.AppendFormat("\t{0}x-list.aspx?OT=Incident&METANAME=IncidentSearchingList&OpenEditorByIncidentID={1}{2}", sAppUrl, xobjIncident.ObjectID, Environment.NewLine);
                }
                bld.Append("Просмотр инцидента:");
                bld.Append(Environment.NewLine);
                foreach (string sAppUrl in aAppInstanceUrls)
                {
                    bld.AppendFormat("\t{0}x-get-report.aspx?NAME=r-Incident.xml&DontCacheXslfo=true&IncidentID={1}{2}", sAppUrl, xobjIncident.ObjectID, Environment.NewLine);
                }
                bld.Append("Открыть в дереве:");
                bld.Append(Environment.NewLine);
                foreach (string sAppUrl in aAppInstanceUrls)
                {
                    bld.AppendFormat("\t{0}x-tree.aspx?METANAME=Main&LocateIncidentByID={1}{2}", sAppUrl, xobjIncident.ObjectID, Environment.NewLine);
                }
                response.IncidentLinks = bld.ToString();
            }
            response.To = getUsersEMail(request, context);

            return(response);
        }
Esempio n. 5
0
        /// <summary>
        /// Метод запуска операции на выполнение, <входная> точка операции
        /// ПЕРЕГРУЖЕННЫЙ, СТРОГО ТИПИЗИРОВАННЫЙ МЕТОД
        /// ВЫЗЫВАЕТСЯ ЯДРОМ АВТОМАТИЧЕСКИ
        /// </summary>
        /// <param name="request">Запрос на выполнение операции</param>
        /// <param name="context">Контекст выполнения операции</param>
        /// <returns>Результат выполнения</returns>
        public XGetObjectResponse Execute(XRequest request, IXExecutionContext context)
        {
            // #1: Определяем идентификатор текущего пользователя
            // Используем внутренние механизмы аутентификации
            ITUser            user             = (ITUser)XSecurityManager.Instance.GetCurrentUser();
            XParamsCollection datasourceParams = new XParamsCollection();

            datasourceParams.Add("UserID", user.SystemUserID);


            // #2: Найдем идентификатор объекта - профиля, связанного с текущим
            // пользователем: испоьзуем для этого тривиальный запрос, заданный
            // в "источнике данных"
            XDataSource dataSource = context.Connection.GetDataSource(DEF_DATASOURCE_NAME);

            dataSource.SubstituteNamedParams(datasourceParams, true);
            dataSource.SubstituteOrderBy();
            object oResult = dataSource.ExecuteScalar();
            // Ожидается, что в результате мы получаем GUID:
            Guid uidResult = Guid.Empty;

            if (null != oResult && DBNull.Value != oResult)
            {
                uidResult = context.Connection.Behavior.CastGuidValueFromDB(oResult);
            }


            // #3: Загрузка данных профиля и всех сопутствующих объектов:
            DomainObjectDataSet dataSet = new DomainObjectDataSet(context.Connection.MetadataManager.XModel);
            DomainObjectData    xobj;

            if (Guid.Empty != uidResult)
            {
                // Объект профиля уже есть; загружаем существующий
                xobj = dataSet.Load(context.Connection, "UserProfile", uidResult);
            }
            else
            {
                xobj = dataSet.CreateNew("UserProfile", false);
                // В новом объекте описания профиля сразу проставляем заглушку на текущего пользователя
                xobj.SetUpdatedPropValue("SystemUser", user.SystemUserID);
                // Задаем "собственную" стартовую страницу по умолчанию - список текущих инцидентов
                xobj.SetUpdatedPropValue("StartPage", StartPages.CurrentTaskList);
            }
            // Догружаем данные пользователя (SystemUser) и сотрудника (Employee)
            dataSet.PreloadProperty(context.Connection, xobj, "SystemUser.Employee");

            // Сериализуем датасет с загруженными объектами в формат для Web-клиента
            DomainObjectDataXmlFormatter formatter = new DomainObjectDataXmlFormatter(context.Connection.MetadataManager);
            // ... при этом учитываем, что в сериализованные данные должны так же попасть
            // данные с описанием пользователя и сотрудника:
            XmlElement xmlObject = formatter.SerializeObject(xobj, new string[] { "SystemUser.Employee" });

            if (Guid.Empty != uidResult)
            {
                // ..обработаем объект и все вложенные объекты в прогруженных свойства, расставим атрибуты ограничения доступа
                XmlObjectRightsProcessor.ProcessObject(xobj, xmlObject);
            }

            return(new XGetObjectResponse(xmlObject));
        }