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

Тема в разделе "Lotus - Xpages", создана пользователем phantom76, 17 июл 2012.

  1. phantom76

    phantom76 Lotus team
    Lotus team

    Регистрация:
    25 фев 2005
    Сообщения:
    363
    Симпатии:
    9
    реализую следующую схему:

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

    Код (LotusScript):
    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. Где я так жестко ошибся?
     
  2. phantom76

    phantom76 Lotus team
    Lotus team

    Регистрация:
    25 фев 2005
    Сообщения:
    363
    Симпатии:
    9
    ошибка пропала после обращению к полю непосредственно:

    Код (LotusScript):
    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.
     
  3. NickProstoNick

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    А посмотри уровень доступа к базам через HTTP
    Ну и включи "Show standard error page" может информации по больше будет? тогда точно получишь ответ на свой вопрос

    Ну и смотрю по инету - многие советуют сделать клин и ребилд проекта
    Ну еще почитай тут
     
  4. phantom76

    phantom76 Lotus team
    Lotus team

    Регистрация:
    25 фев 2005
    Сообщения:
    363
    Симпатии:
    9
    спасибо!

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

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    :) (нажми меня)
    И тут более предметно кажется
     
  6. phantom76

    phantom76 Lotus team
    Lotus team

    Регистрация:
    25 фев 2005
    Сообщения:
    363
    Симпатии:
    9
  7. phantom76

    phantom76 Lotus team
    Lotus team

    Регистрация:
    25 фев 2005
    Сообщения:
    363
    Симпатии:
    9
    остался вопрос по привязке поля на JavaScript в элементе FileDownload Control.

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

    phantom76 Lotus team
    Lotus team

    Регистрация:
    25 фев 2005
    Сообщения:
    363
    Симпатии:
    9
    Все таки какую схему лучше придумать по Xpages?

    коротко:

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

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    Ну попробую по копать
     
  10. Zeka

    Zeka Well-Known Member

    Регистрация:
    1 сен 2009
    Сообщения:
    219
    Симпатии:
    0
    Сделать xp:panel в которую добавить ещё один датасоурс - документ с атачами. Его и обрабатывать в Filedownload Contol.
    Не проверял, просто набросал, что б идёю понял:
    Код (Text):
    <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, а тупо сгенерировать список УРЛ'ов на атачи в других базах и отобразиь их в репите.
     
  11. NickProstoNick

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    В принципе получилось по идее Zeka
    Но есть проблемка... это все работает пока док новый. После сохранения работать отказывается
     
  12. Zeka

    Zeka Well-Known Member

    Регистрация:
    1 сен 2009
    Сообщения:
    219
    Симпатии:
    0
    Надо добавить ignoreRequestParams="true" в эту панельку. Иначе documentId основного документа (что передаётся в УРЛ) переписывает и unid документа с атачами.
     
  13. phantom76

    phantom76 Lotus team
    Lotus team

    Регистрация:
    25 фев 2005
    Сообщения:
    363
    Симпатии:
    9
    Ок, по данной схеме все получилось. :) Спасибо!
    Дополнительно пришлось перегенерировать ссылки для отдельных аттачей из некоторой особенности: в RT-поле и полях $File иногда не совпадают первоначальные названия файлов, пришлось получать дополнительно список аттачей к документу и мапить его при сборке сслыки в элементе FileDownlod.

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

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

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

    Код (Text):
    <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>
     
  14. phantom76

    phantom76 Lotus team
    Lotus team

    Регистрация:
    25 фев 2005
    Сообщения:
    363
    Симпатии:
    9
    Возможно ли программно, принудительно всех пользователей, открывающих приложение через веб, по умолчанию, без запроса у пользователей авторизовывать по предопределенной учетке, что-то типо одна на всех?
     
  15. NickProstoNick

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    :) я пробовал такое.... кое что даже получилось... но по хорошему - это большая дыра в безопасности. У такого метода нет жизни
     
  16. phantom76

    phantom76 Lotus team
    Lotus team

    Регистрация:
    25 фев 2005
    Сообщения:
    363
    Симпатии:
    9
    я думаю это мой случай, требуется на чтение предоставить доступ к БД через веб всем юзерам без авторизации.
     
  17. NickProstoNick

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    Тю.... я думал задаче более глобальная... в твоем случае добавляешь в ACL пользователя Anonymous с правами ридера и будет тебе счастье.
    Ну и соответственно разрешаешь доступ к базе из Internet
     
  18. phantom76

    phantom76 Lotus team
    Lotus team

    Регистрация:
    25 фев 2005
    Сообщения:
    363
    Симпатии:
    9
    Спасибо, но так у меня давно было сделано :)
    проблему решил, создав отдельные элементы управления, для документов, атачменты которых, хранятся в текущем доке (документы 1-го типа) и там, где атачменты вынесены в отдельный док. (документы 2-го типа).
    авторизацию начинал требовать как только пытался отобразить документ 1-го типа через общий элемент управления, где определено 2 источника типа документ (основной док и док с аттачами), причем это ошибочная ситуация (т.к. док с атачами в этом случае не существовал, попытки сделать второй источник опционным не сняли запрос в авторизации), т.к. даже после аторизации контент не отображался. Поэтому, создал отдельные элементы управления для разных типов документов и включил их определение на стадии генерации ссылок на документы, т.е. в ссылке сразу указывается через какой элемент управления отображать контент.
     
Загрузка...
Похожие Темы - Filedownload Contol Как
  1. VladSh
    Ответов:
    4
    Просмотров:
    3.528

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