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); }
/// <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)); }
/// <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); }
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)); }
/// <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()); }
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">Запрос команды, должен иметь тип 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); }
/// <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)); }
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); } }
/// <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); }
public override XResponse Execute(XRequest request, IXExecutionContext context) { XDataSource ds = context.Connection.GetDataSource(DATASOURCE_NAME); ds.ExecuteScalar(); return(new XResponse()); }
/// <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)); }
/// <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)); }
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)); }
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)); }
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); } }
/// <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)); }
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); } }
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()); }
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); } }
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); }
/// <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)); }
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); }
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)); }
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 } } }
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()); }
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)); }
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)); }
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)); } }
/// <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); }