Опубликован: 25.09.2009 | Уровень: специалист | Доступ: платный
Лекция 13:

Использование ActiveX и OLE в Oracle Forms

< Лекция 12 || Лекция 13: 12 || Лекция 14 >

Контейнер OLE

OLE (англ. Object Linking and Embedding ) - это мощная технология связывания и внедрения объектов и протокол. Первая версия OLE была выпущена в 1990 году на основе технологии DDE. OLE позволяет передавать часть работы от одной программы редактирования к другой и возвращать результаты назад. Эта технология применяется для передачи данных между различными приложениями, внедрения одного типа документа в другой, работы с мультимедиа и для обработки составных документов. Следующая версия этой технологии уже начала развиваться в архитектуру COM (Сomponent Object Model). OLE 2.0, в отличие от своего предшественника OLE 1.1, не только стала надстройкой над архитектурой COM, но и использует новые особенности автоматизации технологий drag-and-drop, in-place activation и structured storage.

Создание элемента

Используя OLE -контейнер, вы можете встраивать документы Microsoft Office, различные медиапроигрыватели и многое другое из списка объектов OLE, с которым вы ознакомитесь немного позже. Рассмотрим с вами пример, в котором, применяя компонент OLE, создадим форму мониторинга вашей системы. Чтобы создать OLE -контейнер и вставить в него объект, необходимо выполнить следующие действия:

  1. Находясь в редакторе разметки, найдите на панели инструментов элемент " OLE " и начертите его на канве. Установите для этого элемента следующие свойства:
    • Имя: SysMon;
    • Ширина: 340;
    • Высота: 220.
  2. Для того чтобы вставить объект OLE, вызовите всплывающее меню элемента и выберите пункт "Insert Object". В появившемся окне (рис. 13.7) выберите объект "System Monitor Control".
    Окно "Вставить объект OLE"

    Рис. 13.7. Окно "Вставить объект OLE"
  3. Запустите форму на выполнение. Вызовите всплывающее меню элемента и выберите пункт "Добавить счетчики" для запуска одноименного окна (рис. 13.8).
  4. Для того чтобы добавить счетчик, выберите объект, за которым предполагается вести наблюдение из выпадающего списка "Объект". Выберите необходимые счетчики из списка, для этого каждый раз при выборе счетчика нажимайте кнопку "Добавить" (рис. 13.9).
  5. Вы также можете управлять видом системного монитора, цветом, шрифтом и многими другими элементами, перечисленными в окне свойств монитора. Вы может следить не только за системой, но и за базой данных, указав ее в качестве источника. Для запуска окна свойств системного монитора вызовите всплывающее меню элемента и выберите пункт "Свойства". Пункт "Сохранить как" сохраняет текущие показания в файл с расширением *.html.
Окно "Добавить счетчики"

Рис. 13.8. Окно "Добавить счетчики"
Форма "МОНИТОРИНГ"

Рис. 13.9. Форма "МОНИТОРИНГ"

Попробуйте самостоятельно интегрировать различные объекты OLE в вашу форму, и вы обязательно найдете для себя что-то полезное.

Встраивание Internet Explorer

Как вы уже убедились, компоненты OLE и ActiveX позволяют за очень короткое время добиться хороших результатов, позволяя нам интегрировать в форму уже готовые объекты.

Выполним небольшое упражнение, в котором интегрируем Internet Explorer в нашу форму.

  1. Разместите элемент ActiveX на канве и растяните его на всю область канвы.
  2. Находясь в палитре свойств элемента, найдите свойство "Класс выполнения" и нажмите кнопку "Найти" для запуска окна " OLE -классы" (рис. 13.10).
    Окно "OLE Классы"

    Рис. 13.10. Окно "OLE Классы"
  3. Найдите класс Shell.Explorer и подтвердите выбор.
  4. Вызовите всплывающее меню элемента и выберите пункт "Insert Object". Из доступного списка объектов выберите единственный доступный объект "Обозреватель веб-страниц Microsoft".
  5. Находясь в навигаторе объектов, выделите элемент ActiveX и выберите пункт главного меню Программа | Импорт интерфейса библиотеки OLE. Выберите пакет методов IWebBrowser2.
  6. Создайте триггер уровня формы WHEN-NEW-FORM-INSTANCE и напишите в нем следующий код:
    WHEN-NEW-FORM-INSTANCE
    Shell_IWebBrowser2.Navigate(:item('IEB.IE').interface, 'http://www.oracle.com');

Попробуйте запустить форму на выполнение, и вы увидите, как при запуске загрузится страница http://www.oracle.com.

Отправка почты с прикрепленным файлом

Отправляя письма своим друзьям, родным или близким, вы часто пользуетесь такой возможностью, как "прикрепление файла к письму", например, для того чтобы отправить письмо с фотографией, документом, архивом или еще каким-либо файлом. В этом разделе мы рассмотрим возможность отправки письма с прикрепленным файлом. Для выполнения поставленной задачи будем использовать встроенный пакет Oracle Forms - OLE2.

Пакет OLE2 был детально и неоднократно рассмотрен в предыдущих разделах, поэтому перейдем непосредственно к выполнению задачи.

  1. Создайте новую форму и сохраните ее как MAIL_FILE.
  2. Создайте небазовый блок данных и назовите его MAILBOX.
  3. Создайте два текстовых элемента и одну кнопку (рис. 13.11). Для элементов текста и кнопок установите следующие свойства:
    Элемент_текст 1: 
     Name - RECIPIENT 
     Data Type - Char 
     Maximum Length - 100 
     Database Item - No
    Элемент_текст 2: 
     Name - attach_file 
     Data type - Char 
     Maximum Length - 300 
     Database item - No
    Кнопка1:
     Label - Отправить
    Window:
     Name - MAIL_BOX
    Форма "MAILBOX"

    Рис. 13.11. Форма "MAILBOX"
  4. Создайте процедуру с именем EMAIL. В теле процедуры напишите код, приведенный в листинге 13.1.
    PROCEDURE email(vmail varchar2,filename varchar2) IS
    my_sqlerrm varchar2(200);
    OutlookApp OLE2.OBJ_TYPE;
    NameSpace OLE2.OBJ_TYPE;
    MailItem OLE2.OBJ_TYPE;
    OLEPARAM ole2.list_type;
    Send OLE2.OBJ_TYPE;
    Attachments OLE2.OBJ_TYPE;
    Attachment_dummy OLE2.OBJ_TYPE;
    v_to varchar2(50) := vmail ;
    v_body varchar2(250);
    v_subject varchar2(100):='PURCHASE ENQUIRY';
    BEGIN
    OutlookApp := OLE2.CREATE_OBJ('Outlook.Application');
    OLEPARAM := OLE2.CREATE_ARGLIST;
    OLE2.ADD_ARG(OLEPARAM,'MAPI');
    NameSpace := OLE2.INVOKE_OBJ(OutlookApp,'GetNameSpace',OLEPARAM);
    OLE2.DESTROY_ARGLIST( OLEPARAM );
    OLEPARAM := OLE2.CREATE_ARGLIST;
    OLE2.ADD_ARG(OLEPARAM,0);
    MailItem := OLE2.INVOKE_OBJ(OutlookApp,'CreateItem',OLEPARAM);
    OLE2.DESTROY_ARGLIST( OLEPARAM );
    v_body:='HELLO! From Sergio Sergeenko V. (Sqaimes)';
    ole2.set_property(MailItem,'To',v_to);
    ole2.set_property(MailItem,'Subject',v_subject);
    ole2.set_property(MailItem,'Body',v_body);
    Attachments := OLE2.GET_OBJ_PROPERTY(MailItem,'Attachments');
    -- Прикрепление файла
    OLEPARAM := OLE2.CREATE_ARGLIST;
    OLE2.ADD_ARG(OLEPARAM,filename);
    Attachment_dummy := OLE2.INVOKE_OBJ(Attachments,'add',OLEPARAM);
    OLE2.DESTROY_ARGLIST( OLEPARAM );
    Send := OLE2.INVOKE_OBJ(Mailitem,'Send');
    OLE2.RELEASE_OBJ( MailItem);
    OLE2.RELEASE_OBJ( NameSpace );
    OLE2.RELEASE_OBJ( OutlookApp );
    EXCEPTION
    WHEN OTHERS THEN
    my_sqlerrm := SUBSTR(SQLERRM, 1, 150); END;
    Листинг 13.1 . Процедура EMAIL
  5. Для кнопки "Кнопка1" создайте триггер WHEN_BUTTON_ PRESSED. В теле триггера напишите код, приведенный в листинге 13.2.
    /* проверим, чтобы поле "получатель" было заполнено*/ 
    IF : recipient is not null and inst(:recipient,'@')>0 
    THEN Email(:recipient, :attach_file); 
    END IF;
    Листинг 13.2. WHEN_BUTTON_PRESSED
  6. Скомпилируйте форму и запустите на выполнение. В поле recipient укажите почтовый адрес получателя, а в поле attach_file - имя файла с указанием пути. Нажмите кнопку "отправить".

Возможность отправки писем может существенно упростить вашу работу, если вы, к примеру, ведете учет сотрудников или клиентов и, соответственно, имеете в распоряжении их почтовые адреса. Расширив функциональность приведенного примера, вы сможете использовать процедуру EMAIL для рассылки однотипной информации одним нажатием кнопки.

< Лекция 12 || Лекция 13: 12 || Лекция 14 >
Константин Лукин
Константин Лукин

ошибка: FRM47337  Tree node label can not be null

при выполнении скрипта

DECLARE
 Itree ITEM;
 top_node Ftree.Node;
 new_node Ftree.Node;
 i_value VARCHAR2(30);
BEGIN
 Itree := Find_Item('tree_block.tree_item ');
 new_node := Ftree.Add_Tree_Node(Itree, Ftree.ROOT_NODE,
   Ftree.PARENT_OFFSET, Ftree.LAST_CHILD,
   Ftree.EXPANDED_NODE, i_value, NULL, i_value);
END;

Юлия Малыгина
Юлия Малыгина
приведена функция скрытия URL отчета и ее применение, но применения так и нет
Андрей Кошелев
Андрей Кошелев
Россия, Москва, Московская Финансово-Юридическая Академия
Артем Чуйко
Артем Чуйко
Россия, Самара