Написание плагинов для 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 отдельную папку для вашего плагина (название может быть любым) и скопируйте туда файлы:

  1. SimpleFormExtension.dll
  2. Extensions.json
  3. Папку 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