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

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

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

Мурали Вридхачалам, ИТ-архитектор, IBM

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



07.05.2010

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

Введение

В статье Интеграция пакета 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Б
Образец кодаReadFormAppPI.zip16,7 KБ
Образец кодаSaveReadFormAppPI.zip.zip34,3 KБ

Ресурсы

Комментарии

developerWorks: Войти

Обязательные поля отмечены звездочкой (*).


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


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

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

 


Профиль создается, когда вы первый раз заходите в developerWorks. Информация в вашем профиле (имя, страна / регион, название компании) отображается для всех пользователей и будет сопровождать любой опубликованный вами контент пока вы специально не укажите скрыть название вашей компании. Вы можете обновить ваш IBM аккаунт в любое время.

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

Выберите имя, которое будет отображаться на экране



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

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

Обязательные поля отмечены звездочкой (*).

(Отображаемое имя должно иметь длину от 3 символов до 31 символа.)

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

 


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


  • Bluemix

    Узнайте больше информации о платформе IBM Bluemix, создавайте приложения, используя готовые решения!

  • Библиотека документов

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

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