2015-02-17 10 views
0

При обновлении классических приложений Domino в XPages возникает одна конкретная проблема: «что делать с инструкциями PRINT в существующих агентах, которые напрямую записываются в браузер?» У меня есть 200 агентов в моем файле nsf, который использует оператор Print в своем коде. Я исследовал найденную ссылку http://www.wissel.net/blog/d6plinks/SHWL-8SF7AH , но я не могу изменить код агента, так как он также используется в формах. Мне нужно повторно использовать эти агенты из xpages при нажатии кнопки, а также передать документ. Есть ли способ или альтернатива, которые могут решить мою проблему. требуется помощь.Повторное использование веб-агентов, которые PRINT для браузера в XPages Lotus

У нас есть метод Agent.runWithDocumentContext (doc: NotesDocument), который может запускать агент с xpage и передавать документ в памяти. Я создаю im-memory document

var doc = database.createDocument(); 
    doc.replaceItemValue("StartDate",startDate.getDateOnly()) 
    doc.replaceItemValue("EndDate",endDate.getDateOnly()) 
    doc.replaceItemValue("ReportName",reportName) 
    var agent:NotesAgent = database.getAgent("("+reportName+")"); 

    agent.runWithDocumentContext(doc); 

Этот документ в памяти, который я могу передать агенту. Но проблема, с которой я сталкиваюсь в настоящее время, заключается в том, что мои агенты используются для прямой печати, что невозможно через xpage, я предполагаю. Есть ли альтернативный способ передачи документа в документе агенту и возможность печати непосредственно в браузер через xpages. Нужна помощь, пожалуйста, помогите.

ответ

1

создать класс java, который вызывает ваш агент и считывает выходные данные ваших агентов во входном потоке и отображает поток в вычисленном поле в Xpages.

вот пример Java класс, который будет retrive выхода из вашего агента

package com.thomas; 
import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.net.MalformedURLException; 
import java.net.URL; 

    public class getAgentData{ 

     public String getData() throws IOException { 
      try { 
       URL url = new URL("http://localhost/mydatabase.nsf/myagent?openagent"); 

       BufferedReader in = new BufferedReader(
       new InputStreamReader(url.openStream())); 
       String content = new String(); 
       String inputLine; 
       while ((inputLine = in.readLine()) != null) { 
        content+=inputLine; 
       } 
       in.close(); 
       return content; 

      } catch (MalformedURLException e) { 
       e.printStackTrace(); 
      } 
      return null; 
     } 
    } 

Если вы добавите класс Java, как бин в лицах-config.xml вы можете назвать его с помощью вычисляемого поля в вашем XPages нравится эта

<xp:text escape="true" id="computedField1" value="#{javascript:getAgentData().getData()}"></xp:text> 
+0

Не могли бы вы помочь мне с примером класса Java. Мне также нужно передать документ агенту, который я получаю в агенте, используя свойство NotesSession.DocumentContext. Есть ли альтернативный способ для вызова агента Xpage -> Lotus Form -> Агент вызывает загрузку формы, в которой агент может работать в контексте документа. Я новичок в Xpages, любая помощь будет очень полезной. – Ashish

+0

Я обновил свой ответ с помощью примера java-класса –

+0

Есть две проблемы с классом Томаса :-) а) он работает только с базами данных, к которым вы можете получить доступ анонимно, и может возникнуть неудача при больших ответах. Если вы хотите путешествовать по этому пути, используйте HTTP-клиент Apache – stwissel

2

Если вы хотите использовать XPages .. затем использовать XPages ... Значение миграции агентов в XPages способ делать вещи. Между XPages и Notes Client существует много преимуществ, или я полагаю, что даже Classic Domino Web. Но если вы настроились на сохранение 200 агентов, которые НЕ являются частью XPase Best practices, тогда это звучит для меня так, как будто вы вообще не должны использовать XPages.

EDIT: Эта ссылка: http://www-10.lotus.com/ldd/ddwiki.nsf/dx/XPages_and_Calling_Agents_Using_an_In-Memory_Document

Переговоры о вызове агента из XPages и быть в состоянии использовать в документе памяти. Может быть, это поможет, но если сильно использовать производительность, это не будет здорово, так как агент загружает и выгружает для каждого вызова. Это все еще плохая идея.

+0

Есть ли альтернативный способ вызова агента Xpage -> Lotus Form -> Agent call on загрузку формы или любой другой метод, в котором агент может работать в контексте документа. Я могу создать документ в форме с помощью параметра url из xpage в форму лотоса. У нас есть 100 БД, поэтому изменение каждой БД будет неправильным решением. Я новичок в Xpages, любая помощь будет очень полезной. – Ashish

+0

Я добавил ссылку на документ о том, как вызвать агента из xpages. Правильное решение состоит в том, чтобы не пытаться заставить XPages таким образом. Звучит неплохо. –

0

Необходимо немного изменить свой агент. Вместо Print "Something" вы должны использовать someobj.print "Something" - это должна быть управляемая задача с помощью поиска/замены. Подробные шаги были задокументированы in this blog entry.

Теперь вы заявляете, что вам нужно двойное использование агента. Не так сложно, как только вы переходите от программ копирования и вставки.

Когда вы проверяете класс - он ищет текст документа. Когда вы вызываете агента напрямую, контекста документа нет. Таким образом, вы проверяете, есть ли у вас документ, если он не классический, и вы добавляете в класс инструкцию печати, если она там сохраняется в контексте.

Код myObject.printResult = true для печати - или вы установите его верно по-умолчанию (но тогда вы загрязнить журнал :-))

Если вы обеспечиваете контекст документ при вызове агента, то обеспечит (например, DontPrint=1) из вашего XPages и проверьте его. Если он есть, сохраните только контекст, в противном случае добавьте оператор печати.

Дайте нам знать, как это происходит.

+0

Есть ли альтернативный способ вызова агента Xpage -> Lotus Form -> Агент вызова загрузки формы или любого другого метода, в котором агент может работать в контексте документа. Я могу создать документ в форме с помощью параметра url из xpage в форму лотоса. У нас есть 100 БД, поэтому изменение каждой БД не будет правильным решением. Я новичок в Xpages, любая помощь будет очень полезной. – Ashish

+0

«Достаточно некоторая работа» не делает решение «неправильным». Если вы настроили правильную среду разработки, то есть единицу со всеми конструкциями баз данных под контролем версий, вы можете запускать через агентов в ODP скрипт (любой язык) для настройки кода. Нет необходимости использовать форму между ними. – stwissel