ошибка: FRM47337 Tree node label can not be null при выполнении скрипта DECLARE |
Использование ActiveX и OLE в Oracle Forms
Контейнер 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 -контейнер и вставить в него объект, необходимо выполнить следующие действия:
- Находясь в редакторе разметки, найдите на панели инструментов элемент " OLE " и начертите его на канве. Установите для этого элемента следующие свойства:
- Имя: SysMon;
- Ширина: 340;
- Высота: 220.
- Для того чтобы вставить объект OLE, вызовите всплывающее меню элемента и выберите пункт "Insert Object". В появившемся окне (рис. 13.7) выберите объект "System Monitor Control".
- Запустите форму на выполнение. Вызовите всплывающее меню элемента и выберите пункт "Добавить счетчики" для запуска одноименного окна (рис. 13.8).
- Для того чтобы добавить счетчик, выберите объект, за которым предполагается вести наблюдение из выпадающего списка "Объект". Выберите необходимые счетчики из списка, для этого каждый раз при выборе счетчика нажимайте кнопку "Добавить" (рис. 13.9).
- Вы также можете управлять видом системного монитора, цветом, шрифтом и многими другими элементами, перечисленными в окне свойств монитора. Вы может следить не только за системой, но и за базой данных, указав ее в качестве источника. Для запуска окна свойств системного монитора вызовите всплывающее меню элемента и выберите пункт "Свойства". Пункт "Сохранить как" сохраняет текущие показания в файл с расширением *.html.
Попробуйте самостоятельно интегрировать различные объекты OLE в вашу форму, и вы обязательно найдете для себя что-то полезное.
Встраивание Internet Explorer
Как вы уже убедились, компоненты OLE и ActiveX позволяют за очень короткое время добиться хороших результатов, позволяя нам интегрировать в форму уже готовые объекты.
Выполним небольшое упражнение, в котором интегрируем Internet Explorer в нашу форму.
- Разместите элемент ActiveX на канве и растяните его на всю область канвы.
- Находясь в палитре свойств элемента, найдите свойство "Класс выполнения" и нажмите кнопку "Найти" для запуска окна " OLE -классы" (рис. 13.10).
- Найдите класс Shell.Explorer и подтвердите выбор.
- Вызовите всплывающее меню элемента и выберите пункт "Insert Object". Из доступного списка объектов выберите единственный доступный объект "Обозреватель веб-страниц Microsoft".
- Находясь в навигаторе объектов, выделите элемент ActiveX и выберите пункт главного меню Программа | Импорт интерфейса библиотеки OLE. Выберите пакет методов IWebBrowser2.
- Создайте триггер уровня формы 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 был детально и неоднократно рассмотрен в предыдущих разделах, поэтому перейдем непосредственно к выполнению задачи.
- Создайте новую форму и сохраните ее как MAIL_FILE.
- Создайте небазовый блок данных и назовите его MAILBOX.
- Создайте два текстовых элемента и одну кнопку (рис. 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
- Создайте процедуру с именем 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 - Для кнопки "Кнопка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 - Скомпилируйте форму и запустите на выполнение. В поле recipient укажите почтовый адрес получателя, а в поле attach_file - имя файла с указанием пути. Нажмите кнопку "отправить".
Возможность отправки писем может существенно упростить вашу работу, если вы, к примеру, ведете учет сотрудников или клиентов и, соответственно, имеете в распоряжении их почтовые адреса. Расширив функциональность приведенного примера, вы сможете использовать процедуру EMAIL для рассылки однотипной информации одним нажатием кнопки.