Перейти к тексту

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

При первом входе в developerWorks для Вас будет создан профиль. Выберите информацию отображаемую в Вашем профиле — скрыть или отобразить поля можно в любой момент.

Вся введенная информация защищена.

  • Закрыть [x]

При первом входе в developerWorks для Вас будет создан профиль и Вам нужно будет выбрать Отображаемое имя. Оно будет выводиться рядом с контентом, опубликованным Вами в developerWorks.

Отображаемое имя должно иметь длину от 3 символов до 31 символа. Ваше Имя в системе должно быть уникальным. В качестве имени по соображениям приватности нельзя использовать контактный e-mail.

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

Вся введенная информация защищена.

  • Закрыть [x]

Интеграция пакета IBM Lotus Forms 3.0.1 с IBM DB2 версии 9

Использование XML-средств DB2 версии 9 в системе Lotus Forms

Мурали Вридхачалам, ИТ-архитектор, IBM
Фото Мурали Вридхачалама
Мурали Вридхачалам (Murali Vridhachalam), сертифицированный Open Group ИТ-архитектор, участвует в проекте XBRL с начала 2005 года. Он был ведущим архитектором самого первого проекта IBM в сфере использования XBRL для подготовки финансовых отчетов в рамках добровольной программы XBRL Комиссии по ценным бумагам и биржам. В настоящее время его интересуют SOA и предложение программного обеспечения как услуг с использованием программного обеспечения IBM.

Описание:  В этой статье исследуются XML-возможности IBM® DB2 9, которые в сочетании с IBM Lotus® Forms позволяют извлекать документ Lotus Forms из базы данных в своем стандартном XML-формате и внедрять его в Java™ Server Pages (JSP).

Дата:  07.05.2010
Уровень сложности:  средний
Активность:  3697 просмотров
Комментарии:  


Примечание редактора. Эта тема вам хорошо знакома? Желаете поделиться опытом? Примите участие в вики-программе, посвященной программному обеспечению IBM Lotus.

Вики по Lotus Forms

Введение

В статье Интеграция пакета IBM Workplace Forms V2.6 с IBM DB2 версии 9 говорилось о том, как добавить кнопку для передачи формы, реализовать сервлет, сохраняющий форму (и экземпляры ее XML-данных) в DB2 9, и использовать Центр управления DB2 9, чтобы убедиться, что данные формы успешно сохранены. Из этой статьи вы узнаете, как извлечь эти формы из базы данных и встроить их в свои JSP-страницы с сохранением того же стиля оформления страниц, что и в Web-приложении.

Кроме того, загрузив проект 2-й статьи и объединенный проект 1-й и 2-й статей, вы сможете считывать файлы Lotus Form из базы данных в их собственном стандартном формате и создавать такие файлы. В разделе "Загрузка" настоящей статьи содержатся следующие архивы:

  • DBExport.zip – информация DB2, необходимая для заполнения таблицы документами Lotus Forms;
  • ReadFormAppPI.zip служит источником информации для проекта этой статьи, которая понадобится для чтения документов Lotus Forms из DB2 и их отображения на JSP-страницах;
  • SaveReadFormAppPI.zip служит источником информации для объединенного проекта этой и предыдущей статьи. Этот файл позволяет создавать и читать документы Lotus Forms из DB2 и отображать их на JSP-страницах.

Предварительные замечания

Эта статья предполагает, что вы знакомы с XML, DB2, Lotus Forms и Web-приложениями в целом. Она предполагает также, что все предварительные условия для интеграции, перечисленные в 1-й статье, соблюдены.

Если в таблице acme.orders нет никаких заказов, можно сделать следующее.

  1. Разархивируйте файл DBExport.zip (он есть в разделе "Загрузка" этой статьи).
  2. Поместите папку DBExport на диск C:\.
  3. Выполните команду import, чтобы заполнить таблицу несколькими заказами.

Чтобы импортировать файл, можно выполнить следующие команды в окне команд DB2:

CONNECT TO ORDERSDB;
IMPORT FROM "C:\DBExport\Out.ixf" OF IXF METHOD N (CUSTOMERNUM, CUSTOMERNAME,
ORDERDETAIL, ORDERFORM) MESSAGES "C:\DBExport\Msg.txt" INSERT INTO ACME.ORDERS
(CUSTOMERNUM, CUSTOMERNAME, ORDERDETAIL, ORDERFORM);
CONNECT RESET;

После выполнения этих команд вы увидите свои заказы в таблице ACME.ORDERS, как показано на рисунке 1. Если данные импортированы правильно, папку C:\DBExport можно удалить.


Рисунок 1. Таблица ACME.ORDERS
Таблица ACME.ORDERS

Этот проект создан с использованием IBM WebSphereВ® Integration Developer 6.1, Lotus Forms 3.0.1 и DB2 9.1.


Извлечение документа Lotus Form

Обратите внимание на метод getLotusForm (INT intID) из класса DataHandler, показанный в листинге 1. Он передает параметры ordered/formid заказа, который хочет извлечь пользователь.


Листинг 1. Метод getLotusForm(int intID)
public String getLotusForm(int intID) throws Exception {

	// создание SQL-запроса для извлечения всех заказов из базы данных
	String sqlQuery = "SELECT ORDERFORM FROM ACME.ORDERS where  ID = " + intID;

	System.out.println("sqlQuery: " + sqlQuery);
	FormDAO formDAO = new FormDAO();
	String strLotusForm = formDAO.getLotusFormFromDB2(sqlQuery);
	return strLotusForm;
}
	

Кроме того, в классе FormDAO с помощью метода getLotusFormFromDB2() можно установить соединение с базой данных и извлечь весь сохраненный документ Lotus Forms целиком из столбца ORDERFORM таблицы ACME.ORDERS.

Результаты можно хранить в строке, которая отображает документ Lotus Forms в формате XML и возвращает его сервлету.

Нужно также убедиться, что XML-форма правильно отформатирована и имеет кодировку UTF-8.

В примере, показанном в листинге 2, мы проверяем XML и исправляем его, если кодировка отличается от UTF-8.


Листинг 2. Документ Lotus Forms в формате XML
public String getLotusFormFromDB2(String sqlQuery) throws ServletException, SQLException {

	Statement stmt;
	ResultSet rs = null;
	Connection conn = null;

	String result = "";

	try {
		// открыть соединение
		DBController dbCon = new DBController();
		conn = dbCon.getConnection();

		// выполнить запрос
		stmt = conn.createStatement(); // Создание объекта Statement
		rs = stmt.executeQuery(sqlQuery);

		// чтение результата в виде строки
		result = "";
		try {
			rs.next();
			result = rs.getString(1); // Извлечение
			rs.close(); // Закрыть ResultSet
			stmt.close();
		} catch (SQLException e2) {
			System.out.println("No results: " + sqlQuery);
			result = "";
		}
	} catch (SQLException e) {
		e.printStackTrace();
		result = e.toString();

		// Вновь сгенерировать исключение как ServletException.
		throw new ServletException("Error in getLotusFormFromDB2 method. Error
                                              message: " + e.getMessage());
	} catch (Exception e) {
		// Автоматически сгенерированный блок-ловушка TODO 
		e.printStackTrace();
	} finally {
		// закрыть соединение
		conn.close();
	}
	return result;
}
	


Вложение документа Lotus Forms в JSP

Документ Lotus Forms можно передать JSP в качестве атрибута для отображения на странице JSP:

request.setAttribute("LotusForm", xmlData);
request.getRequestDispatcher("displayLotusForm.jsp").forward(request, response);

Другой вариант, который мы не используем в нашем примере, позволяет применять PrintWriter в сервлете для распечатки формы, встроенной в страницу (листинг 3).


Листинг 3. Фрагмент кода PrintWriter
response.setCharacterEncoding("utf-8");
PrintWriter out = response.getWriter();
String htmlHeader = "<HTML><BODY><OBJECT id=\"Object1\" 
height=\"900\" width=\"900\"   classid=\"CLSID:354913B2-7190-49C0-944B-1507C9125367\">
<PARAM NAME=\"XFDLID\" VALUE=\"XFDLData\"><PARAM NAME=\"detach_id\" 
VALUE=\"2507088000\"><PARAM NAME=\"retain_Viewer\" VALUE=\"on\">
<PARAM NAME=\"refresh_url\" VALUE=\"envAware.html\"><PARAM NAME=\"TTL\" 
VALUE=\"17\"></OBJECT> <SCRIPT language=\"XFDL\" id=\"XFDLData\" 
type=\"application/vnd.xfdl; wrapped=comment\"> <!-- ";
String htmlFooter = " --> </SCRIPT><P>Return to 
<A HREF=\"simpleHTML.html\">Form</A></P></BODY></HTML>";
htmlData = htmlHeader +xmlData+htmlFooter ;
System.out.println(htmlData);
out.println(htmlData);
out.close();

В displayLotusForm.jsp нужно прочесть атрибут Lotus Forms и вставить его в JSP, как показано в листинге 4. Кроме того, можно изменить размер объекта в соответствии с размером формы.


Листинг 4. Включение в JSP атрибута Lotus Forms
<%
	String LotusForm = (String) request.getAttribute("LotusForm");

%>

<CENTER>
<TABLE border="0" cellpadding="2" width="100%">
  <TBODY>
  <TR>
  <TD><SCRIPT language="XFDL" id="XFDLData" 
  type="application/vnd.xfdl; wrapped=comment"> 

	<!-- 
	<%=LotusForm %>
	--> 

	</SCRIPT> 
		 <OBJECT id="IBMLotusForm" height="700" width="85%" border="0"
		vspace="10" hspace="10" style="font-family:Helvetica"
		classid="CLSID:354913B2-7190-49C0-944B-1507C9125367">
		<PARAM NAME="XFDLID" VALUE="XFDLData">
		    <!--[if !IE]>--> 
            <OBJECT id="IBMLotusForm" height="700" width="85%"
			border="0" vspace="10" hspace="10" style="font-family:Helvetica"
			type="application/vnd.xfdl">
			<PARAM NAME="XFDLID" VALUE="XFDLData">
			</OBJECT> 
                <!--<![endif]--> 
                </OBJECT>
             </TD>

		</TR>
	</TBODY>
</TABLE>

В JSP-страницу можно включить сам файл XFDL, чтобы сохранить свои кнопки навигации, заголовок и нижний колонтитул. Его нужно добавить как вставку, как показано во фрагменте кода PurchaseOrder.jsp в листинге 5.


Листинг 5. Фрагмент кода PurchaseOrder.jsp
<TD>
<SCRIPT language="XFDL" id="XFDLData" type="application/vnd.xfdl; wrapped=comment"> 
<!--
<jsp:include page='PurchaseOrder.xfdl'/>
-->
	</SCRIPT> 
	<OBJECT id="IBMLotusForm" height="700" width="85%" border="0"
		vspace="10" hspace="10" style="font-family:Helvetica"
		classid="CLSID:354913B2-7190-49C0-944B-1507C9125367">
		<PARAM NAME="XFDLID" VALUE="XFDLData">
		<!--[if !IE]>--> 
	       <OBJECT id="IBMLotusForm" height="700" width="85%"
		border="0" vspace="10" hspace="10" style="font-family:Helvetica"
				type="application/vnd.xfdl">
				<PARAM NAME="XFDLID" VALUE="XFDLData">
		   </OBJECT> 
		<!--<![endif]--> 
	</OBJECT>
</TD>


Исполнение на сервере

Чтобы запустить проект ReadFormApp, рассмотренный в этой статье, выполните следующие действия.

  1. Щелкните правой кнопкой мыши на index.html в папке SaveReadFormApp.
  2. Выберите Run As – Run on Server (Запустить на сервере). На отображаемой странице index.html видна единственная ссылка, Go to orders list (Перейти к списку заказов).

Чтобы исполнить объединенный проект SaveReadFormApp (рассматривается в 1-й и 2-й статьях), необходимо сделать следующее.

  1. Щелкните правой кнопкой мыши на index.html.
  2. Выберите Run on Server. На отображаемой странице index.html видны три ссылки, как показано на рисунке 2:
    • Create new order – lotus form embedded in jsp page (Создать новый заказ – lotus-форму, встроенную в JSP-страницу);
    • Create new order (Создать новый заказ);
    • Go to orders list.

Рисунок 2. Страница index.html
Страница index.html

При нажатии кнопки Create new order – lotus form embedded in jsp page PurchaseOrder.jsp отображает документ Lotus Forms PurchaseOrder.xfdl, встроенный в JSP-страницу, как показано на рисунке 3.


Рисунок 3. Документ PurchaseOrder.xfdl, встроенный в JSP-страницу
Документ PurchaseOrder.xfdl, встроенный в JSP-страницу

При запуске документа PurchaseOrder.xfdl на сервере вы получаете то преимущество, что URL выглядит так же, как имя сервлета. Такая эквивалентность означает, что проект можно установить на сервер, не меняя имени сервера или номера порта в URL Lotus Forms.


Советы

При интеграции Lotus Forms с DB2 9 примите к сведению следующие советы:

  • Если файл XFDL открывается как XML, и у вас установлена программа просмотра Lotus Forms, перейдите в консоль администратора, выбрав Environment – Virtual Hosts – хост по умолчанию – MIME-типы. Убедитесь в том, что для расширений xfdl и xfd выбрано MIME-Type application/vnd.xfdl. В противном случае добавьте эти значения и перезапустите сервер.
  • Если файл XFDL не открывается в Mozilla Firefox, убедитесь, что встраивая XFDL, вы определили нужный объект.
  • Если, щелкнув правой кнопкой мыши на файле, вы не видите опции Run on Server, выберите Windows – Preferences (Свойства). Затем выберите General (Общие) – Capabilities (Возможности) – Development (Разработка). Выберите Advanced (Дополнительно), затем выберите опцию Miscellaneous Eclipse Functionality (Прочие функциональные возможности).

Заключение

Из этой статьи вы узнали, как извлечь из базы данных DB2 документ Lotus Forms в форме, основанной на его XML-данных; для этого мы извлекли данные из поля XML. Кроме того, вы научились вставлять извлеченный документ Lotus Forms на JSP-страницу, чтобы сохранить тот же внешний вид Web-приложения. Наконец, вы узнали, как открыть файл XFDL на JSP-странице и сделать форму представления не зависящей от имени сервера и номера порта. Благодаря возможности читать и создавать документы Lotus Forms в базе данных в формате XML, можно разработать свою собственную логику для поддержания единообразия и сохранения любых документов Lotus Forms в DB2 9.



Загрузка

ИмяРазмерМетод загрузки
DBExport.zip11,4 KБHTTP
ReadFormAppPI.zip16,7 KБHTTP
SaveReadFormAppPI.zip.zip34,3 KБHTTP

Информация о методах загрузки


Ресурсы

Об авторе

Фото Мурали Вридхачалама

Мурали Вридхачалам (Murali Vridhachalam), сертифицированный Open Group ИТ-архитектор, участвует в проекте XBRL с начала 2005 года. Он был ведущим архитектором самого первого проекта IBM в сфере использования XBRL для подготовки финансовых отчетов в рамках добровольной программы XBRL Комиссии по ценным бумагам и биржам. В настоящее время его интересуют SOA и предложение программного обеспечения как услуг с использованием программного обеспечения IBM.

Помощь по сообщениям о нарушениях

Сообщение о нарушениях

Спасибо. Эта запись была помечена для модератора.


Помощь по сообщениям о нарушениях

Сообщение о нарушениях

Сообщение о нарушении не было отправлено. Попробуйте, пожалуйста, позже.


developerWorks: вход


Нужен IBM ID?
Забыли Ваш IBM ID?


Забыли Ваш пароль?
Изменить пароль

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


При первом входе в developerWorks для Вас будет создан профиль. Выберите информацию отображаемую в Вашем профиле — скрыть или отобразить поля можно в любой момент.

Выберите ваше отображаемое имя

При первом входе в developerWorks для Вас будет создан профиль и Вам нужно будет выбрать Отображаемое имя. Оно будет выводиться рядом с контентом, опубликованным Вами в developerWorks.

Отображаемое имя должно иметь длину от 3 символов до 31 символа. Ваше Имя в системе должно быть уникальным. В качестве имени по соображениям приватности нельзя использовать контактный e-mail.

(Должно содержать от 3 до 31 символа.)


Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Оценить эту статью

Комментарии

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=Lotus, Information Management
ArticleID=488084
ArticleTitle=Интеграция пакета IBM Lotus Forms 3.0.1 с IBM DB2 версии 9
publish-date=05072010
author1-email=mural@us.ibm.com
author1-email-cc=lubacher@us.ibm.com

Теги

Help
Используйте форму поиска, чтобы найти любой контент с данным тегом в My developerWorks. Используйте ползунок, чтобы отразить больше или меньше тегов.

КнопкаПопулярные теги отображает самые распространенные теги для данной области контента (например: Java, Linux, WebSphere).

Кнопка Мои теги отображает Ваши теги для данной области контента (например: Java, Linux, WebSphere).

Используйте форму поиска, чтобы найти любой контент с данным тегом в My developerWorks. Кнопка Популярные теги отображает самые распространенные теги для данной области контента (например: Java, Linux, WebSphere). Кнопка Мои теги отображает Ваши теги для данной области контента (например: Java, Linux, WebSphere).