Вдогонку к теме (раз уж с URL разделов разобрались)
https://community.terrasoft.ru/forum/topic/9805
возник такой вопрос: как мне направить пользователя на конкретный URL?
Понятно, что надо что то дописать в MainPage.PageLoadComplete, но вопрос что и куда, чтобы всё не упало.......
Нравится
И в ответ тишина........
Никто не пробовал что ли?
И мыслей нет?
Мне интересно через
HtmlWindow.Open из System.Windows.Forms стоит пробовать или сразу забыть?
И еще такой вопрос: так как надо перенаправлять пользователя не всегда, а только после того как он вошел в систему (после "чистого" логина) как мне узнать с какого URL пришел пользователь?
Через HttpContext доставать?
Здравствуйте. По поводу вопроса в шапке:
http://msdn.microsoft.com/en-us/library/t9dwyts4.aspx
А по поводу второго вопроса, мне кажется проще дописать в сессию пользователя какой-то флаг, и от него уже "плясать".
Что-то вроде:
public void Redirect() { HttpSessionState session = HttpContext.Current.Session; if (session["redirect"] == null) { session.Add("redirect", 1); HttpContext.Current.Response.Redirect(url); }
"Олейник Дмитрий" написал:Здравствуйте. По поводу вопроса в шапке:
http://msdn.microsoft.com/en-us/library/t9dwyts4.aspxС уважением,
Олейник Дмитрий
Эксперт 3-й линии поддержки
Ларчик просто открывался :-)
"Олейник Дмитрий" написал:
проще дописать в сессию пользователя какой-то флаг
с этого момента поподробнее, не понял
а, пардон, понял. Но все равно не понял :-)
Этот Redirect в MainPage получается вставлять?.....
Все получилось. :smile:
Метод перенаправляет на URL раздела, указанный в справочнике DepartmentHomeModule, департамент берет из записи контакта. Ежели уже перенаправляли, то ничего не делает (пользователь уже вошел), ну и если URL не установлен в справочнике тоже ничего не делает.
Метод такой вышел:
void RedirectToDepartmentHomeModule(Guid ContactId) { Guid DepartmentId = Guid.Empty; string HomeURL = ""; var session = HttpContext.Current.Session; if (session["redirect"] == null) { session.Add("redirect", 1); Select selectDepartmentId = new Select(UserConnection). Column("DepartmentId"). From("Contact"). Where(Column.Const(ContactId.ToString())).IsEqual("Id") as Select; using (var dbExecutor = UserConnection.EnsureDBConnection()) { using (IDataReader dr = selectDepartmentId.ExecuteReader(dbExecutor)) { if (dr.Read()) { DepartmentId = UserConnection.DBTypeConverter.DBValueToGuid(dr[0]); } } } Select selectHomeURL = new Select(UserConnection). Column("HomeURL"). From("DepartmentHomeModule"). Where(Column.Const(DepartmentId.ToString())).IsEqual("DepartmentId") as Select; using (var dbExecutor = UserConnection.EnsureDBConnection()) { using (IDataReader dr = selectHomeURL.ExecuteReader(dbExecutor)) { if (dr.Read()) { HomeURL = dr[0].ToString(); } } } if (!String.IsNullOrWhiteSpace(HomeURL)) { HttpContext.Current.Response.Redirect( HomeURL ); } } }
P.S. Одного не пойму: какого лешего столь простую (как оказывается) функциональность нельзя было реализовать сразу в поставке? Задача стандартная до ужаса..... ну да ладно......
Ну, как вариант, часть кода с запросом можно унифицировать: создать свой класс в SourceScheme и реализовать общий метод. Что-то вроде
public string executeSelect(string columnName, string tableName, string recordId, string filterColumnName) { var result; Select selectDepartmentId = new Select(UserConnection). Column(columnName). From(tableName). Where(Column.Const(recordId)).IsEqual(filterColumnName) as Select; using (var dbExecutor = UserConnection.EnsureDBConnection()) { using (IDataReader dr = selectDepartmentId.ExecuteReader(dbExecutor)) { if (dr.Read()) { result= UserConnection.DBTypeConverter.DBValueToGuid(dr[0]); } } } return result.ToString(); }
и тогда все будет красивее:
void RedirectToDepartmentHomeModule(Guid ContactId) { Guid DepartmentId = Guid.Empty; string HomeURL = ""; var session = HttpContext.Current.Session; if (session["redirect"] == null) { session.Add("redirect", 1); string res = executeSelect("DepartmentId", "Contact", ContactId.ToString(), "Id"); string res2 = executeSelect("HomeURL", "DepartmentHomeModule", res , "DepartmentId"); if (!String.IsNullOrWhiteSpace(res2)) { HttpContext.Current.Response.Redirect( res2); } } }
Согласен. Вообще эту конструкция много где пользуется, надо так и сделать.