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

Тема в разделе "Lotus - Программирование", создана пользователем pokemaniac, 7 фев 2008.

Статус темы:
Закрыта.
  1. pokemaniac

    pokemaniac Гость

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

    Код (Text):
        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 загружают нужные страницы.вью.доки.итд основываясь на переменных что я кидал в документ для барахла, что изпользуется глобально. примерно так:
    Код (Text):
    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 строчек.
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей