public XResponse Execute(XRequest request, IXExecutionContext context) { if (request is XGetTreeDataRequest) { request.Name = "XGetTreeData"; ((XGetTreeDataRequest)request).Params.Add("CurrentEmployeeID", ((ITUser)XSecurityManager.Instance.GetCurrentUser()).EmployeeID); ((XGetTreeDataRequest)request).Params.Add("CurrentSystemUserID", ((ITUser)XSecurityManager.Instance.GetCurrentUser()).SystemUserID); } else if (request is XGetTreeMenuRequest) { request.Name = "XGetTreeMenu"; ((XGetTreeMenuRequest)request).Params.Add("CurrentEmployeeID", ((ITUser)XSecurityManager.Instance.GetCurrentUser()).EmployeeID); ((XGetTreeMenuRequest)request).Params.Add("CurrentSystemUserID", ((ITUser)XSecurityManager.Instance.GetCurrentUser()).SystemUserID); } else if (request is XGetListDataRequest) { request.Name = "XGetListData"; ((XGetListDataRequest)request).Params.Add("CurrentEmployeeID", ((ITUser)XSecurityManager.Instance.GetCurrentUser()).EmployeeID); ((XGetListDataRequest)request).Params.Add("CurrentSystemUserID", ((ITUser)XSecurityManager.Instance.GetCurrentUser()).SystemUserID); } else if (request is XExecuteDataSourceRequest) { request.Name = "XExecuteDataSource"; ((XExecuteDataSourceRequest)request).Params.Add("CurrentEmployeeID", ((ITUser)XSecurityManager.Instance.GetCurrentUser()).EmployeeID); ((XExecuteDataSourceRequest)request).Params.Add("CurrentSystemUserID", ((ITUser)XSecurityManager.Instance.GetCurrentUser()).SystemUserID); } return(context.ExecCommand(request, true)); }
/// <summary> /// Метод запуска операции на выполнение, <входная> точка операции /// ПЕРЕГРУЖЕННЫЙ, СТРОГО ТИПИЗИРОВАННЫЙ МЕТОД /// ВЫЗЫВАЕТСЯ ЯДРОМ АВТОМАТИЧЕСКИ /// </summary> /// <param name="request">Запрос на выполнение операции</param> /// <param name="context">Контекст выполнения операции</param> /// <returns>Результат выполнения</returns> public XDeleteObjectResponse Execute(DeleteObjectByExKeyRequest request, IXExecutionContext context) { // ПЕРВОЕ: получим идентификатор удаляемого объекта: воспользуемся // логикой, реализованной в базовом классе: Guid uidResultObjectID = Guid.Empty; // Если в запросе задано наименование источника данных, то для получения // идентификатора объекта используем именно его: if (null != request.DataSourceName && 0 != request.DataSourceName.Length) { uidResultObjectID = processDataSource( request.DataSourceName, request.Params, context.Connection); } else { // Иначе (наименование источника данных не задано) формируем явный // запрос на получение ObjectID uidResultObjectID = processExplicitObjectIdRequest( request.TypeName, request.Params, context.Connection); } // Проверяем, получили ли в итоге идентификатор объекта (объект уже // удален или это просто некорректная идентификация через свойства): if (Guid.Empty == uidResultObjectID) { // Реакция операции зависит от управляющего флага в запросе: // если считается, что отсутствующий объект - это удаленный // объект, то возвращаем честный результат, но с нулем в кач-ве // кол-ва реально удаленных объектов; иначе (когда так не считаем) // генерируем исключение: if (request.TreatNotExistsObjectAsDeleted) { return(new XDeleteObjectResponse(0)); } else { throw new ArgumentException("Объект, заданный значениями своих свойств, не найден!"); } } // ВТОРОЕ: вызываем стандартную операцию удаления данных ds-объекта // ВНИМАНИЕ - при вызове будет так же вызываться guard-объект, назначенный // для операции DeleteObject! XDeleteObjectRequest requestDeleteObject = new XDeleteObjectRequest(request.TypeName, uidResultObjectID); // скопируем служебные атрибуты из исходного запроса requestDeleteObject.SessionID = request.SessionID; requestDeleteObject.Headers.Add(request.Headers); return((XDeleteObjectResponse)context.ExecCommand(requestDeleteObject, true)); }
/// <summary> /// Метод запуска операции на выполнение, <входная> точка операции /// ПЕРЕГРУЖЕННЫЙ, СТРОГО ТИПИЗИРОВАННЫЙ МЕТОД /// ВЫЗЫВАЕТСЯ ЯДРОМ АВТОМАТИЧЕСКИ /// </summary> /// <param name="request">Запрос на выполнение операции</param> /// <param name="context">Контекст выполнения операции</param> /// <returns>Результат выполнения</returns> public XGetObjectResponse Execute(GetObjectByExKeyRequest request, IXExecutionContext context) { // ПЕРВОЕ: получим идентификатор объекта: воспользуемся логикой, // реализованной в базовом классе: Guid uidResultObjectID = Guid.Empty; // Если в запросе задано наименование источника данных, то для получения // идентификатора объекта используем именно его: if (null != request.DataSourceName && 0 != request.DataSourceName.Length) { uidResultObjectID = processDataSource( request.DataSourceName, request.Params, context.Connection); } else { // Иначе (наименование источника данных не задано) формируем явный // запрос на получение ObjectID uidResultObjectID = processExplicitObjectIdRequest( request.TypeName, request.Params, context.Connection); } // Если в итоге идентификатор объекта НЕ получили - генерируем // исключение, т.к. в этом случае невозможно загрузить данные объекта if (Guid.Empty == uidResultObjectID) { throw new ArgumentException("Объект, заданный значениями своих свойств, не найден!"); } // ВТОРОЕ: вызываем стандартную операцию загрузки данных // ВНИМАНИЕ - при вызове будет так же вызываться guard-объект, назначенный // для операции GetObject! XGetObjectRequest requestGetObject = new XGetObjectRequest(request.TypeName, uidResultObjectID); // скопируем служебные атрибуты из исходного запроса requestGetObject.SessionID = request.SessionID; requestGetObject.Headers.Add(request.Headers); return((XGetObjectResponse)context.ExecCommand(requestGetObject, true)); }
/// <summary> /// ћетод запуска операции на выполнение, Ђвходна¤ї точка операции /// ѕ≈–≈√–”∆≈ЌЌџ…, —“–ќ√ќ “»ѕ»«»–ќ¬јЌЌџ… ћ≈“ќƒ /// ¬џ«џ¬ј≈“—я яƒ–ќћ ј¬“ќћј“»„≈— » /// </summary> /// <param name="request">«апрос на выполнение операции</param> /// <param name="context"> онтекст выполнени¤ операции</param> /// <returns>–езультат выполнени¤</returns> public virtual XResponse Execute(SaveObjectInternalRequest request, IXExecutionContext context) { ITUser user = (ITUser)XSecurityManager.Instance.GetCurrentUser(); if (!user.IsServiceAccount) { string signature = getSignatureText(user); // если текущий пользователь не сервисный аккаунт, то можно добавл¤ть подписи к текстовым пол¤м // измен¤ем модифицируемые объекты IEnumerator enumerator = request.DataSet.GetModifiedObjectsEnumerator(true); while (enumerator.MoveNext()) { DomainObjectData xobj = (DomainObjectData)enumerator.Current; modifyObjectProps(xobj, signature); } } // вызываем стандартную команду SaveObject request.Name = "SaveObject"; return(context.ExecCommand(request, true)); }