Содержание


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

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

Comments

Примечание редактора. Эта тема вам хорошо знакома? Желаете поделиться опытом? Примите участие в вики-программе, посвященной программному обеспечению 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
Таблица 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
Страница 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, встроенный в 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.


Ресурсы для скачивания


Похожие темы


Комментарии

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

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