Filedownload Contol - Как Привязать Поле Динамически?

phantom76

Lotus team
25.02.2005
360
4
#1
реализую следующую схему:

если в поле высталвен флаг, то на странице Xpage элемент FileDownload связываю с полем с вложениями из другого документа, если флага нет из текущего документа.
В Data Binding помещаю скрипт:

Код:
if ( dominoDocument1.getItemValue("ISHASCONTENT")=="1"){
repl_id = dominoDocument1.getItemValue("Orig_ReplicaID")
doc_id = dominoDocument1.getItemValue("Orig_ID")
srv = session.getCurrentDatabase().getServer()
db1 = session.getDatabase(null,null)
if (db1.openByReplicaID(srv,repl_id))
{
doc2 = db1.getDocumentByUNID(doc_id)
return doc2.getItemValue("Appendix")

}

}
else{
return dominoDocument1.getItemValue("Appendix")
}
на выходе имею в итоге Error 500. Где я так жестко ошибся?
 

phantom76

Lotus team
25.02.2005
360
4
#2
ошибка пропала после обращению к полю непосредственно:

Код:
if ( dominoDocument1.getItemValue("ISHASCONTENT")=="1"){
repl_id = dominoDocument1.getItemValue("Orig_ReplicaID")
doc_id = dominoDocument1.getItemValue("Orig_ID")
srv = session.getCurrentDatabase().getServer()
db1 = session.getDatabase(null,null)
if (db1.openByReplicaID(srv,repl_id))
{
doc2 = db1.getDocumentByUNID(doc_id)
return doc2.Appendix		
}

}
else{
return dominoDocument1.ATT_body}
Еще одно уточнение:

веб интерфейс размещается в отдельной БД0, в которой не хранятся данные. По умолчанию он взаимодействует с документнами\представлениями БД1, но иногда документы БД1 содержат ссылки на документы БД2.

нормально открываются через веб-интерфейс БД0, но для есть 2 момента, которые не победил пока:

1. В документах открытых из БД1 отображаются вложения, но загрузить их не удается из-за того, что происходит попытка загрузить файл из текущей БДО а не БД1 ( это скорее всего допилю )

2. В документах открытых по ссылке из БД2 не отображаются вложения в элементе FileDownload Control.
 

NickProstoNick

Статус как статус :)
Lotus team
22.08.2008
1 805
21
#3
А посмотри уровень доступа к базам через HTTP
Ну и включи "Show standard error page" может информации по больше будет? тогда точно получишь ответ на свой вопрос

Ну и смотрю по инету - многие советуют сделать клин и ребилд проекта
Ну еще
Для просмотра контента необходимо: Войти или зарегистрироваться
 

phantom76

Lotus team
25.02.2005
360
4
#4
А посмотри уровень доступа к базам через HTTP
Ну и включи "Show standard error page" может информации по больше будет? тогда точно получишь ответ на свой вопрос

Ну и смотрю по инету - многие советуют сделать клин и ребилд проекта
Ну еще
Для просмотра контента необходимо: Войти или зарегистрироваться
спасибо!

ошибки сейчас нет, просто атачи не мапит в FileDownload.
Как правильно на java привязать поле к FileDownload Control?
 

NickProstoNick

Статус как статус :)
Lotus team
22.08.2008
1 805
21
#5

phantom76

Lotus team
25.02.2005
360
4
#6
Спасибо! Действительно полезный материал! :) Ссылки на аттачи починил..

вот две тоже пригодились:

XPages File Download control, attachment is from another server

A fix for the XPages Download control
 

phantom76

Lotus team
25.02.2005
360
4
#7
остался вопрос по привязке поля на JavaScript в элементе FileDownload Control.

цель: флаг =1 мапим поле1 , флаг = 0 , мапим поле2. У меня не получилось или error 500 или пустое поле.
 

phantom76

Lotus team
25.02.2005
360
4
#8
Все таки какую схему лучше придумать по Xpages?

коротко:

- веб интерфейс в отдельной БД, настроен на работу с данными из других БД. Документы, которые открываются через XPages, могут содержать вложенные файлы. Часть документов имееют атачменты, хранящиеся в отдельных БД. При отображении такого документа? под XPage, необходимо, так же загрузить на страницу, относящиеся к нему аттачи через элемент FileDownload Contorl. Технически столкнулся с проблемой при связи поля, содержащего аттачи с элементом управления XPage для варианта на JavaScript.
 

NickProstoNick

Статус как статус :)
Lotus team
22.08.2008
1 805
21
#9
Все таки какую схему лучше придумать по Xpages?

коротко:

- веб интерфейс в отдельной БД, настроен на работу с данными из других БД. Документы, которые открываются через XPages, могут содержать вложенные файлы. Часть документов имееют атачменты, хранящиеся в отдельных БД. При отображении такого документа? под XPage, необходимо, так же загрузить на страницу, относящиеся к нему аттачи через элемент FileDownload Contorl. Технически столкнулся с проблемой при связи поля, содержащего аттачи с элементом управления XPage для варианта на JavaScript.
Ну попробую по копать
 

Zeka

Well-known member
01.09.2009
219
0
#10
Все таки какую схему лучше придумать по Xpages?
Сделать xp:panel в которую добавить ещё один датасоурс - документ с атачами. Его и обрабатывать в Filedownload Contol.
Не проверял, просто набросал, что б идёю понял:
Код:
<xp:panel>
<xp:this.data>
<xp:dominoDocument var="attDoc" action="openDocument">
<xp:this.documentId><![CDATA[#{java script:var doc_id = util.getAttachmentsDocID();
return doc_id}]]></xp:this.documentId>
<xp:this.databaseName><![CDATA[#{java script:var db = util.getAttachmentsDb()
return db;}]]></xp:this.databaseName>
</xp:dominoDocument>
</xp:this.data>
<xp:fileDownload rows="30" id="fileDownload1" displayLastModified="false" value="#{attDoc.files}"></xp:fileDownload>
</xp:panel>
Ещё есть вариант не зацыкливаться на Filedownload Contol, а тупо сгенерировать список УРЛ'ов на атачи в других базах и отобразиь их в репите.
 

NickProstoNick

Статус как статус :)
Lotus team
22.08.2008
1 805
21
#11
В принципе получилось по идее Zeka
Но есть проблемка... это все работает пока док новый. После сохранения работать отказывается
 

Zeka

Well-known member
01.09.2009
219
0
#12
Но есть проблемка... это все работает пока док новый. После сохранения работать отказывается
Надо добавить ignoreRequestParams="true" в эту панельку. Иначе documentId основного документа (что передаётся в УРЛ) переписывает и unid документа с атачами.
 

phantom76

Lotus team
25.02.2005
360
4
#13
Ок, по данной схеме все получилось. :) Спасибо!
Дополнительно пришлось перегенерировать ссылки для отдельных аттачей из некоторой особенности: в RT-поле и полях $File иногда не совпадают первоначальные названия файлов, пришлось получать дополнительно список аттачей к документу и мапить его при сборке сслыки в элементе FileDownlod.

Какие условия должны быть соблюдены, чтобы веб-интерфейс приложения не требовал авторизации?

- В ACL по дефолту разрешено чтение по всем базам открываемым через БД Xpages.
- В ACL добавлены запись Anonymous c правами на чтение
- создана конфигурация для сайта без авторизации

Авторизацию начинает требовать, если задаю параметры источников для дополнительного документам <xp:this.documentId>: если прописываю статикой конкретный ID, авторизация не требуется, если задаю через viewscope или значение поля из основного документам, то появляется окно для авторизации. Что может ее вызывать?

Код:
<xp:dominoDocument var="dominoDocument1" formName="Document"
action="openDocument">
</xp:dominoDocument>

<xp:dominoDocument
databaseName="TST/MOS!!app\origs.nsf"
formName="orig" ignoreRequestParams="true" var="OrigDocument"
action="openDocument">

<xp:this.documentId><![CDATA[#{java script:dominoDocument1.getItemValueString("Orig_ID")}]]></xp:this.documentId>
</xp:dominoDocument>
 

phantom76

Lotus team
25.02.2005
360
4
#14
Возможно ли программно, принудительно всех пользователей, открывающих приложение через веб, по умолчанию, без запроса у пользователей авторизовывать по предопределенной учетке, что-то типо одна на всех?
 

NickProstoNick

Статус как статус :)
Lotus team
22.08.2008
1 805
21
#15
:) я пробовал такое.... кое что даже получилось... но по хорошему - это большая дыра в безопасности. У такого метода нет жизни
 

phantom76

Lotus team
25.02.2005
360
4
#16
:) я пробовал такое.... кое что даже получилось... но по хорошему - это большая дыра в безопасности. У такого метода нет жизни
я думаю это мой случай, требуется на чтение предоставить доступ к БД через веб всем юзерам без авторизации.
 

NickProstoNick

Статус как статус :)
Lotus team
22.08.2008
1 805
21
#17
я думаю это мой случай, требуется на чтение предоставить доступ к БД через веб всем юзерам без авторизации.
Тю.... я думал задаче более глобальная... в твоем случае добавляешь в ACL пользователя Anonymous с правами ридера и будет тебе счастье.
Ну и соответственно разрешаешь доступ к базе из Internet
 

phantom76

Lotus team
25.02.2005
360
4
#18
Тю.... я думал задаче более глобальная... в твоем случае добавляешь в ACL пользователя Anonymous с правами ридера и будет тебе счастье.
Ну и соответственно разрешаешь доступ к базе из Internet
Спасибо, но так у меня давно было сделано :)
проблему решил, создав отдельные элементы управления, для документов, атачменты которых, хранятся в текущем доке (документы 1-го типа) и там, где атачменты вынесены в отдельный док. (документы 2-го типа).
авторизацию начинал требовать как только пытался отобразить документ 1-го типа через общий элемент управления, где определено 2 источника типа документ (основной док и док с аттачами), причем это ошибочная ситуация (т.к. док с атачами в этом случае не существовал, попытки сделать второй источник опционным не сняли запрос в авторизации), т.к. даже после аторизации контент не отображался. Поэтому, создал отдельные элементы управления для разных типов документов и включил их определение на стадии генерации ссылок на документы, т.е. в ссылке сразу указывается через какой элемент управления отображать контент.