Автозаполнение Полей.

Тема в разделе "Lotus - Xpages", создана пользователем TAPAKAHATOP, 22 фев 2013.

  1. TAPAKAHATOP

    TAPAKAHATOP Active Member

    Регистрация:
    18 сен 2009
    Сообщения:
    29
    Симпатии:
    0
    XPages только осваиваю поэтому вопрос скорее всего окажется совсем от чайника.
    Есть нотусовая форма, которая при открытии для создания нового документа (Через Notes естесно) автоматически подтягивает необходимые данные из разных справочников в определенные поля, освобождая пользователя от необходимости их заполнять самому.
    Как реализовать тоже самое на XPages.
    Сделал пэйдж с аналогичными полями, и привязал их к аналогичным полям в форме.
    Часть полей сделал ридонлии прикрутил к ним дефолтные значения получаемые из справочников, которые корректно отображаются при открытии формы... но
    при сабмите, документ сохраняется только с теми полями которые заполнялись вручную.
     
  2. NickProstoNick

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

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    читайте!
    Тут куча ссылок на книги.. в нете на ютубе куча примеров
     
  3. Zeka

    Zeka Well-Known Member

    Регистрация:
    1 сен 2009
    Сообщения:
    219
    Симпатии:
    0
    Ненадо перетягивать лотусиные принципы в xPages.
    readonly поля не сохраняются, т.к. пользователь такое поле изменить не может. Поэтому оно не обрабатывается во время субмита.
    Инициализацию таких полей засунь в beforePageLoad.
    Для отображения таких полей используют не реадонли поля, а Computed Field.
     
  4. KingGLEB

    KingGLEB Active Member

    Регистрация:
    8 май 2008
    Сообщения:
    30
    Симпатии:
    0
    NickProstoNick, ткни плиз носом. Я тут тоже пытаюсь такую же проблему решить и чего-то у меня никак не выходит каменный цветочек.
    Ситуация следующая. Есть xpages, на котором размещены все элементы (меню слева/сверху, представления, форма документа), т.е. все элементы сделаны как custom controls и добавлены на одну xpages (documents.xsp).
    Есть один CustomControl который называется "Doc". Из представления для открытия документа используется открытие выделенного документа с использованием "/documents.xsp?content=doc". Вот тут всё отлично открывается.
    В CustomControl "Doc" есть DataSource "docMain".
    <xp:this.data>
    <xp:dominoDocument var="docMain" formName="Doc" computeWithForm="onload" action="openDocument"></xp:dominoDocument>
    </xp:this.data>
    Также в нем есть диалоговые окна, которые открываются по кнопке.

    А вот теперь вопрос. Как мне создать кнопку, которая создаст новый документ, заполнить в нем нужные мне поля и оставит эту форму для заполнения пользователю, при этом не сохранит документ на сервере и dataSource "docMain" будет соответствовать новому документу?

    Кнопку я создал типа
    <xp:button id="button1" value="Создать документ" styleClass="lotusBtn lotusBtnAction">
    <xp:eventHandler event="onclick" submit="true" refreshMode="complete">
    <xp:this.action><![CDATA[#{java script:var url=view.getPageName()+"?content=docs_form&action=newDocument"
    context.redirectToPage(url);}]]></xp:this.action>

    НО когда открывается новый документ, то с ним всё хорошо до тех пор пока не нажмешь кнопку на этом customcontrol. Как только жмешь кнопку, то сразу документу присваивается новый UNID.

    Никак не пойму как оно работает. Помогите понять плиз.
     
  5. NickProstoNick

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

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    Ну честно говоря не скажу про UNID, но кажется он у меня не меняется
    и не соглашусь с Zeka. Поля ReadOnly хорошо высчитываются и во время заполнения формы.
    У меня есть DataSource (у меня имя для обращения SourceDoc) с опцией Create document.
    При открытии правда у меня ничего автоматически не вычисляется, но по ходу заполнения формы - я вычисляю данные о пользователе.
    Все поля на форме - это EditBox. В одних разрешено редактирование - в других нет (Read Only).

    Все поля связаны с существующими полями в Notes-документе.
    01.png
    Документ сохраняется кнопкой Submit.

    Данные вычисляются по OnChange поля "Идентификатор"
    <div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">Пример SSJS-кода автозаполнения</div></div><div class="sp-body"><div class="sp-content"><!--shcode--><pre><code class='java'>var fio = "";
    var phone = "";
    var ln = "";

    var doc:NotesXspDocument = getPersonDoc1( getComponent("inputText1").value );

    if(doc != null){
    fio = doc.getItemValueString("NRULast") + " " + doc.getItemValueString("NRUFirst") + " " + doc.getItemValueString("NRUMiddle");
    ln = doc.getItemValueString("LotusName");
    phone = doc.getItemValueString("Phone");

    }


    SourceDoc.setValue("AuthorLotusName", ln);
    getComponent("inputText2").value = fio;
    getComponent("inputText3").value = phone;[/CODE]
    Заполнять можно как обращаясь к полю документа SourceDoc.setValue("AuthorLotusName", ln);
    Так и к компоненту WEB-формы: getComponent("inputText2").value = fio;
     
  6. KingGLEB

    KingGLEB Active Member

    Регистрация:
    8 май 2008
    Сообщения:
    30
    Симпатии:
    0
    А кнопка как выглядит, которая высвечивает эту форму?
     
  7. NickProstoNick

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

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    Никак. Это гиперссылка на страницу.
     
  8. KingGLEB

    KingGLEB Active Member

    Регистрация:
    8 май 2008
    Сообщения:
    30
    Симпатии:
    0
    Я понял почему у меня не получалось ничего.
    Еле определил в чем дело. Создаю новый документ через кнопку:
    <xp:button id="button1" value="Создать документ" styleClass="lotusBtn lotusBtnAction">
    <xp:eventHandler event="onclick" submit="true" refreshMode="complete">
    <xp:this.action><![CDATA[#{java script:var url=view.getPageName()+"?content=docs_form&action=newDocument"
    context.redirectToPage(url);}]]></xp:this.action>

    В customControl "docs_form" есть кнопка, которая открывает диалог (dialog.show()), в котором в свою очередь тоже есть кнопка (buttonDialog). Так вот, жмем кнопку создать документ, жмем кнопку вызова диалога и если нажать кнопку buttonDialog, происходит сохранение нового документа и тут же создается новый.

    Не надо использовать кнопки (button) в диалоговых окнах. Если в формах вместо них использовать ссылки (link) с соответствующим стилем (lotusBtn), то все работает как надо.

    Для Скришитон: если создать в datasource в событии postNewDocument скриптик, типа
    currentDocument.replaceItemValue("Subject", "Тема")
    то должно всё получится и все равно какое поле и есть ли оно у тебя на странице.

    PS: базу делал вот по этой инструкции.
     
  9. Zeka

    Zeka Well-Known Member

    Регистрация:
    1 сен 2009
    Сообщения:
    219
    Симпатии:
    0
    Я не говорил, что они не высчитываются. Я говорил, что они не сохраняются в датасурсе во время субмита! И в случае, когда инфа должна только отображаться, надо использовать не Edit Box с readonly="true", Computed Field.

    Перепроверил. Обсчитываются, но не сохраняются:
    Код (Text):
    <?xml version="1.0" encoding="UTF-8"?>
    <xp:view xmlns:xp="http://www.ibm.com/xsp/core">
    <xp:this.data>
    <xp:dominoDocument var="doc" formName="ReadOnlyTest"></xp:dominoDocument>
    </xp:this.data>
    <xp:inputText id="readOnlyField" value="#{doc.readOnlyField}" defaultValue="#{java script:1+2}" readonly="true"></xp:inputText>
    <xp:inputText id="normalField" value="#{doc.normalField}" defaultValue="#{java script:1+2}"></xp:inputText>
    <xp:button value="Save" id="button1">
    <xp:eventHandler event="onclick" submit="true" refreshMode="complete">
    <xp:this.action>
    <xp:saveDocument></xp:saveDocument>
    </xp:this.action>
    </xp:eventHandler>
    </xp:button>
    </xp:view>
     
  10. TAPAKAHATOP

    TAPAKAHATOP Active Member

    Регистрация:
    18 сен 2009
    Сообщения:
    29
    Симпатии:
    0
    Спасибо, да это помогло... от части =)
    Есть замечательные поля Readers и Authors
    А вот заполнение их чтото не догнал.
    При просмотре документа через толстый клиент, поля вроде есть и тип их правильный. А вот при пересохранении документа, он исчезает и я его больше видеть не могу.
    Пробовал как написанно на одном из буржуазных форумов:
    Код (Text):
    var doc=Document.getDocument();
    var item:NotesItem=doc.replaceItemValue("DocReaders",Authors);
    item.setReaders(true);
    Document.replaceItemValue("DocReaders",Authors);
    item:NotesItem=doc.replaceItemValue("DocAuthors",Authors);
    item.setAuthors(true);
    Document.replaceItemValue("DocAuthors",Authors);
    После сабмита все сохраняется верно, но при пересохранении опять улетает док в неизвестном направлении.
     
  11. hosm

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    а что такое Authors в контексте приведенного кода, оно содержит список нужных значений? попробовать можно: вместо приведенных в коде 3х строк для авторс вот такая колбаса не прокатит: doc.replaceItemValue("DocAuthors",Authors).setAuthors(true); и аналогично для ридерс.
     
  12. NickProstoNick

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

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    Я делаю так:
    Код (Text):
        var Author: NotesItem = SourceDoc.getDocument().replaceItemValue("Access", "*")
    Author.setAuthors(true)

    SourceDoc.save();
     
  13. TAPAKAHATOP

    TAPAKAHATOP Active Member

    Регистрация:
    18 сен 2009
    Сообщения:
    29
    Симпатии:
    0
    Спасибо.
     
Загрузка...

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