№15. Работа с файлами

Тема: Работа с файлами

Время на выполнение: 60 минут

Задание

  1. Получить файл с платежами (формат сообщения «платежи»)
  2. Каждый платеж преобразовать в отдельное сообщение
  3. Сохранить в базу данные платежей

Выполнение

Подготовительные работы

Создайте таблицу платежей. Таблицу можно создать мастером или выполнить скрипт, который можно найти в конце раздела.

Для этого откройте страницу в браузере:

http://localhost:8080/apex
image002

Перейдите в раздел

SQL Workshop -> Object Browser
image003

Создайте новую таблицу:

Create -> Table
image004

Поля таблицы:
image005

Первичный ключ
image006

Внешний ключ не создаем
image007

Далее
image008

Создаем таблицу:
image009

Созданная таблица:
image010

Скрипт для создания таблицы:

CREATE TABLE "LAB_PAYMENTS"
   (  "ID" VARCHAR2(100),
      "DEALID" VARCHAR2(100),
      "PAYDATE" DATE,
      "SUM" NUMBER,
      CONSTRAINT "LAB_PAYMENTS_PK" PRIMARY KEY ("ID") ENABLE
   ) ;

Создайте очередь LAB.15.IN
image011

Создайте каталог:

/home/vs/broker/payments
image012

Реализация

Создайте новое приложение: LAB.15
image013

Связанные библиотеки:
image014

image015

Создайте схему для платежа
image016

image017

image018

Схема сообщения:
image019

Схема:

<?xml version="1.0" encoding="UTF-8"?><xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
   <xsd:element name="OnePayment" type="PaymentType"></xsd:element>

   <xsd:complexType name="PaymentType">
          <xsd:sequence>
                    <xsd:element name="ID" type="xsd:string"></xsd:element>
                    <xsd:element name="DealID" type="xsd:string"></xsd:element>
                    <xsd:element name="Date" type="xsd:date"></xsd:element>
                    <xsd:element name="Sum" type="xsd:long"></xsd:element>
          </xsd:sequence>
   </xsd:complexType>
</xsd:schema>

Создайте поток ProcessPayments
image020

image021

image022

Перетащите в рабочую область ноду File Input:
image023

Свойства ноды:
image024

image025

image026

image027

image028

Добавьте в рабочую область ноду Mapping и соедините ее с нодой File Input, как показано на рисунке
image029

Создайте карту преобразований для ноды Mapping:
image030

Входящее сообщение и исходящее сообщения:
image031

image032

Карта преобразования:
image033

Свяжите узлы как показано на рисунке:
image034

Для преобразования For each сделайте следующий мапинг:
image035

Сохраните приложение и вернитесь в рабочую область потока.

Добавьте ноду MQ Output: LAB.15.IN
image036

Свойства ноды:
image037

image038

Добавьте к потоку обработчик ошибок:
image039

Протестируйте поток. Для этого установите приложение на сервере и скопируйте файл с платежами во входящий каталог.

Создаем Bar файл
image040

image041

image042

Файл для тестов находится в папке LAB на рабочем столе

Скопируйте файл payments.csv в каталог /home/vs/broker/payments
image043
После работы потока в очереди LAB.15.IN должно появится 30 сообщений:
image044

image045

image046
Создайте новый поток: SavePayment
image047

Добавьте в поток ноду MQ Input:
image048

Свойства ноды:
image049

image050

Добавьте в поток ноду Database и соедините ее с но дой MQ Input:
image051

Свойства ноды Database
image052

Откройте ESQL модуль ноды Database:
image053

Код модуля:

BROKER SCHEMA com.sharavara


CREATE DATABASE MODULE SavePayment_Database
                CREATE FUNCTION Main() RETURNS BOOLEAN
                BEGIN
                               INSERT INTO Database.LAB_PAYMENTS (
                               ID,
                               DEALID,
                               PAYDATE,
                               SUM
                               )
                               VALUES (
                               Body.OnePayment.ID,
                               Body.OnePayment.DealID,
                               Body.OnePayment.Date,
                               Body.OnePayment.Sum
                               );

                               RETURN TRUE;
                END;

END MODULE;

Добавьте к потоку подпоток обработки ошибок:
image054

Скомпилируйте BAR файл и установите обновленное приложение на сервер. После установки поток сразу же начнет обрабатывать очередь LAB.15.IN
image055

Сохраненные в БД платежи:
image056