Руководство по использованию Elisy .Net Bridge для версии 3

by Elisy 26. February 2011 06:03

В связи с планируемым выходом Elisy .Net Bridge 4 публикуем наиболее полное на данный момент руководство по использованию .Net Bridge для предыдущей (третьей) версии.

Elisy Software Design 1С Совместимо
Руководство по использованию внешнего компонента Elisy .Net Bridge

Elisy .Net Bridge- это внешний компонент для бесшовного подключения .Net framework к 1С:Предприятие с целью использования всех передовых разработок .Net framework. Упор в проекте сделан на гармоничную интеграцию двух технологий, где ведущую роль играет 1С:Предприятие. Поддерживается 1С:Предприятие 8.1 (ограниченная поддержка 7.7/8.0/8.2).

Системные требования

  • Операционная система (Архитектура x86): Windows 7/Vista/XP/2008 R2/2008/2003
  • Версия .Net-платформы: .Net framework 3.5 SP1
  • Версия 1С: 1С:Предприятие 8.1 (ограниченная поддержка 1С:Предприятие 7.7/8.0/8.2)

Основные возможности

Библиотекой проекта является Elisy.NetBridge.dll. Она предоставляет следующие преимущества:

  • Поддерживает создание объектов .Net из GAC и по полному пути к сборке;
  • Поддерживает обращение к свойствам и методам объектов .Net;
  • Не требует атрибута ComVisible=true, назначенного классам .Net;
  • Поддерживает типы Enum и производные;
  • Обеспечивает развернутую информацию об ошибках;
  • Свойства объектов .Net видны при отладке из конфигуратора 1C;
  • Не требует предварительной регистрации через REGSVR32 и REGASM: можно обращаться через функцию 1C ЗагрузитьВнешнююКомпоненту;
  • Содержит логику для обращения к специфическим возможностям .Net framework: вызов статических методов, обращение к статическим свойствам, обращение к индексным свойствам;

Ниже сравнивается код C# и соответствующий ему код скрипта 1С с использованием Elisy .Net Bridge:

Код C#Код 1С:Предприятие
private SeriesCollection getVolumeData()
{
    SeriesCollection SC = new SeriesCollection();
    Random myR = new Random(1);
    for(int i = 0; i < 1; i++)
    {
        Series s = new Series();
        s.Name = "Volume";
        double startPrice = 50;

        DateTime startDT = new DateTime(2000,1,1);
        for(int b = 0; b < 75; b++)
        {
            Element e = new Element();
            e.XDateTime = startDT;
            startDT = startDT.AddDays(1);
            e.YValue = myR.Next(100);
            s.Elements.Add(e);
        }

        SC.Add(s);
    }

    return(SC);
}
Function getVolumeData()

    SC = net.New("dotnetCHARTING.WinForms.SeriesCollection");
    myR = net.New("System.Random", 1);
    for a = 0 to 0 do

        s = net.New("dotnetCHARTING.WinForms.Series");
        s.Name = "Volume";
        startPrice = 50;

        startDT = net.New("System.DateTime", 2000, 1, 1);
        for b = 0 to 74 do

            e = net.New("dotnetCHARTING.WinForms.Element");
            e.XDateTime = startDT;
            startDT = startDT + 1*60*60*24;
            e.YValue = myR.Next(100);
            s.Elements.Add(e);
        enddo;

        SC.Add(s);
    enddo;

    return SC;
EndFunction

Взаимодействие с 1С:Предприятие

Внешний компонент Elisy .Net Brdige написан в соответствие с "Технологией создания внешних компонент". Реализует интерфейсы: IInitDone, ILanguageExtender. Инициализация компонента из 1С происходит стандартным образом:

ПодключитьВнешнююКомпоненту("AddIn.ElisyNetBridge");
AddIn = Новый("AddIn.ElisyNetBridge");

или

ЗагрузитьВнешнююКомпоненту("C:\Program Files\Elisy .Net Bridge\Elisy.NetBridge.dll");
AddIn = Новый("AddIn.ElisyNetBridge");

ВК реализует свои методы New/Новый – создать объект .Net из GAC, NewFrom/НовыйИз – создать объект .Net из файла, Activate/Активировать – ввести информацию о лицензии. А также 1 свойство Активирован/IsActivated – выдающее информацию об активации. Например, можно создать .Net-объект следующим образом:

message = AddIn.New("System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089", "System.Net.Mail.MailMessage");

New и NewFrom возвращают собственный IDispatch класс-обертку для передачи внутрь 1С объектов .Net framework, делая открытыми для программ 1С все свойства и методы объекта .Net. Все развернутые сообщения об ошибках выдаются через IErrorLog-интерфейс в 1С.

Для возможности вызова статических методов и обращения к статическим свойствам .Net framework в состав ВК входит класс Elisy.NetBridge, написанный на .Net framework. Обращение к нему возможно общим образом:

net = AddIn.New("Elisy.NetBridge", "Elisy.ElisyNetBridge");

Класс Elisy.NetBridge реализует методы CallStatic, GetStatic, SetStatic. Например, становится возможным следующий вызов:

image = net.CallStatic("System.Drawing.Image", "FromFile", "d:\SampleImage.jpg");

Примеры использования

Работа с регулярными выражениями, например, для получения из текста URL и E-mail'ов. Следующий пример проверяет корректность e-mail адресов:

//Подключение внешнего компонента
ЗагрузитьВнешнююКомпоненту("C:\Program Files\Elisy .Net Bridge SDK\Elisy.NetBridge.dll");
AddIn = Новый("AddIn.ElisyNetBridge");
net = AddIn.New("Elisy.NetBridge", "Elisy.ElisyNetBridge");

//Создать массив строк для проверки
address = Новый Массив();
address.Add("jay@southridgevideo.com");
address.Add("barry@adatum.com");
address.Add("treyresearch.net");
address.Add("karen@proseware.com");

//Создать шаблон регулярного выражения
emailregex = net.New("System.Text.RegularExpressions.Regex", "(?<user>[^@]+)@(?<host>.+)");

For i=0 To address.Count()-1 Do
    //Проверить на соответствие шаблону
    m = emailregex.Match(address[i]);
    Сообщить(address[i]);
    If m.Success Then
        //В случае успеха
        Сообщить(" User=" + m.Groups.get_Item("user").Value);
        Сообщить(" Host=" + m.Groups.get_Item("host").Value);
    Else
        Сообщить(" (invalid email address)");
    EndIf
EndDo;

Работа с графикой: рисование произвольных изображений из 1С, накладывание водяных знаков на фото номенклатуры, изменение формата и разрешения фото номенклатуры. Следующий пример рисует простой рисунок из 1С и сохраняет его на диск:

ЗагрузитьВнешнююКомпоненту("C:\Program Files\Elisy .Net Bridge SDK\Elisy.NetBridge.dll");
AddIn = Новый("AddIn.ElisyNetBridge");
net = AddIn.New("Elisy.NetBridge", "Elisy.ElisyNetBridge");

//Код показывает, как нарисовать простое изображение и записать его в файл
drawing = net.LoadAssembly("System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a");
buffer = net.New("System.Drawing.Bitmap", 350, 350);
bufferSurface = net.CallStatic("System.Drawing.Graphics", "FromImage", buffer);
//Желтой кистью
yellowBrush = net.New("System.Drawing.SolidBrush", net.New("System.Drawing.Color").Yellow);
//Нарисовать круг
bufferSurface.FillEllipse(yellowBrush, 25, 25, 187, 187);

//Черной кистью
blackBrush = net.New("System.Drawing.SolidBrush", net.New("System.Drawing.Color").Black);
//Нарисовать эллипсы
bufferSurface.FillEllipse(blackBrush, 70, 75, 22, 17);
bufferSurface.FillEllipse(blackBrush, 140, 75, 22, 17);

//Черным карандашом
blackPen = net.New("System.Drawing.Pen", net.New("System.Drawing.Color").Black, 10);
//Нарисовать дугу
bufferSurface.DrawArc(blackPen, 65, 95, 102, 75, 0, 180);
//Записать в формате Jpg
buffer.Save("c:\Smile.jpg");

Организация простейшего Http-сервера напрямую из 1С. Следующий пример кода 1С прослушивает порт 8080 и формирует html в ответ на запрос:

ЗагрузитьВнешнююКомпоненту("C:\Program Files\Elisy .Net Bridge SDK\Elisy.NetBridge.dll");
AddIn = Новый("AddIn.ElisyNetBridge");
net = AddIn.New("Elisy.NetBridge", "Elisy.ElisyNetBridge");

Если НЕ net.GetStatic("System.Net.HttpListener","IsSupported") Тогда
    Сообщить("Для использования класса HttpListener нужна ОС Windows XP SP2 или Server 2003.");
    Возврат;
КонецЕсли;

listener = net.New("System.Net.HttpListener");
listener.Prefixes.Add("http://*:8080/");
listener.Start();

Сообщить("Прослушивание...");
//Метод GetContext блокирует выполнение программы пока ждет запрос.
context = listener.GetContext();
request = context.Request;
// Получить объект ответа
response = context.Response;
// Создать ответ - HTML-строку
responseString = "1C:Enterprise";
buffer = net.GetStatic("System.Text.Encoding", "UTF8").GetBytes(responseString);
// Получить поток ответа и записать ответ в него.
response.ContentLength64 = buffer.Length;
output = response.OutputStream;
output.Write(buffer,0,buffer.Length);
// Необходимо закрыть выходной поток.
output.Close();
listener.Stop();

Шифрование информации симметричными и ассиметричными методами и электронная подпись. Компонент позволяет из кода 1С выполнять шифрование строк и файлов следующим образом:

//Код для инициализации компонента Elisy .Net Bridge
ЗагрузитьВнешнююКомпоненту("C:\Program Files\Elisy .Net Bridge SDK\Elisy.NetBridge.dll");
ВК = Новый("AddIn.ElisyNetBridge");

ВК.Активировать("76F93484A6ACDAF144",
"00:1A:4D:5C:3E:BC",
"DyAmVOPyNFTaddNK0jA9muTk2fz2V5+wrnZvZhF8Ws/pE52Loqt9u5QMNhrlVuoQJdENKCRgs8+RmWTI4oVYwUdc8b+kyeuRUNWFaxXuoIPSSDWZAi675CgVpIl5uLbcyB7QKD+9cF6CXcBfD8QD9KqzOF/LC+O1oFmB3Roo8Pk=");

net = ВК.New("Elisy.NetBridge", "Elisy.ElisyNetBridge");

//Создание объекта, ослуживающего RSA-алгоритм
rsa = net.New("System.Security.Cryptography.RSACryptoServiceProvider");

//Получаем ключи. Генерируются автоматически при создании объекта RSACryptoServiceProvider и могут быть использованы многократно.
открытыйКлюч = rsa.ToXmlString(Ложь);
Сообщить("Открытый ключ: " + открытыйКлюч);
секретныйКлюч = rsa.ToXmlString(Истина);
Сообщить("Секретный ключ: " + секретныйКлюч);

//Преобразовать данные для шифрования в массив byte
исходнаяСтрока = "Какие-то данные для шифрования.";
Сообщить("Строка для шифрования: " + исходнаяСтрока);
данныеДляШифрования = net.GetStatic("System.Text.Encoding", "UTF8").GetBytes(исходнаяСтрока);

////////////////
// Шифрование //
////////////////

//Применить открытый ключ
rsa.FromXmlString(открытыйКлюч);

//Получить зашифрованный массив байт.
зашифрованоМассив = rsa.Encrypt(данныеДляШифрования, false);
зашифрованоСтрока = net.CallStatic("System.Convert", "ToBase64String", зашифрованоМассив);
Сообщить("Зашифрованные данные: " + зашифрованоСтрока);

/////////////////
// Расшифровка //
/////////////////

//Применить секретный ключ
rsa.FromXmlString(секретныйКлюч);

//Расшифровать
расшифрованныеДанные = rsa.Decrypt(зашифрованоМассив, false);
расшифрованнаяСтрока = net.GetStatic("System.Text.Encoding", "UTF8").GetString(расшифрованныеДанные);
Сообщить("Расшифрованная строка: " + расшифрованнаяСтрока);

/////////////////////////////////
// Вычисление цифровой подписи //
/////////////////////////////////

//Применить секретный ключ
rsa.FromXmlString(секретныйКлюч);

//Вычислить подпись
цифроваяПодпись = rsa.SignData(данныеДляШифрования, net.New("System.Security.Cryptography.SHA1CryptoServiceProvider"));
цифроваяПодписьСтрока = net.CallStatic("System.Convert", "ToBase64String", цифроваяПодпись);
Сообщить("Цифровая подпись: " + цифроваяПодписьСтрока);

///////////////////////////////
// Проверка цифровой подписи //
///////////////////////////////

//Применить секретный ключ
rsa.FromXmlString(открытыйКлюч);

//Проверить цифровую подпись
Если rsa.VerifyData(данныеДляШифрования, net.New("System.Security.Cryptography.SHA1CryptoServiceProvider"), цифроваяПодпись) Тогда
    Сообщить("Цифровая подпись валидная");
Иначе
    Сообщить("Цифровая подпись невалидная");
КонецЕсли

Описание свойств и методов Elisy .Net Bridge

Внешний компонент Elisy .Net Bridge

Внешний компонент Elisy .Net Bridge реализует следующие методы и свойства.

Подключить его к 1С:Предприятие вы можете следующим образом:

ПодключитьВнешнююКомпоненту("AddIn.ElisyNetBridge");
AddIn = Новый("AddIn.ElisyNetBridge");

или

ЗагрузитьВнешнююКомпоненту("C:\Program Files\Elisy .Net Bridge\Elisy.NetBridge.dll");
AddIn = Новый("AddIn.ElisyNetBridge");

  • New/Новый
    Синтаксис:
    New(ИмяСборки, ИмяКласса)
    Параметры:
    ИмяСборки (Строка) - Полное имя .Net-сборки, по которому ее можно идентифицировать в GAC;
    ИмяКласса (Строка) - Полное имя класса в сборке с учетом пространства имен;
    Возвращает:
    COM-объект - обертка над .Net-объектом, транслирующая все свойства и методы .Net-объекта
    Описание:
    Метод создает .Net-объект и обертку (COM-объект), позволяющую обращаться к исходному .Net-объекту. При вызове необходимо указать полное имя сборки. Исключение составляет только сборка Elisy.NetBridge, которую достаточно указать как "Elisy.NetBridge". Не позволяет передавать параметры в конструктор класса. Для вызова конструктора класса с параметрами необходимо использовать метод New класса Elisy.ElisyNetBridge.
    Пример:
    net = AddIn.New("Elisy.NetBridge", "Elisy.ElisyNetBridge");
  • NewFrom/НовыйИз
    Синтаксис:
    NewFrom(ПутьКСборке, ИмяКласса)
    Параметры:
    ПутьКСборке (Строка) - Полный путь к файлу dll .Net-сборки;
    ИмяКласса (Строка) - Полное имя класса в сборке с учетом пространства имен;
    Возвращает:
    COM-объект - обертка над .Net-объектом, транслирующая все свойства и методы .Net-объекта
    Описание: метод создает .Net-объект и обертку (COM-объект), позволяющую обращаться к исходному .Net-объекту.
  • Activate/Активировать
    Синтаксис:
    Activate(СерийныйНомер, MACАдрес, КлючАктивации)
    Параметры:
    СерийныйНомер (Строка) - серийный номер, который выдается продукту при продаже;
    MACАдрес (Строка) - Уникальный MAC-адрес сетевой платы компьютера;
    КлючАктивации (Строка) - подпись, подтвержающая правомерность использования компонента;
    Возвращает:
    Булево - значение, показывающее успешно ли прошла активация
    Описание:
    Позволяет активировать компонент по уникальнмому адресу MAC сетевой платы компьютера.
    Пример:
    AddIn.Активировать("XXXXXXXXXXXXXXXXXX",
    "00:1A:4D:5C:3E:BC",
    "DyAmVOPyNFTaddNK0jA9m");
  • ActivateByCompany/АктивироватьПоОрганизации
    Синтаксис:
    ActivateByCompany(СерийныйНомер, НазваниеОрганизации, КлючАктивации)
    Параметры:
    СерийныйНомер (Строка) - серийный номер, который выдается продукту при продаже;
    НазваниеОрганизации (Строка) - Название организации в справочнике "Организации";
    КлючАктивации (Строка) - подпись, подтвержающая правомерность использования компонента;
    Возвращает:
    Булево - значение, показывающее успешно ли прошла активация
    Описание:
    Позволяет активировать компонент для всей организации.
    Пример:
    AddIn.ActivateByCompany("XXXXXXXXXXXXXXXXXX", "ООО ""Корпорация""",
    "Zx5Ts0nYDuB9yXLtIjd");
  • ActivateByVendor/АктивироватьПоПоставщику
    Синтаксис:
    ActivateByVendor(СерийныйНомер, НазваниеПоставщика, КлючАктивации)
    Параметры:
    СерийныйНомер (Строка) - серийный номер, который выдается продукту при продаже;
    НазваниеПоставщика (Строка) - название поставщика, указанное в конфигурации;
    КлючАктивации (Строка) - подпись, подтвержающая правомерность использования компонента;
    Возвращает:
    Булево - значение, показывающее успешно ли прошла активация
    Описание:
    Позволяет активировать компонент для всех конфигураций поставщика.
    Пример:
    AddIn.ActivateByVendor("XXXXXXXXXXXXXXXXXX", "Elisy Software Design",
    "Zx5Ts0nYDuB9yXLtIjdinE");
  • IsActivated/Активирован
    Описание:
    Свойство показывает, активирован ли компонент Elisy .Net Bridge. Возвращает Истина, если активирован.

Класс Elisy.ElisyNetBridge

Вспомогательный .Net-класс, позволяющий использовать специфические возможности .Net Framework, такие как: вызов статических методов, получение значений статических свойств и др.

Следующий код позволяет создать объект типа Elisy.ElisyNetBridge для последующего обращения к нему:

ПодключитьВнешнююКомпоненту("AddIn.ElisyNetBridge");
ВК = Новый("AddIn.ElisyNetBridge");
net = ВК.New("Elisy.NetBridge", "Elisy.ElisyNetBridge");

или

ЗагрузитьВнешнююКомпоненту("C:\Program Files\Elisy .Net Bridge\Elisy.NetBridge.dll");
ВК = Новый("AddIn.ElisyNetBridge");
net = ВК.New("Elisy.NetBridge", "Elisy.ElisyNetBridge");

  • New
    Синтаксис:
    New(ИмяТипа, параметр1, параметр2, ..., параметрN)
    Параметры:
    ИмяТипа (строка) - полное имя типа;
    параметр1, параметр2, ..., параметрN (произвольный тип) - параметры, которые передаются в конструктор;
    Возвращает:
    Объект типа ИмяТипа
    Описание:
    Метод создает .Net-объект, передавая в его конструктор произвольные параметры и возвращает COM-объект-обертку, которую можно дальше использовать в 1C:Предприятие. Сборка, к которой принадлежит тип должна быть предварительно загружена (например, вызовом LoadAssembly).
    Пример:
    hwnd = net.New("System.IntPtr", 131724);
    color = net.New("System.Drawing.Color").Yellow;
    specialFolder = net.New("System.Environment+SpecialFolder").DesktopDirectory;
    client = net.New("System.Web.Services.Protocols.SoapHttpClientProtocol");
  • GetStatic
    Синтаксис:
    GetStatic(ИмяТипа, ИмяСвойства)
    Параметры:
    ИмяТипа (Строка) - полное имя типа;
    ИмяСвойства (Строка) - имя статического свойства;
    Возвращает:
    Произвольный тип - значение статического свойства.
    Описание:
    Метод позволяет обратиться к статическому свойству произвольного типа и вернуть его значение.
    Пример:
    zeroPtr = net.GetStatic("System.IntPtr", "Zero");
  • SetStatic
    Синтаксис:
    SetStatic(ИмяТипа, ИмяСвойства, Значение)
    Параметры:
    ИмяТипа (Строка) - полное имя типа;
    ИмяСвойства (Строка) - имя статического свойства;
    Значение (Произвольный тип) - новое значение свойства;
    Описание:
    Метод позволяет установить значение статического свойства.
  • CallStatic
    Синтаксис:
    CallStatic(ИмяТипа, ИмяМетода, параметр1, параметр2, ..., параметрN)
    Параметры:
    ИмяТипа (Строка) - полное имя типа;
    ИмяМетода (Строка) - имя статического метода;
    параметр1, параметр2, ..., параметрN (Произвольные типы) - параметры, передаваемые в метод;
    Возвращает:
    Произвольное значение - результат обращения к методу.
    Описание:
    Метод позволяет обратиться к статическому методу, передавая в него произвольные параметры.
    Пример:
    tempVar = net.CallStatic("System.Environment", "GetEnvironmentVariable", "TEMP");
  • LoadAssembly
    Синтаксис:
    LoadAssembly(ИмяСборки)
    Параметры:
    ИмяСборки (Строка) - полное имя сборки для поиска в GAC.
    Возвращает:
    System.Reflection.Assembly - загруженная сборка
    Описание:
    Метод позволяет загрузить сборку из GAC для последующего использования его типов.
    Пример:
    net.LoadAssembly("System.Xml, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089");
    net.LoadAssembly("PresentationFramework, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35");
    net.LoadAssembly("PresentationCore, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35");
  • LoadAssemblyFrom
    Синтаксис:
    LoadAssemblyFrom(ПутьКСборке)
    Параметры:
    ПутьКСборке (Строка) - полный путь к сборке;
    Возвращает:
    System.Reflection.Assembly - загруженная сборка
    Описание:
    Метод позволяет загрузить сборку из файла dll для последующего использования его типов.
  • Version
    Описание:
    Свойство возвращает версию (System.Version) текущей сборки Elisy.NetBridge.

Класс Elisy.NetBridge.Environment

  • Version
    Описание:
    Статическое свойство возвращает версию (System.Version) 1С:Предприятие.
  • Connection
    Описание:
    Статическое свойство возвращает значение параметра pConnection, передаваемое в метод Init внешнего компонента. Пример:
    connection = net.GetStatic("Elisy.NetBridge.Environment", "Connection");
  • GetAppDispatch
    Описание:
    Статическое свойство возвращает COM-объект на глобальный контекст 1C:Предприятие.
Copyright © 2009-2010 Elisy Software Design

Tags: , , ,

1C.Net | C# | Windows

Comments are closed

Richmedia.us

Добро пожаловать на сайт Richmedia.us

1 2 3 4 5 6 7 8

RecentComments

Comment RSS