Технические вопросы
5.x

Перенаправление в MainPage......

Вдогонку к теме (раз уж с URL разделов разобрались)
https://community.terrasoft.ru/forum/topic/9805
возник такой вопрос: как мне направить пользователя на конкретный URL?
Понятно, что надо что то дописать в MainPage.PageLoadComplete, но вопрос что и куда, чтобы всё не упало.......

Нравится

12 комментариев

И в ответ тишина........
Никто не пробовал что ли?
И мыслей нет?
Мне интересно через
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]

Согласен. Вообще эту конструкция много где пользуется, надо так и сделать.

Показать все комментарии