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));
 }
Exemple #2
0
        /// <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));
        }
Exemple #3
0
        /// <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));
        }
Exemple #4
0
        /// <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));
        }