コード例 #1
0
        public override XTreeMenuInfo GetMenu(XGetTreeMenuRequest request, IXExecutionContext context, XTreePageInfoStd treePage)
        {
            XTreeStructInfo  treeStructInfo = treePage.TreeStruct;
            XTreeLevelInfoIT levelinfo      = treeStructInfo.Executor.GetTreeLevel(treeStructInfo, request.Params, request.Path);

            XTreeMenuInfo       treemenu = null;
            DomainObjectDataSet dataSet  = new DomainObjectDataSet(context.Connection.MetadataManager.XModel);
            Guid ObjectID = request.Path[0].ObjectID;

            switch (levelinfo.ObjectType)
            {
            case "IncidentCategory":
                treemenu = getMenuForIncidentCategory(ObjectID, dataSet, context);
                break;

            default:
                treemenu = levelinfo.GetMenu(request, context);
                break;
            }
            if (treemenu == null)
            {
                treemenu = treePage.DefaultLevelMenu.GetMenu(levelinfo, request, context);
            }

            if (treemenu != null)
            {
                if (context.Config.IsDebugMode)
                {
                    treemenu.Items.AddActionItem("ќбновить", StdActions.DoNodeRefresh).SeparatorBefore = true;
                }
            }

            return(treemenu);
        }
コード例 #2
0
        /// <summary>
        /// Метод запуска операции на выполнение, <входная> точка операции
        /// ПЕРЕГРУЖЕННЫЙ, СТРОГО ТИПИЗИРОВАННЫЙ МЕТОД
        /// ВЫЗЫВАЕТСЯ ЯДРОМ АВТОМАТИЧЕСКИ
        /// </summary>
        /// <param name="request">Запрос на выполнение операции</param>
        /// <param name="context">Контекст выполнения операции</param>
        /// <returns>Результат выполнения</returns>
        public GetObjectIdByExKeyResponse Execute(GetObjectIdByExKeyRequest request, IXExecutionContext context)
        {
            Guid uidResultObjectID = Guid.Empty;

            // Если в запросе задано наименование источника данных, то для получения
            // идентификатора объекта используем именно его:
            if (null != request.DataSourceName && 0 != request.DataSourceName.Length)
            {
                uidResultObjectID = processDataSource(
                    request.DataSourceName,
                    request.Params,
                    context.Connection);
            }

            // Иначе (наименование источника данных не задано) формируем явный
            // запрос на получение ObjectID
            else if (null != request.TypeName && 0 != request.TypeName.Length)
            {
                uidResultObjectID = processExplicitObjectIdRequest(
                    request.TypeName,
                    request.Params,
                    context.Connection);
            }

            else
            {
                throw new ArgumentException(
                          "Не задано ни наименование типа, ни наменование источника " +
                          "данных; получение идентификатора объекта невозможно!",
                          "GetObjectIdByExKeyRequest");
            }

            return(new GetObjectIdByExKeyResponse(uidResultObjectID));
        }
コード例 #3
0
ファイル: XStorageGateway.cs プロジェクト: SanSay157/IT8
        /// <summary>
        /// Сохранение данных множества объектов.
        /// </summary>
        /// <remarks>
        /// Управление транзакцией внешнее.
        /// </remarks>
        /// <param name="context"></param>
        /// <param name="dataSet"></param>
        /// <param name="transactionID"></param>
        public static void Save(IXExecutionContext context, DomainObjectDataSet dataSet, Guid transactionID)
        {
            // #1: Вызов триггеров Before
            XTriggersController.Instance.FireTriggers(dataSet, XTriggerFireTimes.Before, context);

            // #2: Сбросим закэшированные данные объектов
            IEnumerator enumerator = dataSet.GetModifiedObjectsEnumerator(false);

            while (enumerator.MoveNext())
            {
                DomainObjectData xobj = (DomainObjectData)enumerator.Current;
                // Примечание: для новых объектов сбрасывать кэш бессмысленно - их там нет
                if (!xobj.IsNew)
                {
                    DomainObjectRegistry.ResetObject(xobj);
                }
            }

            // #3: Запись данных
            XDatagramProcessorEx dg_proc   = XDatagramProcessorMsSqlEx.Instance;
            XDatagramBuilder     dgBuilder = dg_proc.GetDatagramBuilder();
            XDatagram            dg        = dgBuilder.GetDatagram(dataSet);

            dg_proc.Save(context.Connection, dg);

            // #4: Сохранение chunked-данных
            saveChunkedData(transactionID, dg, context.Connection);

            // #5: Сигнализируем Securitymanager, что обновились данные (для очистки кэшей)
            XSecurityManager.Instance.TrackModifiedObjects(dataSet);

            // #6: Вызов триггеров After
            XTriggersController.Instance.FireTriggers(dataSet, XTriggerFireTimes.After, context);
        }
コード例 #4
0
        public GetObjectsRightsExResponse Execute(CheckDatagramRequest request, IXExecutionContext context)
        {
            XObjectRightsDescr[] objectPermissionCheckList = new XObjectRightsDescr[request.ObjectsToCheck.Length];

            DomainObjectDataXmlFormatter formatter = new DomainObjectDataXmlFormatter(context.Connection.MetadataManager);
            DomainObjectDataSet          dataSet   = formatter.DeserializeForSave(request.XmlDatagram);

            int nIndex = -1;

            foreach (XObjectIdentity obj_id in request.ObjectsToCheck)
            {
                DomainObjectData xobj = dataSet.Find(obj_id.ObjectType, obj_id.ObjectID);
                //if (xobj.IsNew && xobj == null)
                //	throw new ArgumentException("Датаграмма не содержит нового объекта, для которого требуется вычислить права: " +obj_id.ObjectType + "[" + obj_id.ObjectType + "]");
                if (xobj == null)
                {
                    xobj = dataSet.Load(context.Connection, obj_id.ObjectType, obj_id.ObjectID);
                }
                if (xobj.IsNew)
                {
                    objectPermissionCheckList[++nIndex] = createObjectRightsDescr(XSecurityManager.Instance.GetRightsOnNewObject(xobj));
                }
                else
                {
                    objectPermissionCheckList[++nIndex] = createObjectRightsDescr(XSecurityManager.Instance.GetObjectRights(xobj));
                }
            }

            // Формируем результат операции
            return(new GetObjectsRightsExResponse(objectPermissionCheckList));
        }
コード例 #5
0
ファイル: SaveObjectCommand.cs プロジェクト: SanSay157/IT8
        /// <summary>
        /// Метод запуска операции на выполнение, «входная» точка операции
        /// ПЕРЕГРУЖЕННЫЙ, СТРОГО ТИПИЗИРОВАННЫЙ МЕТОД
        /// ВЫЗЫВАЕТСЯ ЯДРОМ АВТОМАТИЧЕСКИ
        /// </summary>
        /// <param name="request">Запрос на выполнение операции</param>
        /// <param name="context">Контекст выполнения операции</param>
        /// <returns>Результат выполнения</returns>
        public virtual XResponse Execute(SaveObjectInternalRequest request, IXExecutionContext context)
        {
            // #1: Проверка прав
            // Примечание: делаем это здесь, а не в гварде, ради человеческой диагностики
            XSecurityManager sec_man    = XSecurityManager.Instance;
            IEnumerator      enumerator = request.DataSet.GetModifiedObjectsEnumerator(false);
            DomainObjectData xobj;

            while (enumerator.MoveNext())
            {
                xobj = (DomainObjectData)enumerator.Current;
                if (xobj.ToDelete)
                {
                    sec_man.DemandDeleteObjectPrivilege(xobj);
                }
                else
                {
                    sec_man.DemandSaveObjectPrivilege(xobj);
                }
            }

            // #2: Запись данных
            XStorageGateway.Save(context, request.DataSet, request.TransactionID);

            // #3: Вызовем post-call-процедуры (если таковые определены)
            //executePostCalls(request.PostCalls, context);

            // Специального результата операция не возвращает
            return(new XResponse());
        }
コード例 #6
0
ファイル: GetDataCommonCommand.cs プロジェクト: SanSay157/IT8
 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));
 }
コード例 #7
0
ファイル: GetPropertyCommand.cs プロジェクト: SanSay157/IT8
        /// <summary>
        /// Выполнение команды - типизированный вариант
        /// </summary>
        /// <param name="request">Запрос команды, должен иметь тип XGetPropertyRequest</param>
        /// <param name="context">Контекст выполнения команды</param>
        /// <returns>XGetPropertyResponse</returns>
        public new XGetPropertyResponse Execute(XGetPropertyRequest request, IXExecutionContext context)
        {
            DomainObjectDataSet dataSet = new DomainObjectDataSet(context.Connection.MetadataManager.XModel);
            // создадим болванку объекта
            DomainObjectData xobj = dataSet.GetLoadedStub(request.TypeName, request.ObjectID);

            // загрузим свойства
            dataSet.LoadProperty(context.Connection, xobj, request.PropName);
            // создадим форматировщик
            DomainObjectDataXmlFormatter formatter = new DomainObjectDataXmlFormatter(context.Connection.MetadataManager);
            // и сериализуем свойство в XML
            XmlElement xmlProperty = formatter.SerializeProperty(xobj, request.PropName);

            // по всем объектам в свойстве (LoadProperty вызывается не только для объектных свойств - еще для bin и text)
            // обработаем объект и все вложенные объекты в прогруженных свойства, расставим атрибуты ограничения доступа
            foreach (XmlElement xmlObject in xmlProperty.SelectNodes("*[*]"))
            {
                DomainObjectData xobjValue = xobj.Context.Find(xmlObject.LocalName, new Guid(xmlObject.GetAttribute("oid")));
                if (xobjValue == null)
                {
                    throw new ApplicationException("Не удалось найти в контексте типизированного объекта DomainObjectData для xml-объекта-значения свойства " + xmlProperty.LocalName + " объекта " + xmlObject.LocalName);
                }
                XmlObjectRightsProcessor.ProcessObject(xobjValue, xmlObject);
            }
            XGetPropertyResponse response = new XGetPropertyResponse(xmlProperty);

            return(response);
        }
コード例 #8
0
        /// <summary>
        /// Метод выполнения операции, реализация IXCommand.Execute
        /// </summary>
        ///	<param name="request">Объект-запрос на выполнение операции</param>
        /// <param name="context">Представление контекста выполнения операции</param>
        /// <returns>
        /// Экземпляр объекта-результата выполнения операции
        /// </returns>
        public override XResponse Execute(XRequest request, IXExecutionContext context)
        {
            request.ValidateRequestType(typeof(XGetObjectRequest));

            // Вызывается частная, полностью типизированная реализация
            return(this.Execute((XGetObjectRequest)request, context));
        }
コード例 #9
0
        public override void Execute(XTriggerArgs args, IXExecutionContext context)
        {
            DomainObjectData xobj = args.TriggeredObject;
            // если изменилось значение признака "Архивное", проверим отсутствие у подразделения работающих сотрудников или не архивных департаментов.
            bool bUpdateIsArchive = xobj.HasUpdatedProp("IsArchive");

            if (bUpdateIsArchive)
            {
                bool newValue = (bool)xobj.GetUpdatedPropValue("IsArchive");
                if (!xobj.IsNew && newValue)
                {
                    //	1. Проверим, что все сотрудники (во всех вложенных департаментах) уволены
                    XDbCommand cmd = context.Connection.CreateCommand(@"
							SELECT 1 
							FROM dbo.Department d_s WITH(NOLOCK)
								JOIN dbo.Department d WITH(NOLOCK) ON d.LIndex >= d_s.LIndex AND d.RIndex <= d_s.RIndex AND d.Organization = d_s.Organization
									JOIN Employee e WITH(NOLOCK) ON (d.ObjectID = e.Department) and (e.WorkEndDate is null)
							WHERE d_s.ObjectID = @ObjectID
							"                            );
                    cmd.Parameters.Add("ObjectID", DbType.Guid, ParameterDirection.Input, false, xobj.ObjectID);
                    if (cmd.ExecuteScalar() != null)
                    {
                        throw new XBusinessLogicException("Департамент не может быть переведен с состояние \"Архивное\", так как содержит работающих сотрудников");
                    }
                }
                // добавим в датаграмму подчиненные департаменты
                UpdateChildDepartments(context.Connection, args.DataSet, xobj.ObjectID, newValue);
            }
        }
コード例 #10
0
 /// <summary>
 /// Возвращает типизированное описание меню уровня.
 /// Может быть null, если меню для уровня не определено.
 /// Как воспринимать null решает провайдер загрузки меню иерархии (XTreeMenuLoadProvider)
 /// </summary>
 /// <returns>Объектное описание меню уровня иерархии</returns>
 public XTreeMenuInfo GetMenu(XGetTreeMenuRequest request, IXExecutionContext context)
 {
     if (m_menuHandler != null)
     {
         return(m_menuHandler.GetMenu(this, request, context));
     }
     return(null);
 }
コード例 #11
0
        public override XResponse Execute(XRequest request, IXExecutionContext context)
        {
            XDataSource ds = context.Connection.GetDataSource(DATASOURCE_NAME);

            ds.ExecuteScalar();

            return(new XResponse());
        }
コード例 #12
0
        /// <summary>
        /// ћетод запуска операции на выполнение, <входна¤> точка операции
        /// ѕ≈–≈√–”∆≈ЌЌџ…, —“–ќ√ќ “»ѕ»«»–ќ¬јЌЌџ… ћ≈“ќƒ
        /// ¬џ«џ¬ј≈“—я яƒ–ќћ ј¬“ќћј“»„≈— »
        /// </summary>
        /// <param name="request">«апрос на выполнение операции</param>
        /// <param name="context"> онтекст выполнени¤ операции</param>
        /// <returns>–езультат выполнени¤</returns>
        public override XResponse Execute(XRequest request, IXExecutionContext context)
        {
            ITUser     user = (ITUser)XSecurityManager.Instance.GetCurrentUser();
            XmlElement xmlCurrentEmployee = context.Connection.Load("Employee", user.EmployeeID);

            context.Connection.LoadProperty(xmlCurrentEmployee, "SystemUser");
            return(new XGetObjectResponse(xmlCurrentEmployee));
        }
コード例 #13
0
ファイル: GetObjectsCommand.cs プロジェクト: SanSay157/IT8
        /// <summary>
        /// Операция получения XML-документа с данными набора заданных ds-объектов
        /// ТИПИЗИРОВАННАЯ ВЕРСИЯ МЕТОДА
        /// АВТОМАТИЧЕСКИ ВЫЗЫВАЕТСЯ ЯДРОМ
        /// </summary>
        /// <param name="request">Запрос на вполнение операции</param>
        /// <param name="context">Контекст выоленения операции</param>
        /// <returns>Результат выполенения операции</returns>
        public XGetObjectsResponse Execute(XGetObjectsRequest request, IXExecutionContext context)
        {
            // Проверка праметров - массив с перечнем идентификационных данных
            // объектов должен быть задан, и не должен быть пустым:
            if (null == request.List)
            {
                throw new ArgumentNullException("request.List");
            }
            if (0 == request.List.Length)
            {
                throw new ArgumentException("request.List");
            }

            XmlDocument                  xmlDoc         = new XmlDocument();
            XmlElement                   xmlRootElement = xmlDoc.CreateElement("root");
            DomainObjectDataSet          dataSet        = new DomainObjectDataSet(context.Connection.MetadataManager.XModel);
            DomainObjectDataXmlFormatter formatter      = new DomainObjectDataXmlFormatter(context.Connection.MetadataManager);
            DomainObjectData             xobj;

            foreach (XObjectIdentity i in request.List)
            {
                if (i.ObjectID == Guid.Empty)
                {
                    xmlRootElement.AppendChild(context.Connection.Create(i.ObjectType, xmlDoc));
                }
                else
                {
                    try
                    {
                        xobj = dataSet.Load(context.Connection, i.ObjectType, i.ObjectID);
                        xmlRootElement.AppendChild(formatter.SerializeObject(xobj, xmlDoc));
                    }
                    catch (XObjectNotFoundException)
                    {
                        XmlElement xmlStub = (XmlElement)xmlRootElement.AppendChild(
                            context.Connection.CreateStub(i.ObjectType, i.ObjectID, xmlDoc));
                        xmlStub.SetAttribute("not-found", "1");
                    }
                }
            }
            // по всем запрошенным объектам
            foreach (XmlElement xmlObject in xmlRootElement.SelectNodes("*[*]"))
            {
                // обработаем объект и все вложенные объекты в прогруженных свойства, расставим атрибуты ограничения доступа
                if (!xmlObject.HasAttribute("new"))
                {
                    DomainObjectData xobjValue = dataSet.Find(xmlObject.LocalName, new Guid(xmlObject.GetAttribute("oid")));
                    if (xobjValue == null)
                    {
                        throw new ApplicationException("Не удалось найти в контексте типизированного объекта DomainObjectData для xml объекта: " + xmlObject.OuterXml);
                    }

                    XmlObjectRightsProcessor.ProcessObject(xobjValue, xmlObject);
                }
            }

            return(new XGetObjectsResponse(xmlRootElement));
        }
コード例 #14
0
        private string getFolderUsersEMail(Guid FolderID, IXExecutionContext context)
        {
            XDbCommand cmd = context.Connection.CreateCommand(
                "SELECT emp.EMail FROM ProjectParticipant pp JOIN Employee emp ON pp.Employee = emp.ObjectID WHERE pp.Folder = @FolderID"
                );

            cmd.Parameters.Add("FolderID", DbType.Guid, ParameterDirection.Input, false, FolderID);
            return(readEMails(cmd));
        }
コード例 #15
0
        private string getIncidentUsersEMail(Guid IncidentID, IXExecutionContext context)
        {
            XDbCommand cmd = context.Connection.CreateCommand(
                "SELECT emp.EMail FROM Task t JOIN Employee emp ON t.Worker = emp.ObjectID WHERE t.Incident = @IncidentID"
                );

            cmd.Parameters.Add("IncidentID", DbType.Guid, ParameterDirection.Input, false, IncidentID);
            return(readEMails(cmd));
        }
コード例 #16
0
        public override void Execute(XTriggerArgs args, IXExecutionContext context)
        {
            DomainObjectData xobjEventSubscription = args.TriggeredObject;

            // для нового объекта если не задана группа рассылки проставим текущего пользователя
            if (args.Action == XTriggerActions.Insert && !(xobjEventSubscription.GetUpdatedPropValue("Group") is Guid))
            {
                xobjEventSubscription.SetUpdatedPropValue("User", ((ITUser)XSecurityManager.Instance.GetCurrentUser()).EmployeeID);
            }
        }
コード例 #17
0
ファイル: DeleteObjectByExKey.cs プロジェクト: SanSay157/IT8
        /// <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));
        }
コード例 #18
0
        public override void Execute(XTriggerArgs args, IXExecutionContext context)
        {
            DomainObjectData xobjTask = args.TriggeredObject;

            // для нового объекта, если не задан планировщик, или
            // если изменилось запланированное время при обновлении установим планировщиком задания текущего сотрудника
            if (xobjTask.IsNew && xobjTask.GetUpdatedPropValue("Planner") == null || !xobjTask.IsNew && xobjTask.HasUpdatedProp("PlannedTime"))
            {
                xobjTask.SetUpdatedPropValue("Planner", ((ITUser)XSecurityManager.Instance.GetCurrentUser()).EmployeeID);
            }
        }
コード例 #19
0
 public override XResponse Execute(XRequest request, IXExecutionContext context)
 {
     using (XDbCommand cmd = context.Connection.CreateCommand())
     {
         cmd.CommandType    = CommandType.StoredProcedure;
         cmd.CommandText    = "dbo.app_messagingCheckIncidentsDeadline";
         cmd.CommandTimeout = int.MaxValue - 128;
         cmd.ExecuteNonQuery();
     }
     return(new XResponse());
 }
コード例 #20
0
ファイル: Trigger_FolderCreate.cs プロジェクト: SanSay157/IT8
        public override void Execute(XTriggerArgs args, IXExecutionContext context)
        {
            DomainObjectData xobjHistory = getFolderHistoryObject(args.DataSet, args.TriggeredObject);

            xobjHistory.SetUpdatedPropValue("Event", FolderHistoryEvents.Creating);
            // если не задан Инициатор, то установим текущего сотрудника
            if (!args.TriggeredObject.HasUpdatedProp("Initiator") || args.TriggeredObject.GetUpdatedPropValue("Initiator") == DBNull.Value)
            {
                args.TriggeredObject.SetUpdatedPropValue("Initiator", ((ITUser)XSecurityManager.Instance.GetCurrentUser()).EmployeeID);
            }
        }
コード例 #21
0
        public override void Execute(XTriggerArgs args, IXExecutionContext context)
        {
            DomainObjectData xobjEmployeeHistory = args.DataSet.CreateNew("EmployeeHistory", true);
            ITUser           user          = (ITUser)XSecurityManager.Instance.GetCurrentUser();
            Guid             uidEmployeeID = getEmployeeID(context.Connection, args.TriggeredObject.ObjectID);

            xobjEmployeeHistory.SetUpdatedPropValue("Employee", uidEmployeeID);
            xobjEmployeeHistory.SetUpdatedPropValue("Event", EmployeeHistoryEvents.ChangeSecurity);
            xobjEmployeeHistory.SetUpdatedPropValue("SystemUser", user.SystemUserID);
            xobjEmployeeHistory.SetUpdatedPropValue("EventDate", DateTime.Now);
        }
コード例 #22
0
        /// <summary>
        /// ћетод запуска операции на выполнение, Ђвходна¤ї точка операции
        /// </summary>
        /// <param name="request">«апрос на выполнение операции</param>
        /// <param name="context"> онтекст выполнени¤ операции</param>
        /// <returns>–езультат выполнени¤</returns>
        /// <remarks>
        /// -- ѕ≈–≈√–”∆≈ЌЌџ…, —“–ќ√ќ “»ѕ»«»–ќ¬јЌЌџ… ћ≈“ќƒ, ¬џ«џ¬ј≈“—я яƒ–ќћ
        /// -- ѕроверка параметров запроса реализована в методе Validate запроса,
        /// который автоматически вызываетс¤ ядром при получении запроса
        /// </remarks>
        public XGetObjectsRightsResponse Execute(XGetObjectsRightsRequest request, IXExecutionContext context)
        {
            Boolean[]     objectPermissionCheckList = new Boolean[request.Permissions.Length];
            IDictionary   checkedObjects            = new HybridDictionary();
            IDictionary   checkedTypes = new Hashtable();
            XObjectRights rights;

            int nIndex = -1;
            DomainObjectDataSet dataSet = new DomainObjectDataSet(context.Connection.MetadataManager.XModel);

            foreach (XObjectPermission permission in request.Permissions)
            {
                bool bHasRight = true;

                if ((permission.Action & XObjectActionEnum.Create) == XObjectActionEnum.Create)
                {
                    if (checkedTypes.Contains(permission.TypeName))
                    {
                        bHasRight = (bool)checkedTypes[permission.TypeName];
                    }
                    else
                    {
                        bHasRight = XSecurityManager.Instance.GetRightsOnNewObject(
                            dataSet.CreateStubNew(permission.TypeName)
                            ).AllowCreate;
                        checkedTypes[permission.TypeName] = bHasRight;
                    }
                }

                if (bHasRight && (
                        ((permission.Action & XObjectActionEnum.Change) > 0) ||
                        ((permission.Action & XObjectActionEnum.Delete) > 0) ||
                        ((permission.Action & XObjectActionEnum.Read) > 0)
                        ))
                {
                    rights = (XObjectRights)checkedObjects[permission.TypeName + ":" + permission.ObjectID];
                    if (rights == null)
                    {
                        rights = XSecurityManager.Instance.GetObjectRights(
                            dataSet.GetLoadedStub(permission.TypeName, permission.ObjectID)
                            );
                        checkedObjects[permission.TypeName + ":" + permission.ObjectID] = rights;
                    }
                    bHasRight = ((permission.Action & XObjectActionEnum.Change) > 0) && rights.AllowParticalOrFullChange ||
                                ((permission.Action & XObjectActionEnum.Delete) > 0) && rights.AllowDelete ||
                                ((permission.Action & XObjectActionEnum.Read) > 0) && rights.AllowParticalOrFullRead;
                }
                // «аписываем полученный флаг в результирующий массив
                objectPermissionCheckList[++nIndex] = bHasRight;
            }

            // ‘ормируем результат операции
            return(new XGetObjectsRightsResponse(objectPermissionCheckList));
        }
コード例 #23
0
ファイル: XTreeMenu.cs プロジェクト: SanSay157/IT8
        public virtual XTreeMenuInfo GetMenu(XGetTreeMenuRequest request, IXExecutionContext context, XTreePageInfoStd treePage)
        {
            XTreeStructInfo  treeStructInfo = treePage.TreeStruct;
            XTreeLevelInfoIT treelevel      = treeStructInfo.Executor.GetTreeLevel(treeStructInfo, request.Params, request.Path);
            XTreeMenuInfo    treemenu       = treelevel.GetMenu(request, context);

            if (treemenu == null)
            {
                treemenu = treePage.DefaultLevelMenu.GetMenu(treelevel, request, context);
            }
            return(treemenu);
        }
コード例 #24
0
        public XResponse Execute(XGetTreeDataRequest request, IXExecutionContext context)
        {
            XTreePageInfo treePage = XTreeController.Instance.GetPageInfo(request.MetaName);
            XTreeLoadData treeData = treePage.GetData(request, context);


            if (treeData == null)
            {
                throw new ApplicationException("XTreePageInfo.GetData вернул null");
            }

            return(new XGetTreeDataResponse(treeData.Nodes.ToArray(), !treePage.OffShowIcons ? treePage.IconTemplateURI : String.Empty));
        }
コード例 #25
0
        public override void Execute(XTriggerArgs args, IXExecutionContext context)
        {
            IEnumerator enumerator = args.DataSet.GetModifiedObjectsEnumerator(true);

            while (enumerator.MoveNext())
            {
                DomainObjectData xobj = (DomainObjectData)enumerator.Current;
                if (xobj.IsNew)
                {
                    //TODO Метод ChangeObjectIdentifier(изменение идентификатора нового объекта) был убран из solution
                }
            }
        }
コード例 #26
0
ファイル: MoveObjectsCommand.cs プロジェクト: SanSay157/IT8
        public XResponse Execute(MoveObjectsRequest request, IXExecutionContext context)
        {
            DomainObjectDataSet dataSet = new DomainObjectDataSet(context.Connection.MetadataManager.XModel);

            foreach (Guid oid in request.SelectedObjectsID)
            {
                DomainObjectData xobj = dataSet.CreateStubLoaded(request.SelectedObjectType, oid, -1);
                xobj.SetUpdatedPropValue(request.ParentPropName, request.NewParent);
                // для объекта проверим права
                XSecurityManager.Instance.DemandSaveObjectPrivilege(xobj);
            }
            XStorageGateway.Save(context, dataSet, Guid.NewGuid());

            return(new XResponse());
        }
コード例 #27
0
 private string getUsersEMail(GetMailMsgInfoRequest request, IXExecutionContext context)
 {
     // если заданы идентификаторы сотрудников, чьи адреса требуется получить
     if (request.EmployeeIDs != null && request.EmployeeIDs.Length > 0)
     {
         return(getUsersEMail(request.EmployeeIDs, context));
     }
     // если сотрудники явно не заданы, и задан идентификатор инцидента, то получим всех исполнителей инцидента
     if (request.ObjectType == "Incident")
     {
         return(getIncidentUsersEMail(request.ObjectID, context));
     }
     // иначе получим всех участников проекта
     return(getFolderUsersEMail(request.ObjectID, context));
 }
コード例 #28
0
        private string getUsersEMail(Guid[] aEmployeeIDs, IXExecutionContext context)
        {
            StringBuilder bld = new StringBuilder();

            foreach (Guid oid in aEmployeeIDs)
            {
                if (bld.Length > 0)
                {
                    bld.Append(", ");
                }
                bld.Append(context.Connection.ArrangeSqlGuid(oid));
            }
            XDbCommand cmd = context.Connection.CreateCommand("SELECT Email FROM Employee WHERE ObjectID IN (" + bld.ToString() + ")");

            return(readEMails(cmd));
        }
コード例 #29
0
        public XXGetNodeDragResponse Execute(XXGetTreeNodeDragRequest oRequest, IXExecutionContext oContext)
        {
            if (null == oRequest)
            {
                throw new ArgumentNullException("oRequest");
            }
            if (null == oContext)
            {
                throw new ArgumentNullException("oContext");
            }

            // Получаем описание иерархии
            XTreeInfo treeInfo = XInterfaceObjectsHolder.Instance.GetTreeInfo(oRequest.MetaName, oContext.Connection);

            // Получаем уровень иерархии
            XTreeLevelInfo treeLevelInfo = treeInfo.GetTreeLevel(oRequest.Path.GetNodeTypes());

            // Описатель операции переноса:
            XXTreeNodeDrag treeNodeDrag = new XXTreeNodeDrag(treeLevelInfo, oContext.Connection.MetadataManager);

            if (treeNodeDrag.IsEmpty)
            {
                // нет меню для уровня иерархии
                return(new XXGetNodeDragResponse(null));
            }
            else
            {
                // Нашли описания операции переноса; склонируем его, т.к. ссылки указывают
                // непосредственно на XML, который держит менеджер метаданных
                XmlElement xmlNodeDragNode = (XmlElement)treeNodeDrag.XmlNodeDrag.CloneNode(true);

                // Проставим признак кешируемости операции переноса для клиента - атрибут
                // cache-for узла i:node-drag; Сам атрибут определяется для операции переноса в
                // метаданных; если не объявлен, считается, что кеширование
                // задано для уровня (т.е. в качестве ключа используется путь):
                XTreeMenuCacheMode cacheMode = treeNodeDrag.CacheMode;
                if (cacheMode == XTreeMenuCacheMode.Unknow)
                {
                    cacheMode = XTreeMenuCacheMode.Level;
                }
                xmlNodeDragNode.SetAttribute("cache-for", XTreeMenuCacheModeParser.ToString(cacheMode));

                return(new XXGetNodeDragResponse(xmlNodeDragNode));
            }
        }
コード例 #30
0
        /// <summary>
        /// Метод запуска операции на выполнение, <входная> точка операции
        /// ПЕРЕГРУЖЕННЫЙ, СТРОГО ТИПИЗИРОВАННЫЙ МЕТОД
        /// ВЫЗЫВАЕТСЯ ЯДРОМ АВТОМАТИЧЕСКИ
        /// </summary>
        /// <param name="request">Запрос на выполнение операции</param>
        /// <param name="context">Контекст выполнения операции</param>
        /// <returns>Результат выполнения</returns>
        public override XResponse Execute(XRequest request, IXExecutionContext context)
        {
            ITUser user = (ITUser)XSecurityManager.Instance.GetCurrentUser();

            GetCurrentUserClientProfileResponse response = new GetCurrentUserClientProfileResponse();

            /*
             * Закоментировано, т.к. сейчас нет необходимости в получении xml-объекта текущего сотрудника, если понадобится, то раскоментировать
             * XmlElement xmlCurrentEmployee = context.Connection.Load( "Employee", user.EmployeeID );
             * context.Connection.LoadProperty( xmlCurrentEmployee, "SystemUser" );
             * response.XmlEmployee = xmlCurrentEmployee;
             */

            response.EmployeeID      = user.EmployeeID;
            response.SystemUserID    = user.SystemUserID;
            response.WorkdayDuration = user.WorkdayDuration;
            return(response);
        }