Создание свойств и методов формы на языке X++

 

Создание свойств формы

Вот сейчас начинается самое интересно, наконец-то мы добрались до самого языка X++. Для работы нашей формы и всех ее методов нам необходимо два свойства, которые описываются в методе classDeclaration формы ADO_Form:


public class FormRun extends ObjectRun
{
    // объявляем свойства формы
    COM Conn;
    COM RecordSet;
}

Создение метда classDeclaration

В тот момент когда форма запустилась необходимо проинициализировать объявленые свойства. Это делается в метода Run формы.


public void run()
{
    // инициализируем переменные как COM-объекты
    Conn = new COM("ADODB.Connection");
    RecordSet = new COM("ADODB.RecordSet");
    super();
}

 

Создание методов формы

Теперь создадим у формы два пользовательских метода, т.е. они будут вызываться не самой формой при выполнении какого либо системного события (как напр. метод Run), а вызов будет инициализировать сам пользователь при нажатии на кнопки.

Метод NewString. Создание строки подключения.


void NewString()
{
    // инициализируем переменную как COM-объект
    COM DataLinks = new COM("DataLinks");
    // вызываем окно настройки OLEDB-соединения
    Conn.ConnectionString(StringEditConnect.text());
    DataLinks.PromptEdit(Conn);
    // результат устанавливаем в элемент формы StringEditConnect
    StringEditConnect.text(Conn.ConnectionString());
}

Данный метод будет вызываться при нажатии но кнопку ButtonNewStringConnection и открывать стандартное окно настройки строки OLEDB-соедиения, которое выглядит следующим образом:

Свойства связи с данными

Данное окно возвращает строку соединения, которое мы передаем в элемент управления StringEditConnect. Строку соединения можно задать и вручную.

Метод Connect. Выполнение соединения с базой данны и выполнения запроса.


void Connect()
{
    // объявляем локальные переменные
    int col;
    int row;
    str Name;
    COM Fields;
    COM Item;
    COMVariant Value;
    formStringControl c;

    // создаем OLEDB-соединение с источником данных, 
    // описанным в StringEditConnect
    Conn.Open(StringEditConnect.text());
    // получаем результат выполнения SQL-запроса, 
    // написанным в StringEditSQL
    RecordSet.Open(StringEditSQL.text(),Conn);

    // инициализируем шаг для обхода колонок
    row = 0;
    // перебираем все записи в результате запроса, 
    // пока не "наткнемся" на конец (eof)
    while(!RecordSet.eof())
    {
        // получаем очередное поле записи
        Fields = RecordSet.Fields();
        // перебираем все колонки в этой записи
        for (col=0; col<=(Fields.Count()-1); col++)
        {
            Item = Fields.Item(col); // получаем текущую ячейку
            Name = Item.Name(); // получаем ее имя
            Value = Item.Value(); // получаем ее значение

            // если счетчик еще в нуле, то определяем 
            // имя текущей колонки
            if (row == 0)
            {
                // в колонку (col,0) записываем значение Name
                Table.cell(col,0).data(Name);
                // определяем количество колонок
                Table.columns(col);
            }

            // записываем значение ячейки
            Table.cell(col,row+1).data(Value.bStr());
            // определяем количество строк
            Table.rows(row+1);
        }
        // получаем следующую запись в результате SQL-запроса
        RecordSet.MoveNext();
        // увеличиваем шаг обхода колонок
        row = row + 1;
    }

    // закрываем OLEDB-соединение
    Conn.Close();
}

Данный метод будет вызываться при нажатии но кнопку ButtonConnect. Метод выполняет соединение с базой данных по введенной строке соединения, затем выполняем SQL-запро, введенный в поле StringEditSQL и отображает результат его обработки в таблицу Table.

Описывать каждую строчку кода я не буду, т.к. мне кажется что все должно быть понятно, особенно с написанными комментариями.

Создание методов у кнопок

Для связи кнопок ButtonNewStringConnection и ButtonConnect с методами NewString и Connect, нужно создать у этих кнопок методы cliced, в котором будет происодить вызов необходимых методов.

Для кнопки ButtonNewStringConnection.


void clicked()
{
    // вызываем метод формы NewString
    element.NewString();
    super();
}

Для кнопки ButtonConnect.


void clicked()
{
    // вызываем метод формы Connect
    element.Connect();
    super();
}

Запуск формы

Все готово для запуска формы. Запускаем, вводим строку соединения и SQL-запрос и нажимаем кнопку "Connect".

Я ввел строку соединения к базе данных Northwind, на ходящуюся на SQL-сервере: "Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=Northwind;Data Source=MAVCOMP" и простейщий запрос по таблице Employees "SELECT * FROM Employees".

Выполнение формы

Скачать У кого не получилось все сделать самостоятельно - можно загрузить файл готового проекта этого шага здесь (4 Кб).

На этом данный шаг в изучении языка X++ я и завершу. Конечно он не охватывает всех тонкостей языка, но является показательным в том, что представляет из себя этот язык.

Автор: Андрей Михайлов aka MAV

...Шаг 10.1 | Содержание | Шаг 11...