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

  • Автор темы KLif
  • Дата начала
K

KLif

Гость
#1
Всем привет.

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

morpheus

скриптописец
07.08.2006
3 915
1
34
Украина, Киев
#2
Для: KLif
навряд мне кажеться ... но это только моё имхо... JavaScript'a я не особый знаток, но насколько мне извесно работьа с базами он не умеет... буду рад ошибиться
 
S

Sandr

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

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


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

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


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

KLif

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

Если Вы хотите с ним что-либо скриптом делать, то делайте агент, который будет запускаться по @Command([ToolzRunmakro];MyAgent). А там опять таки по униду получаете на LS документ и работайте с ним... В этом способе текущий документ будет notessession.documentcontext, в нем Вы можете где-то хранить унид нужного документа.
Агент также можете запустить по урлу. Что-то типа http://hostname/dbName/MyAgent?OpenAgent&unid=myDocUnid

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

KLif

Гость
#7
Возникло два вопроса:

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

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

KLif

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

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

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

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

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

Код:
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))
Так вообще можно делать? никаких ошибок нет, просто ничего не происходит ...
 

Medevic

Что это ? :)
Lotus team
10.12.2004
3 346
2
36
Россия, Калуга
#9
<!--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]
Ну дык. Ты сохрани изменения в документе, переоткрой его в бравзере и всё будет хорошо. :)
 
F

fvoice

Гость
#10
Для: KLif
попробуйте:
Код:
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]
мне кажется достаточно:
Код:
window.frames['buffer'].location = "http://localhost/UserSt.nsf/GetProfileStructure?OpenAgent
 
K

KLif

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

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

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

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

Medevic

Что это ? :)
Lotus team
10.12.2004
3 346
2
36
Россия, Калуга
#12
Потому что нельзя использовать свойство session.CurrentAgent.parameterDocID.
Выцеплять UNID надо другими средствами. А именно смотреть поле currentdoc.QUERY_STRING_DECODED. И оттуда его получать.
 
K

KLif

Гость
#13
QUERY_STRING_DECODED - что это за поле, и почему оно всегда пустое?
 
K

KLif

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

Код:
	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 ... хелп вроде непротив ...
 
S

Sandr

Гость
#17
Мысля с 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

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

KLif

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

Код:
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. вытаскиваем нужное поле и его значение присваемваем полю в тек. доке

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

Всем спасибо :)