Я хочу распечатать выбранные документы из представления

Есть ли у кого-нибудь предложение о том, как распечатать выбранные документы в простом представлении xPages. Я конвертирую устаревшее приложение. Который использовал следующий код сценария Lotus для печати. Спасибо

Set db = session.CurrentDatabase
Set collection = db.UnprocessedDocuments
count = collection.count

If count = 0 Then
    Goto errSelectDocs
End If

Stop
For i = 1 To count
      '
    Set note = collection.GetnthDocument (i)

    Set Source2 = w.EditDocument( False, note )

    Set Source3 = w.ComposeDocument("","","mRecensement imp")
    Call Source3.print(1)
    Call Source3.close
    Call Source2.close


      '----------------------------------

nextdocument:        

Next

person user1339222    schedule 26.07.2013    source источник


Ответы (2)


Я собираюсь ответить здесь, а не на комментарии к ответу Саймона. так хорошо. Мы говорим создать новую страницу с повторным контролем выбранных документов. и задающий вопрос говорит, Я ДУМАЮ, что это кажется неправильным: doc:NotesDocument=database.getDocumentByID(rowData); вернуть doc.getItemValue ("xxxx") для 30+ элементов

Правильно. Вы не хотите этого делать. должно сработать. Но противно делать.

Вероятно, я бы создал функцию SSJS для передачи rowData. В этой функции создайте массив. Загрузите документ один раз... поместите все элементы в массив и передайте их обратно на страницу с помощью элемента управления повторением.

Вероятно, тогда вы имеете панель и используете либо dataContext, либо objectData, привязанный к панели. Внутри панели находится ваша страница и поля. Эти поля просто считываются из dataContext или objectData. так что вы получаете документ только один раз. Я думаю, вы могли бы даже использовать только переменную с областью действия, хотя я не думаю, что есть событие для вызова кода в каждой строке. Так что вам нужно взломать его в первом поле, может быть, или что-то в этом роде. Но это то, что вы хотите. Ранее я задавал вопрос в потоке StackOver о возврате нескольких параметров, например: function">Как передать переменные параметры в функцию XPages SSJS?

Может быть, это полезно.

person David Leedy    schedule 27.07.2013
comment
Я чую еще одну ноту in9. :) - person Simon O'Doherty; 27.07.2013
comment
Очень полезно, я попробую это на следующей неделе. Спасибо, Саймон, ваше «неприглядное» решение с переработкой работает хорошо. Но я хочу исключить так много круговых поездок для данных - person user1339222; 27.07.2013
comment
Наконец, я загрузил данные один раз в компонент данных. Затем просто сослались на другие поля, используя EL. Спасибо Саймон и Дэвид. - person user1339222; 30.07.2013

Кто-то может предложить лучшее решение, но один из вариантов таков.

Сначала поместите свою панель просмотра на свой первый XPage. Выберите документы и нажмите кнопку. Код сделает это.

var viewPanel = getComponent("viewPanel1");
sessionScope.documentIDs = viewPanel.getSelectedIds();

Затем вы передаете его другому XPage, который имеет повторный контроль над структурой печати для документа. Он считывает идентификатор документа и создает страницу. Затем просто используйте обычную команду печати после загрузки.

window.print();
person Simon O'Doherty    schedule 26.07.2013
comment
Хммм, если создать повтор :‹xp:repeat id=repeat1 rows=30 value=#{sessionScope.documentIDs} var=rowData› ‹xp:text escape=true id=computedField1›‹xp:this.value›‹![CDATA [#{javascript: var doc:NotesDocument=database.getDocumentByID(rowData); return doc.getItemValue(dossier);}]]›‹/xp:this.value›‹/xp:text› ‹xp:br›‹/xp:br› Это работает, но могу ли я поместить NotesDocument в viewScope, как у меня около 30 полей для печати - person user1339222; 26.07.2013
comment
Я не знаю, почему вы хотите поместить объект notesdocument в viewScope. Первый. вы не хотите помещать какие-либо объекты заметок в область видимости. Вы можете поместить массив UNID в область действия и просто повторить это. Не уверен, что мне не хватает... - person David Leedy; 26.07.2013
comment
Просто повторять doc:NotesDocument=database.getDocumentByID(rowData); вернуть doc.getItemValue(xxxx) для 30+ элементов. Мне интересно, есть ли лучший способ. Это я, наверное, чего-то не понимаю :) - person user1339222; 27.07.2013
comment
Вы перерабатываете документы по мере прохождения цикла. Другой вариант — иметь представление с полями, которые вы хотите напечатать. Однако вы не сможете печатать поля RT таким образом. - person Simon O'Doherty; 27.07.2013
comment
Мне немного сложно следить за этим, так как код находится в комментариях и все такое. Вы говорите для КАЖДОГО поля, которое вы делаете: - person David Leedy; 27.07.2013