Перейти к содержанию

Генерация QR-кода по кнопке

В процессе настройки решения может понадобиться генерация QR-кода по нажатию кнопки (например, для формирования внутреннего кода для сотрудников). В данной статье мы рассмотрим пошаговую настройку генерации QR-кода по кнопке на форме.

1. В шаблоне записи, где вы планируете генерировать QR-код, создайте новый атрибут с типом данных «Текст» (QRinbase). Формат отображения не важен.

2. В том же шаблоне записи создайте ещё один атрибут с типом данных «Текст» (QRcode) и форматом отображения «HTML текст». Отметьте флаг «Вычисляемый» и во вкладке «Выражение» вставьте следующее:

FORMAT("<img align='center' src='data:image/png;base64,{0}'</img>",LIST($QRinbase64))

Нам необходимо именно два атрибута, так как в первом будет храниться созданный QR-код в формате base64, а во втором — в формате изображения.

3. В том же шаблоне записи создайте новую операцию (Сформировать QR-код) со следующими параметрами:

  • Тип операции — C# скрипт;
  • Контекст выполнения — Запись;
  • Результат выполнения — Обновить данные.

Во вкладке «Скрипт» вставьте следующее:

using System;

using System.Collections.Generic;

using System.Linq;

using Comindware.Data.Entity;

using Comindware.TeamNetwork.Api.Data.UserCommands;

using Comindware.TeamNetwork.Api.Data;

using RestSharp;

 

class Script

{

    public static UserCommandResult Main(UserCommandContext userCommandContext, Comindware.Entities entities)

    {

        ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

        byte[] AsBytes = new System.Net.WebClient().DownloadData

            ("https://api.qrserver.com/v1/create-qr-code/?size=200x200&data=link" + userCommandContext.ObjectIds[0]);

      string AsBase64String = Convert.ToBase64String(AsBytes);

       

        var data = new Dictionary<string, object>

        {

            { "QRinbase64", AsBase64String }

        };

        Api.TeamNetwork.ObjectService.EditWithAlias("RecordTemplate", userCommandContext.ObjectIds[0], data);

       

    var result = new UserCommandResult

    {

      Success = true,

      Commited = true,

      Messages = new[]

      {

        new UserCommandMessage

        {

          Severity = SeverityLevel.Normal,

          Text = "QR-код сформирован"

        }

      }

    };

    return result;

    }

}

где:

link — URL, на который пользователь должен попадать после сканирования QR-кода;

QRinbase64 — системное имя атрибута, созданного в п.1, куда записывается QR-код в формате base64;

RecordTemplate — системное имя шаблона записи, где находится операция;

QR-код сформирован — текст сообщения для пользователя при успешном выполнении операции.

4. В том же шаблоне записи вынесите атрибут, созданный в п.2, на нужную форму(ы). 

5. Вынесите операцию, созданную в п.3, в нужное место: на форму(ы) или на панель инструментов для формы.

6. Протестируйте.