コード例 #1
0
ファイル: TASSyncService.asmx.cs プロジェクト: SanSay157/IT8
        public TASTenderInfo[] GetTendersInfo(Guid[] objectIDs)
        {
            XParamsCollection dsParams = new XParamsCollection();

            // Если заданы идентификаторы Тендеров, то добавим их в параметры источника данных
            if (objectIDs != null)
            {
                foreach (Guid objectID in objectIDs)
                {
                    dsParams.Add("ObjectID", objectID);
                }
            }

            // Зачитаем данные о тендерах:
            DataTable oDataTable = ObjectOperationHelper.ExecAppDataSource("SyncTAS-TendersInfo", dsParams);

            if (null == oDataTable)
            {
                return(new TASTenderInfo[0]);
            }

            TASTenderInfo[] arrTenderInfo = new TASTenderInfo[oDataTable.Rows.Count];
            // Пробежимся по всем строкам и сформируем результат
            for (int nRowIndex = 0; nRowIndex < oDataTable.Rows.Count; nRowIndex++)
            {
                TASTenderInfo info = new TASTenderInfo();
                info.ObjectID    = oDataTable.Rows[nRowIndex]["ObjectID"].ToString();
                info.ProjectCode = (DBNull.Value != oDataTable.Rows[nRowIndex]["Number"])
                                        ? oDataTable.Rows[nRowIndex]["Number"].ToString() : null;
                info.Name     = oDataTable.Rows[nRowIndex]["Name"].ToString();
                info.Director = (DBNull.Value != oDataTable.Rows[nRowIndex]["Director"])
                                        ? oDataTable.Rows[nRowIndex]["Director"].ToString() : null;
                info.Customer = (DBNull.Value != oDataTable.Rows[nRowIndex]["TenderCustomer"])
                                        ? oDataTable.Rows[nRowIndex]["TenderCustomer"].ToString() : null;
                info.Folder = (DBNull.Value != oDataTable.Rows[nRowIndex]["Folder"])
                                        ? oDataTable.Rows[nRowIndex]["Folder"].ToString() : null;
                info.Initiator = (DBNull.Value != oDataTable.Rows[nRowIndex]["Initiator"])
                                        ? oDataTable.Rows[nRowIndex]["Initiator"].ToString() : null;
                info.InputDate = (DBNull.Value != oDataTable.Rows[nRowIndex]["InputDate"])
                                        ? ((DateTime)oDataTable.Rows[nRowIndex]["InputDate"]).ToString("yyyy-MM-ddTHH:mm:ss") : null;

                // Добавим считанные данные в массив
                arrTenderInfo[nRowIndex] = info;
            }
            return(arrTenderInfo);
        }
コード例 #2
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);
        }
コード例 #3
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));
        }