| Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия |
| product:linq:new [30.08.2024 11:34] – [Редактирование запроса] ekaterina.menkhuzina | product:linq:new [01.11.2025 06:43] (текущий) – [Пересоздание контекста] ekaterina.menkhuzina |
|---|
| Первый шаг -- **пересоздать контекст**. | Первый шаг -- **пересоздать контекст**. |
| |
| Операция должна выполняется для обновления внутреннего словаря объектов и их свойств, для использования в запросах изменений в настройках объектной модели системы. В противном случае новые объекты, реквизиты и изменение ранее созданных не будут доступны для запросов. | Данная операция должна выполняться для обновления внутреннего словаря объектов и их свойств -- для использования в запросах изменений в настройках объектной модели системы. В противном случае новые объекты, реквизиты и изменение ранее созданных не будут доступны для запросов. |
| |
| Если контекст еще никогда не создавался, то необходимо его пересоздать обязательно, иначе во внутреннем словаре данные об объектах системы будут полностью отсутствовать. \\ | Если контекст еще никогда не создавался, то необходимо его пересоздать обязательно, иначе во внутреннем словаре данные об объектах системы будут полностью отсутствовать. \\ |
| По окончании перестроения, снимается блокировка недоступности окна, а справа вверху отображается дата и время последнего перестроения, равная текущему времени завершения операции. | По окончании перестроения, снимается блокировка недоступности окна, а справа вверху отображается дата и время последнего перестроения, равная текущему времени завершения операции. |
| |
| | В колонке «Есть ошибки» отображается для ранее не содержавших ошибки запросов индикатор процесса компиляции. |
| | \\ |
| | <image shape="thumbnail">{{ :product:linq:11.png |}}</image> |
| | \\ |
| | Запускается компиляция по одному всех запросов, с обновлением статуса «Есть ошибки». После окончания компиляции запросов в колонке «Есть ошибки» отображается значение «Да» только для запросов с ошибками, если запрос успешно компилируется, то отображается пустое значение. |
| | \\ |
| | <image shape="thumbnail">{{ :product:linq:12.png |}}</image> |
| | \\ |
| Далее вы можете создать новые запросы и/или импортировать уже существующие. | Далее вы можете создать новые запросы и/или импортировать уже существующие. |
| <image shape="thumbnail">{{ :product:linq:linq_1.png |}}</image> | <image shape="thumbnail">{{ :product:linq:linq_1.png?800 |}}</image> |
| |
| ==== Создание нового запроса ==== | ==== Создание нового запроса ==== |
| * ProjectMembers - участники приглашенные в объекты. | * ProjectMembers - участники приглашенные в объекты. |
| |
| <callout type="info" icon="true">''Начиная с версии системы 3.29'' в объект ''Projects'' добавлено новое поле, отображающее значение плановых трудозатрат (''PlannedCost'') объекта иерархии.</callout> | <callout type="info" icon="true">''Начиная с версии системы 3.29'' в объект Projects добавлено новое поле, отображающее значение плановых трудозатрат (''PlannedCost'') объекта иерархии.</callout> |
| |
| Для действий с реквизитами, в частности типа ''DateTime'' можно использовать библиотеку ''DbFunctions''. | Для действий с реквизитами, в частности типа ''DateTime'' можно использовать библиотеку ''DbFunctions''. |
| * ''QueryParameters.SpreadsheetReport.EndDate'' -- параметр равный окончанию периода в табличном отчете. | * ''QueryParameters.SpreadsheetReport.EndDate'' -- параметр равный окончанию периода в табличном отчете. |
| * ''QueryParameters.SpreadsheetReport.ProjectId'' -- параметр равный идентификатору объекта, из которого вызывается отчет. Пример его использования: <code csharp>parameters.GetValueOrDefault<Guid?>(QueryParameters.SpreadsheetReport.ProjectId, new Guid("ac04eda3-6940-46ae-8c8b-5c43c67a43a8"));</code> | * ''QueryParameters.SpreadsheetReport.ProjectId'' -- параметр равный идентификатору объекта, из которого вызывается отчет. Пример его использования: <code csharp>parameters.GetValueOrDefault<Guid?>(QueryParameters.SpreadsheetReport.ProjectId, new Guid("ac04eda3-6940-46ae-8c8b-5c43c67a43a8"));</code> |
| | |
| | Готовый пример, как вписать параметры в LINQ-запрос: |
| | <code csharp> |
| | var objectID = parameters.GetValueOrDefault<Guid>("RootProjectId", new Guid("27b97e72-5ffb-48bf-a405-bad7625eecc7")); |
| | |
| | var strParam = parameters.GetValueOrDefault<string>("request", ""); |
| | |
| | var projectID = parameters.GetValueOrDefault<Guid?>(QueryParameters.SpreadsheetReport.ProjectId, new Guid("27b97e72-5ffb-48bf-a405-bad7625eecc7")); |
| | |
| | var dStart = parameters.GetValueOrDefault<DateTime>(QueryParameters.SpreadsheetReport.StartDate, DateTime.Now.AddMonths(-1)); |
| | </code> |
| | |
| | Также можно посмотреть, какие параметры были переданы (для отладки): |
| | <code csharp> |
| | var paramsAsString = string.Join(", ", parameters.Select(kv => $"{kv.Key}:{kv.Value}")); |
| | </code> |
| =====WebAPI===== | =====WebAPI===== |
| Получение Linq-запросов может выполняться от имени любого пользователя с учетом его прав. Нужно использовать CookieContainer для сохранения cookies и уже с ним делать последующие запросы к API. | Получение Linq-запросов может выполняться от имени любого пользователя с учетом его прав. Нужно использовать CookieContainer для сохранения cookies и уже с ним делать последующие запросы к API. |
| |
| <code php> | <code php> |
| POST http://localhost/Master/api/auth/login | POST http://localhost/api/auth/login |
| |
| { | { |
| |
| <code php> | <code php> |
| POST http://localhost/Master/api/auth/login | POST http://localhost/api/auth/login |
| |
| { | { |
| </code> | </code> |
| |
| <callout type="primary">Здесь и далее ''localhost'' - адрес системы, а ''Master'' - приложение системы (может не указываться, если является единственным приложением на домене).</callout> | <callout type="primary">Здесь и далее ''localhost'' - адрес системы.</callout> |
| |
| После авторизации отправляется запрос непосредственно к Linq, используя ключ источника (''DataSourceKey'') \\ | После авторизации отправляется запрос непосредственно к Linq, используя ключ источника (''DataSourceKey'') \\ |
| |
| <code php> | <code php> |
| POST http://localhost/Master/api/queries/get | POST http://localhost/api/queries/get |
| { | { |
| DataSourceKey: "Key_of_Query", | DataSourceKey: "Key_of_Query", |
| или Id LINQ-запроса (''DataSourceId'') | или Id LINQ-запроса (''DataSourceId'') |
| <code php> | <code php> |
| POST http://localhost/Master/api/queries/get | POST http://localhost/api/queries/get |
| { | { |
| DataSourceId: "54d198c3-bbd9-4812-9143-76c632a80e44", | DataSourceId: "54d198c3-bbd9-4812-9143-76c632a80e44", |
| Обращение к данным системы с текстом LINQ-запроса (''Text'') непосредственно в вызове метода | Обращение к данным системы с текстом LINQ-запроса (''Text'') непосредственно в вызове метода |
| <code php> | <code php> |
| POST http://localhost/Master/api/queries/get | POST http://localhost/api/queries/get |
| { | { |
| Text: 'var a = (long)parameters["A"]; | Text: 'var a = (long)parameters["A"]; |