• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

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

    Запись на курс до 25 апреля. Получить промодоступ ...

Открытие вложеных фрэймсэтов с аутлайна

  • Автор темы pokemaniac
  • Дата начала
Статус
Закрыто для дальнейших ответов.
P

pokemaniac

Добрый вечер, есть такая проблемка с универсальным портальчиком под лотус, начинал этот проект не я, поэтому приходиться подстраиваться под корявость принципов работы, вроде вложеных фрэймсетов...
вылядит это так
Главный фрэймсэт:
-------------------------------------------
|...................................................|
|-----------------------------------------|
|...........|.......................................|
|...........|.......................................|
|.outline|......NotesView5(main)....|
|...........|.......................................|
|...........|.......................................|
-------------------------------------------
Так воть, на выбор чего нибуть с аутлайна я генерирую набор переменный какой фрэймсэт и с какими данными в фрэймах открыть в NotesView5. оутлайн Source выглядит примерно так:

Код:
	t_OUnid:="BB5FEE9A17A48DACC22571330039D485";

REM { Repeated code in Outlines/"Notes Outline" each menu item Source };
REM {t_dblookup indexed: database - 1,2,3; element - 4,5,6; element type - 7,8,9; frameset - 10};

SetupUnid:=@DbColumn("":"NoCache"; ""; "vSetup"; 1);
t_VUnid:=@GetDocField(SetupUnid;"tmpDocID");

t_DBLookUp:=@Explode(@DbLookup("":"NoCache";@ReplicaID;"vDbLookupOutlineEntries";t_OUnid;2);">>>");

Frame1_ElementAlias:=@Left(t_dblookup[4];"?!");
Frame2_ElementAlias:=@Left(t_dblookup[5];"?!");
Frame3_ElementAlias:=@Left(t_dblookup[6];"?!");
Frame1_ElementTypeAlias:=@Left(t_dblookup[7];"?!");
Frame2_ElementTypeAlias:=@Left(t_dblookup[8];"?!");
Frame3_ElementTypeAlias:=@Left(t_dblookup[9];"?!");

t_id1:=@Left(t_dblookup[1];"?!");
t_id2:=@Left(t_dblookup[2];"?!");
t_id3:=@Left(t_dblookup[3];"?!");
t_s1:=@If(t_id1="";"";@DbLookup("":"NoCache";ReplicaID;"vDBLookUp";t_id1;2));
t_s2:=@If(t_id2="";"";@DbLookup("":"NoCache";ReplicaID;"vDBLookUp";t_id2;2));
t_s3:=@If(t_id3="";"";@DbLookup("":"NoCache";ReplicaID;"vDBLookUp";t_id3;2));

t_frameset:=t_dblookup[10];	

@SetDocField(t_VUnid; "Frame1_ElementAlias"; Frame1_ElementAlias);
@SetDocField(t_VUnid; "Frame2_ElementAlias"; Frame2_ElementAlias);	
@SetDocField(t_VUnid; "Frame3_ElementAlias"; Frame3_ElementAlias);
@SetDocField(t_VUnid; "Frame1_ElementTypeAlias"; Frame1_ElementTypeAlias);
@SetDocField(t_VUnid; "Frame2_ElementTypeAlias"; Frame2_ElementTypeAlias);
@SetDocField(t_VUnid; "Frame3_ElementTypeAlias"; Frame3_ElementTypeAlias);
@SetDocField(t_VUnid; "db1"; @Implode(t_s1;"^^^"));
@SetDocField(t_VUnid; "db2"; @Implode(t_s2;"^^^"));
@SetDocField(t_VUnid; "db3"; @Implode(t_s3;"^^^"));
@SetDocField(t_VUnid; "FrameSetName"; t_frameset);

@SetTargetFrame("NotesView5");
@Command([OpenFrameset];t_frameset)

В каждом аутлайне код этот же, различна лишь самая первая строка с ид (!!! кстати еще вопрос по оптимизации - как это дело сократить чтоб в каждый аутлайн не копипастить этот кусок кода. желательно без использования агента - я пробовал он говорит нет такого агента, и главное не понятно почему нет если он есть... вообщем лажа творится)

Так к чему это я... вообщем открывает он нужный фрэймсет, !НО то что я только что записывал поля в документ - почему то еще не сохранились, и в реале выходит что он на каждый выбор из аутлайна фрэймы открывают то что я выбирал прошлым кликом

В открытых фрэймсетах фрэймы сами через compose formula загружают нужные страницы.вью.доки.итд основываясь на переменных что я кидал в документ для барахла, что изпользуется глобально. примерно так:
Код:
SetupUnid:=@DbColumn("":"NoCache"; ""; "vSetup"; 1);
tmp_Unid:=@GetDocField(SetupUnid;"tmpDocID");

m_defobj := "WelcomePage?openpage";
m_defpath := @Name([CN]; @Subset(@DbName; 1)) + "/"+ @ReplaceSubstring(@Subset(@DbName; -1); "\\"; "/");
m_defurl:="notes://" + m_defpath + "/" + m_defobj;

m_de:=@GetDocField(tmp_Unid;"Frame1_ElementAlias");
m_et:=@GetDocField(tmp_Unid;"Frame1_ElementTypeAlias");
m_db:=@Explode(@GetDocField(tmp_Unid;"db1");"^^^");

m_FullPathProf := @Subset(m_db;-1);
m_server:=@Name([CN]; @Left(@Subset(m_db;1);"/"));
m_FullPath := m_server+ "/"+ @ReplaceSubstring(m_FullPathProf; "\\"; "/");
@Prompt([Ok];"";"notes://"+ m_FullPath + "/" + m_object);
@If(m_et="URL";m_de;@If( @IsError(db) | (m_de="") | (m_db="") | (m_et=""); m_defurl;"notes://" + m_FullPath + "/" + m_de+"?Open"+m_et))

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

-------------------------------

корявенькое решение на первое время я нашел, вроде работает, но верю что можно это сделать лучше
я просто сделал агента который выполнит лоад фреймсета, и вызваю его в конце аутлайна вместо последних 2 строчек.
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!