Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Следующая версия
Предыдущая версия
product:linq:about [24.08.2022 10:16] – ↷ Имя страницы product:linq:about изменено на product:linq:new anna.makhnevaproduct:linq:about [10.09.2026 15:23] (текущий) – Белугин Александр
Строка 1: Строка 1:
 +===== Зачем нужен LINQ =====
  
 +См. также: **[[product/linq/exaples|Примеры LINQ-запросов]]** \\
 +**[[https://docs.microsoft.com/ru-ru/dotnet/csharp/linq/|Официальная документация]]**
 +
 +В системе ADVANTA хранится множество данных, и чем больше система, больше настроек, больше пользователей, тем более информативные данные можно извлекать для анализа.
 +
 +Администратор Системы, зная особенности конкретной базы, может правильно построить нужный ему запрос, получив только те данные, которые ему нужны, не запрашивая доработку специализированного отчета в платформенном ПО, обходясь только настройками.
 +
 +[[product:reports|Типовые отчеты]] выбирают достаточно однородные данные. Чтобы их комбинировать, был сделан инструмент табличных отчетов -- [[product:reports:excel_table_report|отчёт "Электронная таблица"]]. Но для генерации «хитрых» отчетов приходится строить много отчетов источников, отчеты не знают ничего друг о друге и не меняют фильтры динамически, поэтому в табличных отчетах приходится строить источники с заведомо избыточными данными, которые может быть будут нужны для итогового отчета. \\ 
 +Формирование источников данных само по себе ресурсоемкая операция, а чем их для табличного отчета больше, тем хуже. Более того, полученные таким образом избыточные данные нужно формировать в итоговом листе формулами, отсекая ненужное.
 +
 +**Язык запросов LINQ решает эту задачу.** \\ 
 +**LINQ** -- (Language-Integrated Query) представляет простой язык запросов к источнику данных. Базовыми единицами данных в LINQ являются последовательности и элементы. 
 +  * Последовательность — любой объект, реализующий обобщенный интерфейс IEnumerable.
 +  * Элемент — каждая единица последовательности.
 +
 +С LINQ администратор может делать:
 +  * быстрые отчеты в системе;
 +  * гибко получать только тот набор данных, который нужен для обработки и/или для написании скриптов интеграции.
 +
 +<callout type="success" icon="true">Выборка данных выполняется в контексте пользователя, т.е. с учетом его прав.</callout>
 +===== Где найти LINQ =====
 +**Администрирование -> Дополнительные сервисы -> Источники LINQ**
 +
 +===== Особенности =====
 +Каждый созданный запрос имеет следующие свойства:
 +  * **Ключ** – это уникальное текстовое название запроса, для вызова из внешнего API и табличного отчета.
 +  * **Дата изменения** – дата последнего изменения запроса при его редактировании.
 +  * **Есть ошибки** – имеет значение «Да», в случае, если запрос не может быть скомпилирован. \\ Это удобный инструмент для обнаружения ошибок при изменении объектной модели в разделе администрирования и пересоздания контекста.
 +  * **Используется в диаграмме Ганта** – указывает на то, что данный запрос может быть использован для [[product/linq/gantt|настройки пользовательских колонок в диаграмме Ганта]].
 +
 +Каждый запрос имеет свой **UID**, видимый в окне редактирования. Данный UID может использоваться в методе API и как источник в табличных отчетах. \\
 +**Ключ** запроса является альтернативой использованию UID. 
 +
 +=== Ключ желательно оформлять по следующим правилам: ===
 +  * Используйте только латиницу
 +  * Допустимо использование цифр и символов "-", "_"
 +  * Не используйте пробелы
 +
 +
 +
 +===== Ограничения =====
 +
 +В целях безопасности, начиная с версии 3.29 (и 3.30) в сборке от марта 2026 года включены ограничения при написании кода LINQ-источника.
 +
 +
 +==== Запрещены к использованию ====
 +
 +
 +=== Пространства имён ===
 +
 +''запрет по префиксу, включая все вложенные''
 +
 +  * System.Diagnostics
 +  * System.IO
 +  * System.Net (за исключением разрешенного типа c полным названием ''System.Net.WebUtility'')
 +  * System.Net.Http
 +  * System.Net.Sockets
 +  * System.Reflection.Emit
 +  * Microsoft.Win32
 +  * System.Runtime.InteropServices
 +
 +=== Типы ===
 +
 +Process, ProcessStartInfo, File, Directory, FileStream, FileInfo, DirectoryInfo, StreamWriter, StreamReader, BinaryWriter, BinaryReader, Path, HttpClient, WebClient, HttpWebRequest, Socket, TcpClient, UdpClient, NetworkStream, WebRequest, FtpWebRequest, Registry, RegistryKey, Activator, Marshal, DynamicMethod, AssemblyBuilder, Environment.
 +
 +=== Методы ===
 +
 +''по имени, на любом типе''
 +
 + Invoke, InvokeMember, CreateInstance, LoadFrom, LoadFile, Load (например, методы XDocument.Load / XmlDocument.Load / Assembly.Load будут недоступны по имени метода, хотя их типы не указаны в блок-листе).
 +
 +
 +=== Строки вызова консоли ===
 +
 +cmd.exe, powershell, /bin/bash, /bin/sh