| Правильная ссылка на эту статью: |
Написание плагинов для WebMoney Business Tools
- Добавляем форму в главное меню и в меню кошелька
- Добавляем новую вкладку на главной форме
- Используем сервисы
Проще всего объяснить работу плагинной системы на примерах. Для запуска примеров вам потребуется IDE Visual Studio. Код примеров написан на языке C#, однако для разработки плагинов вы можете использовать другие языки с поддержкой .Net (контракты CLS-совместимы).
Добавляем форму в главное меню и в меню кошелька¶
1 Создайте новый проект типа ClassLibrary в VisualStudio.
2 Подключите библиотеки контрактов (1) WebMoney.Services.Contracts.dll и (2) WMBusinessTools.Extensions.Contracts.dll. Библиотеки можно взять в архиве с бинарниками
3 Добавьте в проект пустую форму WinForms. Добавьте на нее компонент RichTextBox с именем richTextBox1 и вставьте этот код:
using System.Windows.Forms;
namespace SimpleFormExtension
{
public partial class Form1 : Form
{
public Form1(string info)
{
InitializeComponent();
richTextBox1.Text = info;
}
private void button1_Click(object sender, System.EventArgs e)
{
Close();
}
}
}
Вместо Form1, подставьте название вашей формы. Метод button1_Click не обязателен, он просто закрывает форму по клику на кнопке.
4 Добавьте в проект новый класс и вставьте этот код:
using System.Windows.Forms;
using WMBusinessTools.Extensions.Contracts;
using WMBusinessTools.Extensions.Contracts.Contexts;
namespace SimpleFormExtension
{
public class SimpleFormProvider : ITopFormProvider, IPurseFormProvider
{
public bool CheckCompatibility(SessionContext context)
{
return true;
}
public Form GetForm(SessionContext context)
{
return new Form1("Текущий WMID: " + context.Session.CurrentIdentifier.ToString("00000000000000"));
}
public bool CheckCompatibility(PurseContext context)
{
if (context.Account.Amount > 0)
return true;
return false;
}
public Form GetForm(PurseContext context)
{
return new Form1("Выбран кошелек: " + context.Account.Number);
}
}
}
5 Добавьте в проект файл Extensions.json, установите в свойствах файла "Copy to Output Directory" и вставьте в него код:
{
"extensions": [
{
"id": "SimpleFormExtension",
"name": "Тестовый плагин",
"assemblyFullName": "SimpleFormExtension, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null",
"type": "SimpleFormExtension.SimpleFormProvider",
"iconPath": "Images/turn-on_16x16.gif",
"tags": [
{
"tagName": "TopExtension",
"groupOrder": 6,
"order": 1
},
{
"tagName": "PurseExtension",
"groupOrder": 8,
"order": 1
}
]
}
]
}
Вместо SimpleFormExtension запишите название вашей библиотеки. Если иконка для плагина вам не нужна, то удалите строку iconPath.
Список tags указывает системе в каком месте отображать плагин. Полный список тегов смотрите в справочнике.
6 Теперь создайте в папке с программой WebMoney Business Tools отдельную папку для вашего плагина (название может быть любым) и скопируйте туда файлы:
- SimpleFormExtension.dll
- Extensions.json
- Папку Images с файлом turn-on_16x16.gif.
После запуска программы в главном меню и в меню кошелька отобразится пункт для запуска нашего плагина:

Полный код этого примера смотрите по ссылке: https://github.com/MarketKernel/webmoney-business-tools/tree/master/Samples/Form
Добавляем новую вкладку на главной форме¶
Пример аналогичен предыдущему, с той лишь разницей, что вместо формы вам нужно вернуть Control:
using System.Windows.Forms;
using WMBusinessTools.Extensions.Contracts;
using WMBusinessTools.Extensions.Contracts.Contexts;
namespace SimpleTabExtension
{
public class ScreenProvider : ITopScreenProvider
{
public bool CheckCompatibility(ScreenContainerContext context)
{
return true;
}
public Control GetScreen(ScreenContainerContext context)
{
return new UserControl1(context.Session);
}
}
}
Полный код примера: https://github.com/MarketKernel/webmoney-business-tools/tree/master/Samples/Tab
Используем сервисы¶
Использование сервисов не обязательно, вы можете реализовать все самостоятельно.
Доступ к настройкам, в том числе к настройкам безопасности, можно получить без подключения сервисов (см. пример подписи строки и получения строки подключения к базе данных ).
Если же вы хотите использовать готовую реализацию сервисов, то необходимо проделать такие шаги:
1 Последуйте инструкциям первого примера.
2 Подключите к вашему проекту NuGet-пакет Unity версии 2.0.
3 Создайте FormProvider1 и вставьте этот код:
using System.Linq;
using System.Windows.Forms;
using Microsoft.Practices.Unity;
using WebMoney.Services.Contracts;
using WMBusinessTools.Extensions.Contracts;
using WMBusinessTools.Extensions.Contracts.Contexts;
namespace ServicesFormExtension
{
public class FormProvider1 : ITopFormProvider
{
public bool CheckCompatibility(SessionContext context)
{
return true;
}
public Form GetForm(SessionContext context)
{
var purseService = context.UnityContainer.Resolve<IPurseService>();
// Получаем список кошельков из базы данных
var accounts = purseService.SelectAccounts();
var sum = accounts.Sum(a => a.Amount);
return new Form1("Сумма на всех кошельках: " + sum);
}
}
}
В этом примере мы получаем список всех кошельков и общую сумму на них (без учета валюты).
Смотрите полный список сервисов, которые вы можете вызывать таким образом.
Полный код примера: https://github.com/MarketKernel/webmoney-business-tools/tree/master/Samples/Services