2016-04-08 5 views
2

Я новичок в IntraWeb и имею проблему. Чтобы внедрить форму входа, я сохранил наборы данных в разделе «Пользователь». Но когда дело доходит до доступа к наборам данных, я получаю ошибку нарушения доступа. Я понял, что Пользователь не создан. Теперь я немного смущен, потому что в документах Intraweb Documentation сказано, что Useression автоматически создается ServerController.Нарушение доступа при доступе к пользовательскому сервису во внутристратегии

доступа I (соответственно хочу к нему) Dataset как этот UserSession.Dataset.open;

Я использую IntraWeb Trial включены в RAD Studio xe5. Может быть, проблема? В случае, если это не проблема, как я могу создать пользовательскую роль вручную?

Большое спасибо

[Редактировать 13.4.16]

Проблема заключалась в оценке версии я использовал. После установки полной версии моя проблема исчезла. Они изменили процедуру их использования, добавив еще один параметр. Поэтому убедитесь, что вы используете текущую версию, если у меня такая же проблема: Спасибо за все ответы

+0

Создана ли UsserSession? – RBA

+0

№ Как-то действие на создание не получилось. я сделал контрольную точку в этой функции в ServerController 'процедуры TIWServerController.IWServerControllerBaseNewSession ( ASession: TIWApplication; вар VMainForm: TIWBaseForm);' но при отладке этой процедуры никогда не называли. – Chrispy1403

ответ

0

Вы должны создать внутри сессии «данные»

procedure TIWServerController.IWServerControllerBaseNewSession(
    ASession: TIWApplication; var VMainForm: TIWAppForm); 
begin 
    ASession.Data := TUserSession.Create; 
end; 

быть в курсе, что в этом примере

TUserSession

является определенный пользователем класс

type 
    TUserSession = class 
    public 
    UserCount: Integer; 
    end; 

взглянуть на этот учебник, который объясняет, как управление сессий осуществляется в ИВ - http://etutorials.org/Programming/mastering+delphi+7/Part+IV+Delphi+the+Internet+and+a+.NET+Preview/Chapter+21+Web+Programming+with+IntraWeb/Building+IntraWeb+Applications/

или обратитесь к technical documentation предоставленной atozed.

+0

Atozed Documentation говорит, что сеанс пользователей AA автоматически управляется IntraWeb. При запуске нового сеанса IntraWeb создаст для пользователя новый экземпляр TIWApplication (или IWApplication в Visual Studio .NET) и автоматически отследит его. Нужно ли мне его снова создать? Когда я смотрю на первую ссылку и данный пример, я вижу, что они не explizit вызывают процедуру «создать». – Chrispy1403

+0

Вы создали приложение, используя wizzard? С другой стороны, вы говорите, что вы создаете форму для входа, и я подозреваю, что ваш контроллер еще не закончил работу. Но без исходного кода вашего приложения это просто предположения ... – RBA

+0

Да, я использовал Wizzard. Что вы подразумеваете под «контроллером, который не закончил делать свою работу»? Я не изменял Код с Servercontroller. В действительности я думал о доступе к раннему тоже. Поэтому я создал экран «Добро пожаловать», на котором вы можете нажать кнопку, чтобы войти в Login. Если я получу это правильно, Servercontroller должен был создать до сих пор. Этот экран приветствия инициализирован как основной 'TiwfStart.SetAsMainForm;' , и за исключением процедуры onClick он идентичен сгенерированному модулю от Wizzard. Должен ли я опубликовать Кодекс Сайта в главном вопросе? Ты для своих усилий! – Chrispy1403

0

Я попытался добавить только комментарий, по-видимому, мне нужно больше очков для этого. Ответ будет найден, если вы перейдете к ответу RBA, но вот короткая форма:

IW автоматически создает и управляет сеансом пользователя. Тем не менее, TIWUserSession - это только ваша часть. Чтобы иметь свои собственные данные в сеансе, создайте TIWUserSession и добавьте его как .Data сессии. В IWServerControllerBaseNewSession сделать это с помощью:

ASession.Data := TIWUserSession.Create(nil, ASession); 

Обратите внимание, что параметр ASession процедуры является сессия управляется ИВ.

Для того, чтобы получить доступ к вашей TIWUserSession, создать процедуру в ServerController:

function UserSession: TIWUserSession; 
begin 
    Result := TIWUserSession(WebApplication.Data); 
end; 

Expose эту процедуру в разделе интерфейса.

Dan

+0

Созданный код автоматически выглядит следующим образом: 'ASession.Data: = TIWUserSession.Create (nil);' У меня есть только один аргумент для этой процедуры. Я где-то читал, что это потому, что я использую старую версию intraweb, и на самом деле я использую версию 14.0.0. Теперь я тестировал свои требования без использования UserSession и вскоре купил полную версию. Тогда у меня есть настоящая версия и надеюсь, что это будет делать трюк. Спасибо за вашу помощь – Chrispy1403

+0

Я думаю, что для 14.0.0 создание автоматического кода использует старую форму. Они изменили создание кода в 14.0.13. См.: [Link] (http://www.atozed.com/intraweb/history/XIV/index.EN.aspx) Старая форма должна была работать, как я ее понимаю. Также см. [Link] (http://docs.atozed.com/docs.dll/development/Migrating%20to%20IntraWeb%20XIV.html#OnNewSession) –

0

Мне пришло в голову, что мы могли бы быть «решение проблемы неправильно».

Вы указали, что это произошло, когда вы вводили форму входа. Вы также указали, что разрыв, установленный в WServerControllerBaseNewSession(), не попал.

В ServerController у вас есть значение «AuthBeforeNewSession» равным True? Если это так, установите значение False и посмотрите, изменилось ли поведение.

Dan

+0

У параметра «AuthBeforeNewSession» установлено значение false. – Chrispy1403