Главная О компании Новости Обучение Обратная связь Форум
сервер контра

ABACUS Financial ABACUS Builder ABACUS Professional ABACUS WEB

Работа с COM объектами ABACUS Builder (AB7) - инструмент разработки корпоративных информационных систем на базе СУБД Oracle

Работая в любой системе, перед программистом зачастую возникает задача использования объектов с 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);
}

Прикрепленный файл должен находиться на компьютере, на котором находится клиентское приложение.


Первый кассовый аппарат был сконструирован американцем Джеймсом Ритти в 1876 г. Прибор показывал сумму денег, полученную за каждую покупку, и хранил информацию обо всех, сделанных за день, операциях. Возможность ошибок и мелкого жульничества практически перестала существовать, и была достигнута исключительная точность записи всех торговых операций". Из истории создания ККМ, арифмометров и счетных машин
ABACUS Builder. Cостав инструмента разработки

  © Компания "ОМЕГА"   www.omega.ru   (495) 234-42-32,  (495) 727-43-50