Старый-старый Web

Тема в разделе "Lotus - Программирование", создана пользователем doka, 10 май 2012.

  1. doka

    doka Well-Known Member

    Регистрация:
    18 фев 2010
    Сообщения:
    118
    Симпатии:
    0
    Здравствуйте!
    Стою на асфальте и лыжи не едут...

    Столкнулся с необходимостью дописать старую библиотеку javascript. Но что-то не могу физически найти ее в дизайнере. На форме путь прописан
    <script src='/Restr/SearchSprav_IE'></script>. На сервере порылся в папках тоже не нашел.

    Подскажите, где искать файл SearchSprav_IE? И каким образом скриптовые библиотеки подтягиваются на форму в вэбе?

    Если не ошибаюсь, в xpages библиотеки содаются в дизайнере и потом подтягиваются, а это схемка не понятна.
     
  2. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.079
    Симпатии:
    300
    <notesdata>/domino/html - базовый путь для веба

    Добавлено: а ваще никто не отменял поиск файлов ;):
    -никсы locate -i <часть имени>
    -винда dir /s *<часть имени>*.*
     
  3. ToxaRat

    ToxaRat Чёрный маг
    Lotus team

    Регистрация:
    6 ноя 2007
    Сообщения:
    3.046
    Симпатии:
    18
    скорее всего это тупо пейдж ;)

    Добавлено: хотя вру ;)
    учитывая путь '/Restr/SearchSprav_IE'
    значит ищите вид Restr в нём должен светиться документ с ключом SearchSprav_IE
    это обычный док

    что характерно для сайта-конструктора под лотус
     
  4. doka

    doka Well-Known Member

    Регистрация:
    18 фев 2010
    Сообщения:
    118
    Симпатии:
    0
    а если путь /Restr/Restr_IO.nsf/SearchSprav_IE?

    Получается что берет из базы и искать все же стоит через дизайнер?
    Может кто-то занимался более ранними разработками под вэб и знает как библиотеки javascript подгружаются к форме?
     
  5. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.079
    Симпатии:
    300
    первый слэш указывает на корень сайта...
    и сразу идет имя скрипта , после первого имени
    Т.о. - если нет редайректов для сайта - то читаем мой первый пост

    Добавлено:
    если такой путь - берёт из базы, но опять - могут быть редайректы

    Добавлено: в дополнение, могут быть определены:
    -форма с таким именем
    -вьюшка, а для неё темплэйт форма
    -пэдж
    ... м.б. др. эелементы
    при выводе этих элементов - тоже возможны "фокусы" с перенаправлением
    возможен и агент (но тут не помню про ограничения, при вызове)
     
  6. doka

    doka Well-Known Member

    Регистрация:
    18 фев 2010
    Сообщения:
    118
    Симпатии:
    0
    не, редиректов нет.

    А сам принцип разъяните пожалуйста. Вот я в script libraries создал библиотеку с типом javascript, как она подгружается к форме? Просто в дизайнере нет элемента с именем или алиасом SearchSprav_IE, но есть библиотека "Web SearchSprav_IE" с типом javascript. Я понимаю что код берется оттуда, но не догоняю как.
     
  7. hosm

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    посмотри в дизайнере в поле $TITLE алиасы у этой js либы.
     
  8. doka

    doka Well-Known Member

    Регистрация:
    18 фев 2010
    Сообщения:
    118
    Симпатии:
    0
    ;) гр...ный 8.5.3! ;)

    Вопрос снят, всем спасибо за участие
     
  9. Кирилл Шваб

    Кирилл Шваб Well-Known Member

    Регистрация:
    30 июн 2006
    Сообщения:
    144
    Симпатии:
    4
    При работе с классическими веб приложениями на Лотусе (когда используются формы и агенты WeQueryOpen/WebQuerySave) иногда необходимо выяснить где (в каких формах, сабформах) используется какая-нибудь JavaScript'овая библиотека или функция из этой библиотеки.

    Если библиотека вставлена в форму/сабформу как ресурс в onLoad/JS Header (или если в эти элементы вставлен JavaScript код), то стандартный поиск по базе ничего не найдет и помогает толька выгрузка всех элементов дизайна с помощью DXL, раскодирование данных в <rawitemdata> из Base64 и последующий поиск по содержимому файлов.

    Вот код агента, экпортирующий элементы дизайна:

    Код (C++):
    import lotus.domino.*;
    import java.io.*;
    import sun.misc.BASE64Decoder;

    public class JavaAgent extends AgentBase {

    private final String exportDir      = "c:\\dxl\\";
    private final String serverName     = "your_server_name";
    private final String databaseName   = "path_to_your_db";

    private final boolean includeAcl                    = true;
    private final boolean includeActions                = true;
    private final boolean includeAgents                 = true;
    private final boolean includeDbScript               = true;
    private final boolean includeDocuments              = true;
    private final boolean includeFolders                = true;
    private final boolean includeForms                  = true;
    private final boolean includeFramesets              = true;
    private final boolean includeHelpAbout              = true;
    private final boolean includeHelpIndex              = true;
    private final boolean includeHelpUsing              = true;
    private final boolean includeIcon                   = true;
    private final boolean includeImageResources         = true;
    private final boolean includeJavaResources          = true;
    private final boolean includeMiscCode               = true;
    private final boolean includeMiscFormatElements     = true;
    private final boolean includeMiscIndexElements      = true;
    private final boolean includeNavigators             = true;
    private final boolean includeOutlines               = true;
    private final boolean includePages                  = true;
    private final boolean includeProfiles               = true;
    private final boolean includeReplicationFormulas    = true;
    private final boolean includeSharedFields           = true;
    private final boolean includeStyleSheetResources    = true;
    private final boolean includeSubforms               = true;
    private final boolean includeScriptLibraries        = true;
    private final boolean includeViews                  = true;

    private final String ELEMENT_TYPE_ACL               = "Acl";
    private final String ELEMENT_TYPE_ACTION            = "Actions";
    private final String ELEMENT_TYPE_AGENT             = "Agents";
    private final String ELEMENT_TYPE_DB_SCRIPT         = "DatabaseScript";
    private final String ELEMENT_TYPE_DOCUMENT          = "Documents";
    private final String ELEMENT_TYPE_FOLDER            = "Folders";
    private final String ELEMENT_TYPE_FORM              = "Forms";
    private final String ELEMENT_TYPE_FRAMESET          = "Framsets";
    private final String ELEMENT_TYPE_HELP_ABOUT        = "HelpAbout";
    private final String ELEMENT_TYPE_HELP_INDEX        = "HelpIndex";
    private final String ELEMENT_TYPE_HELP_USING        = "HelpUsing";
    private final String ELEMENT_TYPE_ICON              = "Icon";
    private final String ELEMENT_TYPE_IMAGE_RESOURCE    = "ImageResources";
    private final String ELEMENT_TYPE_JAVA_RESOURCE     = "JavaResources";
    private final String ELEMENT_TYPE_MISC_CODE         = "MiscCode";
    private final String ELEMENT_TYPE_MISC_FORMAT       = "MiscFormat";
    private final String ELEMENT_TYPE_MISC_INDEX        = "MiscIndex";
    private final String ELEMENT_TYPE_NAVIGATOR         = "Navigator";
    private final String ELEMENT_TYPE_OUTLINE           = "Outlines";
    private final String ELEMENT_TYPE_PAGE              = "Pages";
    private final String ELEMENT_TYPE_PROFILE           = "Profiles";
    private final String ELEMENT_TYPE_REP_FORMULA       = "ReplicationFormulas";
    private final String ELEMENT_TYPE_SHARED_FIELD      = "SharedFields";
    private final String ELEMENT_TYPE_STYLESHEET        = "StyleSheets";
    private final String ELEMENT_TYPE_SUBFORM           = "Subforms";
    private final String ELEMENT_TYPE_SCRIPT_LIBRARY    = "ScriptLibraries";
    private final String ELEMENT_TYPE_VIEW              = "Views";

    private Session session;
    private Database db;
    private DxlExporter exporter;

    public void NotesMain() {

    try {
    session = getSession();
    db = session.getDatabase(serverName, databaseName);
    if (db == null) {
    System.out.println("Can't open remote database");
    return;
    }

    exporter = session.createDxlExporter();
    exporter.setForceNoteFormat(true);

    if (includeAcl)                     exportDesignElements(ELEMENT_TYPE_ACL);
    if (includeActions)                 exportDesignElements(ELEMENT_TYPE_ACTION);
    if (includeAgents)                  exportDesignElements(ELEMENT_TYPE_AGENT);
    if (includeDbScript)                exportDesignElements(ELEMENT_TYPE_DB_SCRIPT);
    if (includeDocuments)               exportDesignElements(ELEMENT_TYPE_DOCUMENT);
    if (includeFolders)                 exportDesignElements(ELEMENT_TYPE_FOLDER);
    if (includeForms)                   exportDesignElements(ELEMENT_TYPE_FORM);
    if (includeFramesets)               exportDesignElements(ELEMENT_TYPE_FRAMESET);
    if (includeHelpAbout)               exportDesignElements(ELEMENT_TYPE_HELP_ABOUT);
    if (includeHelpIndex)               exportDesignElements(ELEMENT_TYPE_HELP_INDEX);
    if (includeHelpUsing)               exportDesignElements(ELEMENT_TYPE_HELP_USING);
    if (includeIcon)                    exportDesignElements(ELEMENT_TYPE_ICON);
    if (includeImageResources)          exportDesignElements(ELEMENT_TYPE_IMAGE_RESOURCE);
    if (includeJavaResources)           exportDesignElements(ELEMENT_TYPE_JAVA_RESOURCE);
    if (includeMiscCode)                exportDesignElements(ELEMENT_TYPE_MISC_CODE);
    if (includeMiscFormatElements)      exportDesignElements(ELEMENT_TYPE_MISC_FORMAT);
    if (includeMiscIndexElements)       exportDesignElements(ELEMENT_TYPE_MISC_INDEX);
    if (includeNavigators)              exportDesignElements(ELEMENT_TYPE_NAVIGATOR);
    if (includeOutlines)                exportDesignElements(ELEMENT_TYPE_OUTLINE);
    if (includePages)                   exportDesignElements(ELEMENT_TYPE_PAGE);
    if (includeProfiles)                exportDesignElements(ELEMENT_TYPE_PROFILE);
    if (includeReplicationFormulas)     exportDesignElements(ELEMENT_TYPE_REP_FORMULA);
    if (includeSharedFields)            exportDesignElements(ELEMENT_TYPE_SHARED_FIELD);
    if (includeStyleSheetResources)     exportDesignElements(ELEMENT_TYPE_STYLESHEET);
    if (includeScriptLibraries)         exportDesignElements(ELEMENT_TYPE_SCRIPT_LIBRARY);
    if (includeSubforms)                exportDesignElements(ELEMENT_TYPE_SUBFORM);
    if (includeViews)                   exportDesignElements(ELEMENT_TYPE_VIEW);

    } catch(Exception e) {
    e.printStackTrace();
    }
    }

    // main export stub
    public void exportDesignElements(String designElementType)
    {
    NoteCollection nc = null;

    try {
    nc = db.createNoteCollection(false);
    if (designElementType == ELEMENT_TYPE_ACL)              nc.setSelectAcl(true);
    if (designElementType == ELEMENT_TYPE_ACTION)           nc.setSelectActions(true);
    if (designElementType == ELEMENT_TYPE_AGENT)            nc.setSelectAgents(true);
    if (designElementType == ELEMENT_TYPE_DB_SCRIPT)        nc.setSelectDatabaseScript(true);
    if (designElementType == ELEMENT_TYPE_DOCUMENT)         nc.setSelectDocuments(true);
    if (designElementType == ELEMENT_TYPE_FOLDER)           nc.setSelectFolders(true);
    if (designElementType == ELEMENT_TYPE_FORM)             nc.setSelectForms(true);
    if (designElementType == ELEMENT_TYPE_FRAMESET)         nc.setSelectFramesets(true);
    if (designElementType == ELEMENT_TYPE_HELP_ABOUT)       nc.setSelectHelpAbout(true);
    if (designElementType == ELEMENT_TYPE_HELP_INDEX)       nc.setSelectHelpIndex(true);
    if (designElementType == ELEMENT_TYPE_HELP_USING)       nc.setSelectHelpUsing(true);
    if (designElementType == ELEMENT_TYPE_ICON)             nc.setSelectIcon(true);
    if (designElementType == ELEMENT_TYPE_IMAGE_RESOURCE)   nc.setSelectImageResources(true);
    if (designElementType == ELEMENT_TYPE_JAVA_RESOURCE)    nc.setSelectJavaResources(true);
    if (designElementType == ELEMENT_TYPE_MISC_CODE)        nc.setSelectMiscCodeElements(true);
    if (designElementType == ELEMENT_TYPE_MISC_FORMAT)      nc.setSelectMiscFormatElements(true);
    if (designElementType == ELEMENT_TYPE_MISC_INDEX)       nc.setSelectMiscIndexElements(true);
    if (designElementType == ELEMENT_TYPE_NAVIGATOR)        nc.setSelectNavigators(true);
    if (designElementType == ELEMENT_TYPE_OUTLINE)          nc.setSelectOutlines(true);
    if (designElementType == ELEMENT_TYPE_PAGE)             nc.setSelectPages(true);
    if (designElementType == ELEMENT_TYPE_PROFILE)          nc.setSelectProfiles(true);
    if (designElementType == ELEMENT_TYPE_REP_FORMULA)      nc.setSelectReplicationFormulas(true);
    if (designElementType == ELEMENT_TYPE_SHARED_FIELD)     nc.setSelectSharedFields(true);
    if (designElementType == ELEMENT_TYPE_STYLESHEET)       nc.setSelectStylesheetResources(true);
    if (designElementType == ELEMENT_TYPE_SCRIPT_LIBRARY)   nc.setSelectScriptLibraries(true);
    if (designElementType == ELEMENT_TYPE_SUBFORM)          nc.setSelectSubforms(true);
    if (designElementType == ELEMENT_TYPE_VIEW)             nc.setSelectViews(true);
    nc.buildCollection();

    int nDesignElements = nc.getCount();
    System.out.println("Exporting " + designElementType + " (" + nDesignElements + " element(s))...");

    int nNote = 1;
    String noteId = nc.getFirstNoteID();
    while (nNote <= nDesignElements)
    {
    System.out.print("Processing doc " + nNote + " of " + nDesignElements + " (NoteId: " + noteId + ")... ");

    Document noteDoc = db.getDocumentByID(noteId);
    if (noteDoc != null) {
    String designElementName = getDesignElementName(noteDoc);
    String originalFile = exportDir + "original\\" + designElementType + "\\" + designElementName + ".xml";
    String decodedFile = exportDir + "decoded\\" + designElementType + "\\" + designElementName + ".txt";
    String dxlData = exporter.exportDxl(noteDoc);
    String decodedDxlData = decodeRawItemData(dxlData);
    exportDataToFile(originalFile, dxlData);
    exportDataToFile(decodedFile, decodedDxlData);
    System.out.println("Done");
    } else {
    System.out.println("ERROR: Can't get document with NoteID " + noteId);
    }
    noteDoc.recycle();
    nNote++;
    noteId = nc.getNextNoteID(noteId);
    }
    nc.recycle();
    } catch(Exception e) {
    e.printStackTrace();
    }
    }

    // finds and decodes text between <rawitemdata ...> and </rawitemdata>
    public String decodeRawItemData(String fileContents)
    {
    int startPos = 0;

    try {
    while (fileContents.indexOf("<rawitemdata", startPos) != -1)
    {
    int rawItem_Start = fileContents.indexOf("<rawitemdata", startPos);
    int encodedData_Start = fileContents.indexOf(">", rawItem_Start) + 1;
    int encodedData_End = fileContents.indexOf("</rawitemdata", encodedData_Start);

    String rawData = fileContents.substring(encodedData_Start, encodedData_End);

    BASE64Decoder decoder = new BASE64Decoder();
    byte[] bDecodedData = decoder.decodeBuffer(rawData);
    String strDecodedData = new String(bDecodedData);

    String strStart = fileContents.substring(0, encodedData_Start);
    String strEnd = fileContents.substring(encodedData_End);
    fileContents = strStart + strDecodedData + strEnd;

    startPos = rawItem_Start + 1;
    }
    } catch (IOException e) {
    e.printStackTrace();
    }

    return fileContents;
    }

    // create file name from title or document's UNID
    public String getDesignElementName(Document noteDoc)
    {
    String elementName = "";

    try {
    if (noteDoc.hasItem("$Title")) {
    // if title is available - use it as file name
    elementName = noteDoc.getItemValueString("$Title");
    // replace characters disallowed in file name
    elementName = elementName.replaceAll("[\\\\|\\/:\"*?<>+|\n\r\t\f\0]", "");
    } else {
    // if title is unavailable - use UNID
    elementName = noteDoc.getUniversalID();
    }
    } catch (NotesException e) {
    e.printStackTrace();
    }

    return elementName;
    }

    // save data to file
    public int exportDataToFile(String pathToFile, String dataToExport)
    {
    createDirectories(pathToFile);

    int nWrittenBytes = 0;
    Stream stream;

    try {
    stream = session.createStream();
    if (stream.open(pathToFile)) {
    stream.truncate();
    nWrittenBytes = stream.writeText(dataToExport);
    stream.close();
    stream.recycle();
    if (nWrittenBytes == 0) {
    System.out.println("ERRROR: Zero bytes were written to file");
    }
    } else {
    System.out.println("ERROR: Can't create file " + pathToFile);
    }
    } catch (NotesException e) {
    e.printStackTrace();
    }

    return nWrittenBytes;
    }

    public void createDirectories(String pathToDir)
    {
    // get full path without file name
    int lastSlashPos = pathToDir.lastIndexOf("\\");
    if (lastSlashPos != -1)
    {
    String dirPath = pathToDir.substring(0, lastSlashPos);
    File file = new File(dirPath);
    if (!file.exists()) {
    boolean isCreated = new File(dirPath).mkdirs();
    if (isCreated == false) {
    System.out.println("ERROR: Can't create required directory: " + dirPath);
    }
    }
    }
    }
    }

    В начале агента задается:

    1. Директория, куда выгружаются данные (exportDir)
    2. Имя сервера (serverName)
    3. Имя базы (databaseName)
    4. Желаемые для выгрузки элементы дизайна (include... = true/false)
     
  10. ToxaRat

    ToxaRat Чёрный маг
    Lotus team

    Регистрация:
    6 ноя 2007
    Сообщения:
    3.046
    Симпатии:
    18
    а просто ЛС скриптом не проще? ;)
     
  11. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.079
    Симпатии:
    300
    неа ;) - не проще
    base64 глюкавый, ф-ционал языка часто ограничен...
    и путь вендора (в ком это веке) стал просматриваться - аппсервер подняли, код можно писать "один" (а не отдельно для каждого устройства отображения), js фрэймворк...
    т.е. - LS терь тока для поддержки старых приложений и тех кто не хочет перестраиваться
     
  12. ToxaRat

    ToxaRat Чёрный маг
    Lotus team

    Регистрация:
    6 ноя 2007
    Сообщения:
    3.046
    Симпатии:
    18
    а разве в DXML документ аттачи выплёвывает не в base64?
    смысл вообще декодировать?
     
  13. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.079
    Симпатии:
    300
    в том и дело что кодированный, а цель - получение сорца (в данном случае - скрипта)
     
Загрузка...
Похожие Темы - Старый старый Web
  1. Monarh
    Ответов:
    6
    Просмотров:
    3.473

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