private DomainObjectData loadFolderAndIncident(DomainObjectDataSet dataSet, GetMailMsgInfoRequest request, IXExecutionContext context) { DomainObjectData xobjFolder; if (request.ObjectType == "Folder") { xobjFolder = dataSet.GetLoadedStub("Folder", request.ObjectID); dataSet.LoadProperty(context.Connection, xobjFolder, "Name"); } else { XDbCommand cmd = context.Connection.CreateCommand( @"SELECT f.ObjectID as FolderID, f.Name as FolderName, i.Name as IncidentName, i.Number as IncidentNumber FROM Incident i JOIN Folder f ON i.Folder=f.ObjectID WHERE i.ObjectID = @IncidentID" ); cmd.Parameters.Add("IncidentID", DbType.Guid, ParameterDirection.Input, false, request.ObjectID); DomainObjectData xobjIncident = dataSet.GetLoadedStub("Incident", request.ObjectID); using (IDataReader reader = cmd.ExecuteReader()) { if (!reader.Read()) { throw new XObjectNotFoundException("Incident", request.ObjectID); } xobjFolder = dataSet.GetLoadedStub("Folder", reader.GetGuid(reader.GetOrdinal("FolderID"))); xobjFolder.SetLoadedPropValue("Name", reader.GetString(reader.GetOrdinal("FolderName"))); xobjIncident.SetLoadedPropValue("Name", reader.GetString(reader.GetOrdinal("IncidentName"))); xobjIncident.SetLoadedPropValue("Number", reader.GetInt32(reader.GetOrdinal("IncidentNumber"))); xobjIncident.SetLoadedPropValue("Folder", xobjFolder.ObjectID); } } return(xobjFolder); }
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)); }
public GetMailMsgInfoResponse Execute(GetMailMsgInfoRequest request, IXExecutionContext context) { if (request.ObjectType != "Incident" && request.ObjectType != "Folder") { throw new ArgumentException("Поддерживается два типа Incident и Folder, передано: " + request.ObjectType); } bool bLinkToIncident = request.ObjectType == "Incident"; DomainObjectDataSet dataSet = new DomainObjectDataSet(context.Connection.MetadataManager.XModel); // загрузим Папку и Инцидент DomainObjectData xobjFolder = loadFolderAndIncident(dataSet, request, context); DomainObjectData xobjIncident = null; if (bLinkToIncident) { xobjIncident = dataSet.Find("Incident", request.ObjectID); } // Получим путь к папке от корневой XDataSource ds = context.Connection.GetDataSource("GetFolderPath"); Hashtable dsParams = new Hashtable(); dsParams.Add("FolderID", xobjFolder.ObjectID); ds.SubstituteNamedParams(dsParams, true); GetMailMsgInfoResponse response = new GetMailMsgInfoResponse(); response.FolderPath = "Проект: " + (string)ds.ExecuteScalar(); StringBuilder bld = new StringBuilder(); // заголовок - наименование инцидента или проекта bld.Append("ITRACKER: "); if (bLinkToIncident) { bld.Append("Инцидент №"); bld.Append(xobjIncident.GetLoadedPropValue("Number")); bld.Append(" - "); bld.Append(xobjIncident.GetLoadedPropValue("Name")); } else { bld.Append(xobjFolder.GetLoadedPropValue("Name")); } response.Subject = bld.ToString(); XmlNodeList xmlNodes = context.Config.SelectNodes("it:app-data/it:system-location/*"); string[] aAppInstanceUrls = new string[xmlNodes.Count]; for (int i = 0; i < xmlNodes.Count; ++i) { aAppInstanceUrls[i] = xmlNodes[i].InnerText; if (!aAppInstanceUrls[i].EndsWith("/")) { aAppInstanceUrls[i] = aAppInstanceUrls[i] + "/"; } } // ссылки на проект bld.Length = 0; bld.Append("Просмотр проекта:"); bld.Append(Environment.NewLine); foreach (string sAppUrl in aAppInstanceUrls) { bld.AppendFormat("\t{0}x-get-report.aspx?Name=r-Folder.xml&ID={1}{2}", sAppUrl, xobjFolder.ObjectID, Environment.NewLine); } bld.Append("Открыть в дереве:"); bld.Append(Environment.NewLine); foreach (string sAppUrl in aAppInstanceUrls) { bld.AppendFormat("\t{0}x-tree.aspx?METANAME=Main&LocateFolderByID={1}{2}", sAppUrl, xobjFolder.ObjectID, Environment.NewLine); } response.ProjectLinks = bld.ToString(); // ссылки на инцидент bld.Length = 0; if (bLinkToIncident) { bld.Append("Редактирование инцидента:"); bld.Append(Environment.NewLine); foreach (string sAppUrl in aAppInstanceUrls) { bld.AppendFormat("\t{0}x-list.aspx?OT=Incident&METANAME=IncidentSearchingList&OpenEditorByIncidentID={1}{2}", sAppUrl, xobjIncident.ObjectID, Environment.NewLine); } bld.Append("Просмотр инцидента:"); bld.Append(Environment.NewLine); foreach (string sAppUrl in aAppInstanceUrls) { bld.AppendFormat("\t{0}x-get-report.aspx?NAME=r-Incident.xml&DontCacheXslfo=true&IncidentID={1}{2}", sAppUrl, xobjIncident.ObjectID, Environment.NewLine); } bld.Append("Открыть в дереве:"); bld.Append(Environment.NewLine); foreach (string sAppUrl in aAppInstanceUrls) { bld.AppendFormat("\t{0}x-tree.aspx?METANAME=Main&LocateIncidentByID={1}{2}", sAppUrl, xobjIncident.ObjectID, Environment.NewLine); } response.IncidentLinks = bld.ToString(); } response.To = getUsersEMail(request, context); return(response); }