Вдогонку к теме (раз уж с 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
А по поводу второго вопроса, мне кажется проще дописать в сессию пользователя какой-то флаг, и от него уже "плясать".
Что-то вроде:
[csharp]
public void Redirect()
{
HttpSessionState session = HttpContext.Current.Session;
if (session["redirect"] == null) {
session.Add("redirect", 1);
HttpContext.Current.Response.Redirect(url);
}
[/csharp]
"Олейник Дмитрий" написал:Здравствуйте. По поводу вопроса в шапке:
http://msdn.microsoft.com/en-us/library/t9dwyts4.aspxС уважением,
Олейник Дмитрий
Эксперт 3-й линии поддержки
Ларчик просто открывался :-)
"Олейник Дмитрий" написал:
проще дописать в сессию пользователя какой-то флаг
с этого момента поподробнее, не понял
а, пардон, понял. Но все равно не понял :-)
Этот Redirect в MainPage получается вставлять?.....
Все получилось. :smile:
Метод перенаправляет на URL раздела, указанный в справочнике DepartmentHomeModule, департамент берет из записи контакта. Ежели уже перенаправляли, то ничего не делает (пользователь уже вошел), ну и если URL не установлен в справочнике тоже ничего не делает.
Метод такой вышел:
[csharp]
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 );
}
}
}
[/csharp]
P.S. Одного не пойму: какого лешего столь простую (как оказывается) функциональность нельзя было реализовать сразу в поставке? Задача стандартная до ужаса..... ну да ладно......
Ну, как вариант, часть кода с запросом можно унифицировать: создать свой класс в SourceScheme и реализовать общий метод. Что-то вроде
[csharp]
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();
}
[/csharp]
и тогда все будет красивее:
[csharp]
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);
}
}
}
[/csharp]
Согласен. Вообще эту конструкция много где пользуется, надо так и сделать.