Главная | О компании | Новости | Обучение | Обратная связь | Форум |
ABACUS Financial ABACUS Builder ABACUS Professional
|
Работа с COM объектами Работая в любой системе, перед программистом зачастую возникает задача использования объектов с COM интерфейсом. ABACUS Builder также позволяет это сделать. В качестве примера рассмотрим простейшее приложение, позволяющее рассматривать и редактировать списки клиентов, а также отсылать сообщения по e-mail, используя Microsoft Outlook, в единой системе. Microsoft Outlook имеет COM интерфейс. Данный пример показывает использование Microsoft Outlook из пакета MS Office 2000. Для других версий, возможно, потребуются корректировки. Как обычно, начнем с составления учетной схемы. У нас есть клиенты - предприятия, для которых необходимо вести учет адресов (юридического и фактического), телефонов, адресов электронной почты. Учетная схема будет выглядеть следующим образом:
Рис. 1. Учетная схема Как видим, эта учетная схема достаточно проста, и, безусловно, не соответствует всем требованиям, если вы будете писать реальную систему. Тем не менее, в качестве учебного примера этого нам будет вполне достаточно. Атрибут 7005 Комментарий - длинная строка. Небольшой комментарий к категории 70004 E-mail. Атрибут 2 предназначен для хранения адреса в виде строки, 7006 - это тоже строковый атрибут, в котором может храниться фамилия сотрудника предприятия, который работает с электронными письмами по указанному адресу. Поскольку у предприятия могут быть несколько адресов электронной почты, то мы привязываем категорию 70004 "снизу" к категории 70003. Для начала создадим экранную форму для добавления и редактирования атрибутов предприятия. Форма представлена на рис. 2.
Рис. 2. Предприятие. Инсталляция Компоненты NAME, ADDR1, ADDR2, PHONE, COMMENTS - вводимые атрибуты. Таблица TABLE - вводимая, компоненты CALC и CALC1 - отображаемые, размножаемые. Для CALC определены категория 70004 и документ 1 для редактирования адреса электронной почты и Ф.И.О. сотрудника. В компонент SELECT добавим формулу "Вычисление": DECLARE ob AS COV { ob:=%NAME; if ob.Obj() then { -/Проверяем, существует ли уже объект предприятия /- %TABLE:=aql( select #.2, #.7006 from ob:70004 -/ Выбираем все адреса электронной почты, "привязанные" снизу к предприятию /- ); } } Следующей экранной формой будет документ, позволяющий редактировать данные об адресе электронной почте предприятия (рис.3).
Рис. 3. Редактирование e-mail адреса. Инсталляция Компоненты MAIL и EMP - вводимые атрибуты, для e-mail и Ф.И.О. сотрудника, FIRM - компонент верхняя связь для отображения предприятия, определим категорию и документ для справочника - это категория 70003 и документ 2, отображающий список предприятий. Для главного компонента документа добавим формулу "Открытие": %FIRM:=Get_Parent_Doc().NAME; Этот документ будет вызываться из первого документа, поэтому компоненту FIRM мы присваиваем значение компонента NAME, то есть название фирмы, атрибуты которой мы редактируем. Библиотечная функция Get_Parent_Doc() позволяет нам получить документ, вызвавший открытие данного, а также доступ ко всем его компонентам. Следующий документ - список предприятий. Мы будем отображать только название, телефоны, а также e-mail адреса и фамилии сотрудников (рис. 4).
Рис. 4. Список предприятий. Инсталляция Таблица TABLE - вводимая, в ней четыре отображаемых размножаемых компонента NAME, PHONE, EMAIL, EMP. Для EMAIL в свойстве "По горизонтали" укажем компонент NAME, для EMP в свойстве "По горизонтали" укажем компонент EMAIL. В компонент SELECT добавим формулу "Вычисление" для заполнения таблицы TABLE: %TABLE:=aql( select #.(2,7004) from [70003*] ) В формуле мы отображаем только два атрибута, E-MAIL и EMP будем заполнять из формул "Вычисление" этих компонентов. Для E-MAIL ("отталкиваемся" от NAME): DECLARE ob AS COV { ob:=%NAME.Current(); return aql(ob:70004.2); --Получаем все адреса e-mail предприятия } Для EMP ("отталкиваемся" от E-MAIL): DECLARE ob AS COV { ob:=%MAIL.Current(); return aql(ob.7006); } -/Получаем все фамилии, имена, отчества сотрудников для связи по e-mail /- Разместим на форме кнопку FORM. В свойстве кнопки "Объект" укажем "Формула", в свойство "Текст" впишем "&Отправить письмо". Добавим для кнопки формулу "Вычисление" со следующим текстом: DECLARE dc AS DOC { dc:=Open_Doc([70003],3); -/Документ №3 по категории 70003, предназначен для отправки электронной почты /- dc.Do_Modal(); } Теперь последний документ, предназначенный для отправки e-mail письма (рис. 5).
Рис. 5. Отправка сообщения. Инсталляция Компонент ADDR - вычисляемое поле, отображаемый, предназначенный для отображения адреса получателя. Компоненты SUBJ, LETTER, ATT - вычисляемые поля, вводимые, предназначенные для ввода темы письма, текста письма и имени прикрепляемого файла соответственно. Для компонента LETER на вкладке свойств "Дополнительные" укажем свойство "Многострочный". Кнопка FORM служит для отправки сообщения, в свойстве "Текст" укажем "&Отправить". Теперь для главного компонента документа добавим формулу "Открытие" со следующим текстом: %ADDR:=Get_Parent_Doc().MAIL.Selected(); Таким образом, при открытии данного документа компоненту ADDR присваивается значение из выбранного компонента MAIL вызывающего документа. Последнее, что нам остается - это добавить формулу "Вычисление" для кнопки FORM: DECLARE Outlook, MailItem, subject, adress, attach AS OBJECT -/ Объявление переменных для работы с COM - объектом /- e_addr AS STRING { e_addr:=%ADDR; Outlook:=CreateOLEItem("Outlook.Application"); -/ Создаем объект OLE для работы с Microsoft Outlook Далее получаем свойства объекта и устанавливаем их значения, а также вызываем методы /- MailItem:=Invoke(Outlook,"CreateItem",0); SetProperty(MailItem,"Subject",%SUBJ); SetProperty(MailItem,"Body",%LETTER); adress:=GetProperty(MailItem,"Recipients"); Invoke(adress,"Add",e_addr); if %ATT!="" then { -/ Если указан файл, который необходимо прикрепить к письму /- attach:=GetProperty(MailItem,"Attachments"); Invoke(attach,"Add",%ATT); } Invoke(MailItem,"Send"); ReleaseOLEItem(MailItem); ReleaseOLEItem(Outlook); } Прикрепленный файл должен находиться на компьютере, на котором находится клиентское приложение.
|
|
|
||