QR-код. Формирование с помощью C#-скрипта по нажатию кнопки
Здесь приведён пример настройки кнопки, которая формирует QR-код для текущей записи с помощью C#-скрипта.
Такую кнопку можно использовать, например, чтобы создать внутренний код сотрудника, пропуск, ссылку на карточку записи или другой QR-код, который должен генерироваться по запросу пользователя.
Логика решения
Для отображения QR-кода используются два текстовых атрибута:
QRinbase— хранит QR-код в формате Base64;QRcode— отображает QR-код как изображение на форме.
Кнопка вызывает C#-скрипт, который:
- Формирует ссылку на текущую запись.
- Передаёт ссылку во внешний сервис генерации QR-кодов.
- Получает изображение QR-кода.
- Преобразует изображение в строку Base64.
- Записывает строку Base64 в атрибут
QRinbase.
Атрибут QRcode по формуле преобразует строку Base64 в HTML-изображение.
Настройка атрибутов
- В шаблоне записи, где требуется формировать QR-код, создайте атрибут типа «Текст» с системным именем
QRinbase. - Создайте ещё один атрибут типа «Текст» с системным именем
QRcode. - Для атрибута
QRcodeзадайте формат отображения «HTML-текст». - Установите для атрибута
QRcodeфлажок «Вычислять автоматически». - Введите для атрибута
QRcodeследующую формулу:
FORMAT(
"<img align='center' src='data:image/png;base64,{0}' width='60' height='60' />",
LIST($QRinbase)
)
```cs
**Здесь**
| Значение | Описание |
| -------- | -------- |
| `width='60'` | Ширина QR-кода на форме. |
| `height='60'` | Высота QR-кода на форме. |
| `QRinbase` | Системное имя атрибута, который хранит QR-код в формате Base64. |
## Настройка кнопки {: #qr-code-csharp-button_button }
1. В том же шаблоне записи создайте кнопку _«Сформировать QR-код»_.
2. Настройте кнопку:
| Свойство | Значение |
| -------- | -------- |
| Тип кнопки | **C#-скрипт** |
| Контекст кнопки | **Запись** |
| Результат выполнения | **Обновить данные** |
3. На вкладке «**Скрипт**» введите следующий C#-скрипт:
``` csharp
using System;
using System.Collections.Generic;
using System.Net;
using Comindware.TeamNetwork.Api.Data;
using Comindware.TeamNetwork.Api.Data.UserCommands;
class Script
{
public static UserCommandResult Main(UserCommandContext userCommandContext)
{
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
var objectId = userCommandContext.ObjectIds[0];
var recordUrl = "https://yourinstance.comindware.net/#form/oa.1/form.2/" + objectId;
var encodedUrl = Uri.EscapeDataString(recordUrl);
var qrCodeBytes = new WebClient().DownloadData(
"https://qrcode.tec-it.com/API/QRCode?size=small&data=" + encodedUrl);
var qrCodeBase64 = Convert.ToBase64String(qrCodeBytes);
var data = new Dictionary<string, object>
{
{ "QRinbase", qrCodeBase64 }
};
Api.TeamNetwork.ObjectService.EditWithAlias("RecordTemplate", objectId, data);
return new UserCommandResult
{
Success = true,
Commited = true,
Messages = new[]
{
new UserCommandMessage
{
Severity = SeverityLevel.Normal,
Text = "QR-код сформирован"
}
}
};
}
}
Здесь:
| Значение | Описание |
|---|---|
https://yourinstance.comindware.net/#form/oa.1/form.2/ |
Ссылка на форму записи, которая должна открываться после сканирования QR-кода. |
QRinbase |
Системное имя атрибута, в который записывается QR-код в формате Base64. |
RecordTemplate |
Системное имя текущего шаблона записи. |
QR-код сформирован |
Текст сообщения, которое отобразится пользователю после успешного выполнения кнопки. |
Проверка результата
- Вынесите атрибут
QRcodeна форму записи. - Вынесите кнопку «Сформировать QR-код» на форму или в область кнопок.
- Откройте запись.
- Нажмите кнопку «Сформировать QR-код».
- Убедитесь, что на форме отобразился QR-код.
- Отсканируйте QR-код и проверьте, что он открывает нужную форму записи.
Внимание!
В примере используется внешний сервис генерации QR-кодов. Перед применением решения в промышленной среде убедитесь, что использование внешнего сервиса соответствует требованиям безопасности вашей организации.