Добраться до дока, используя Js

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

  1. KLif

    KLif Гость

    Всем привет.

    Вообщем такая проблема ... нужно, используя JS, получить документ (не текущий). Кто-нибудь знает как это сделать?
     
  2. morpheus

    morpheus скриптописец

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
    Для: KLif
    навряд мне кажеться ... но это только моё имхо... JavaScript'a я не особый знаток, но насколько мне извесно работьа с базами он не умеет... буду рад ошибиться
     
  3. Sandr

    Sandr Гость

    куда вам его плучить надо?
    Если просто открыть, то это создайте урл типа http://hostname/dbName/0/docUNID?OpenDocument

    Если Вы хотите с ним что-либо скриптом делать, то делайте агент, который будет запускаться по @Command([ToolzRunmakro];MyAgent). А там опять таки по униду получаете на LS документ и работайте с ним... В этом способе текущий документ будет notessession.documentcontext, в нем Вы можете где-то хранить унид нужного документа.


    Агент также можете запустить по урлу. Что-то типа http://hostname/dbName/MyAgent?OpenAgent&unid=myDocUnid

    где myDocUnid - унид нужного Вам документа.
    тут вам прийдется получать нужный документ из параметра ссылки через Query_String


    Думаю, дальше сами разберетесь...
     
  4. KLif

    KLif Гость

    Не совсем понятно как использовать эти урл ... что просто какой то переменной присваиваешь урл? ... У меня есть доки которые хранят поля с опр структурой данных, в текущем доке мне нужно добраться до этого поля и по нему посторить html таблицу ... всё оборвалось на попытке добраться до дока ...
     
  5. Sandr

    Sandr Гость


    window.document.location = url
     
  6. KLif

    KLif Гость

    Спасибо, вы мне очень помогли.
     
  7. KLif

    KLif Гость

    Возникло два вопроса:

    1) можно ли сделать так, чтоб переменная просто содержала документ, а не открывала его?
    window.document.location = url (так идёт сразу открытие нужного дока)

    2) чему нужно присвоить урл, чтобы запустить агента?
     
  8. KLif

    KLif Гость

    Нашёл способ, но почему то не работает на практике ...

    1) кинул на форму

    <iframe name="buffer" src="about:blank" style="width:0px; height:0px; overflow:hidden; border:none;">
    </iframe>

    2) в JS запускаю агента и гружу его в этот фрейм

    Код (Text):
    window.frames['buffer'].location = "http://localhost/UserSt.nsf/GetProfileStructure?OpenAgent&unid="+document.forms[0].ProfileDocUNID.value
    3) код агента, currentdoc - текущий документ, doc - док, откуда хочу вытащить значение поля

    Код (Text):
    Set db = session.CurrentDatabase
    param = session.CurrentAgent.parameterDocID
    Set doc = db.GetDocumentByID(param)                    
    Set currentdoc = session.DocumentContext                   
    Call currentdoc.ReplaceItemValue("test", doc.GetItemValue("Structure")(0))
    Так вообще можно делать? никаких ошибок нет, просто ничего не происходит ...
     
  9. Medevic

    Medevic Что это ? :)
    Lotus team

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    <!--QuoteBegin-KLif+30:01:2008, 10:13 -->
    <span class="vbquote">(KLif @ 30:01:2008, 10:13 )</span><!--QuoteEBegin-->Так вообще можно делать? никаких ошибок нет, просто ничего не происходит ...
    [snapback]95722" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    Ну дык. Ты сохрани изменения в документе, переоткрой его в бравзере и всё будет хорошо. :)
     
  10. fvoice

    fvoice Гость

    Для: KLif
    попробуйте:
    Код (Text):
    Set db = session.CurrentDatabase
    param = session.CurrentAgent.parameterDocID
    Set doc = db.GetDocumentByID(param)                  
    print |Значение поля Structure = |+doc.Structure(0)
    на LS агенте Вы не можете менять то что в браузере, вы можете формировать, то что хотите увидеть, на сервере, и выводить это на экран.

    <!--QuoteBegin-KLif+30:01:2008, 13:13 -->
    <span class="vbquote">(KLif @ 30:01:2008, 13:13 )</span><!--QuoteEBegin-->window.frames['buffer'].location = "http://localhost/UserSt.nsf/GetProfileStructure?OpenAgent&unid="+document.forms[0].ProfileDocUNID.value
    [snapback]95722" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    мне кажется достаточно:
    Код (Text):
    window.frames['buffer'].location = "http://localhost/UserSt.nsf/GetProfileStructure?OpenAgent
     
  11. KLif

    KLif Гость

    1) доки сохранял, и в JS делал window.reload ...но после вызова агента, след строчки кода скрипта не идут, а именно рефрешь окна браузера ... я почему то думал что он поможет обновить текущий док ... но не вышло

    2) идешник нужен, что агент знал с каким доком работать, это нужно ...
    3) странно, но принт не сработал

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

    Что собственно я пытаюсь сделать: хочу получить значение поля из нужного документа и работать с этим значением в текущем доке ...
     
  12. Medevic

    Medevic Что это ? :)
    Lotus team

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Потому что нельзя использовать свойство session.CurrentAgent.parameterDocID.
    Выцеплять UNID надо другими средствами. А именно смотреть поле currentdoc.QUERY_STRING_DECODED. И оттуда его получать.
     
  13. KLif

    KLif Гость

    QUERY_STRING_DECODED - что это за поле, и почему оно всегда пустое?
     
  14. Medevic

    Medevic Что это ? :)
    Lotus team

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Для: KLif
    Спроси у хелпа. :)
     
  15. KLif

    KLif Гость

    Что то я стал забывать о стандартном лотусовском хелпе :D
    Вообщем, обошёлся без этого поля ... потому что в курентном доке могу хранить унид нужного дока .... но всё равно где то косяк:

    Код (Text):
        Set db = session.CurrentDatabase
    Set currentdoc = session.DocumentContext   
    Set doc = db.GetDocumentByUNID(currentdoc.GetItemValue("ProfileDocUNID")(0))
    Call doc.ReplaceItemValue("test", "fwefwefwe")
    Call doc.Save(False, True)
    Просто для теста, создал поле и пытаюсь в него забить строку ... после открываю док ручками из вьюхи, поле пустое .... агент не сработал? Это может быть из за того что у меня currentdoc не сохранён? мне как бы не надо его сохранять ... и вообще, если он не сохранён могу я его получить с помощью DocumentContext ... хелп вроде непротив ...
     
  16. Medevic

    Medevic Что это ? :)
    Lotus team

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Для: KLif
    Используй Print для дебага.
     
  17. Sandr

    Sandr Гость

    Мысля с iframe была хорошей... делаете этот айфрейм пиксельного размера (шоб неьбыло видно док), а потом JSом стучитесь туда...

    window.frames['buffer'].document.getElementById("Structure").value, тока учтите, что на форме того документа, значение поля которого хотите получить, долдны стоять галка generate HTML for all fields.

    А ваще лучше так, на эту форму лепите кнопку c id = "MyButton", пихаете её в <DIV style-"display:none></DIV> (див должен быть помечен как ХТМЛ) и делаете так window.frames['buffer'].document.getElementById("MyButton").click();

    по клику кнопки делаете @command([ToolzRunMakro];"MyAgent")

    В агенте документ получаетете через notessession.documentcontext

    Дальше лотус скриптом делаете все что Вам надо
     
  18. KLif

    KLif Гость

    О господи наконецто :D)

    Код (Text):
    window.frames['buffer'].location = "http://localhost/UserSt.nsf/AllProfiles/" + proText + "?OpenDocument"
    document.forms[0].test.value = window.frames['buffer'].document.forms[0].Structure.value
    1. загрузка нужного дока во фрейм
    2. вытаскиваем нужное поле и его значение присваемваем полю в тек. доке

    Вроде всё работает ... целый день убил на написание пары строк ... абидно

    Всем спасибо :)
     
Загрузка...

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