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); }
/// <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); }
/// <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)); }