Различия

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

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

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
product:linq:new [29.03.2024 07:03] – [Пример вызова LINQ-запроса в Python] Белугин Александрproduct:linq:new [01.11.2025 06:43] (текущий) – [Пересоздание контекста] ekaterina.menkhuzina
Строка 3: Строка 3:
 Первый шаг -- **пересоздать контекст**. Первый шаг -- **пересоздать контекст**.
  
-Операция должна выполняется для обновления внутреннего словаря объектов и их свойствдля использования в запросах изменений в настройках объектной модели системы. В противном случае новые объекты, реквизиты и изменение ранее созданных не будут доступны для запросов. +Данная операция должна выполняться для обновления внутреннего словаря объектов и их свойств -- для использования в запросах изменений в настройках объектной модели системы. В противном случае новые объекты, реквизиты и изменение ранее созданных не будут доступны для запросов. 
  
 Если контекст еще никогда не создавался, то необходимо его пересоздать обязательно, иначе во внутреннем словаре данные об объектах системы будут полностью отсутствовать. \\  Если контекст еще никогда не создавался, то необходимо его пересоздать обязательно, иначе во внутреннем словаре данные об объектах системы будут полностью отсутствовать. \\ 
Строка 9: Строка 9:
 По окончании перестроения, снимается блокировка недоступности окна, а справа вверху отображается дата и время последнего перестроения, равная текущему времени завершения операции. По окончании перестроения, снимается блокировка недоступности окна, а справа вверху отображается дата и время последнего перестроения, равная текущему времени завершения операции.
  
 +В колонке «Есть ошибки» отображается для ранее не содержавших ошибки запросов индикатор процесса компиляции.
 +\\
 +<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>
  
 ==== Создание нового запроса ==== ==== Создание нового запроса ====
Строка 60: Строка 68:
   * Documents - документы с их реквизитами и версиями;   * Documents - документы с их реквизитами и версиями;
   * ProjectMembers - участники приглашенные в объекты.   * ProjectMembers - участники приглашенные в объекты.
 +
 +<callout type="info" icon="true">''Начиная с версии системы 3.29'' в объект Projects добавлено новое поле, отображающее значение плановых трудозатрат (''PlannedCost'') объекта иерархии.</callout>
  
 Для действий с реквизитами, в частности типа ''DateTime'' можно использовать библиотеку ''DbFunctions''. Для действий с реквизитами, в частности типа ''DateTime'' можно использовать библиотеку ''DbFunctions''.
Строка 119: Строка 129:
   * ''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.
Строка 127: Строка 153:
  
 <code php> <code php>
-POST http://localhost/Master/api/auth/login+POST http://localhost/api/auth/login
  
 { {
Строка 138: Строка 164:
  
 <code php> <code php>
-POST http://localhost/Master/api/auth/login+POST http://localhost/api/auth/login
  
 { {
Строка 145: Строка 171:
 </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",
Строка 159: Строка 185:
 или 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",
Строка 170: Строка 196:
 Обращение к данным системы с текстом 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"];
Строка 237: Строка 263:
 # авторизация # авторизация
 response = session.post( response = session.post(
-    url = DOMAIN+'/api/auth/login', +    url = DOMAIN + '/api/auth/login', 
     json = {     json = {
         'Login': LOGIN,          'Login': LOGIN, 
Строка 246: Строка 272:
 # либо авторизуйтесь, используя токен доступа # либо авторизуйтесь, используя токен доступа
 # response = session.post( # response = session.post(
-#     url = DOMAIN+'/api/auth/login', +#     url = DOMAIN + '/api/auth/login', 
 #     json = { #     json = {
 #         'tokenValue': TOKEN,  #         'tokenValue': TOKEN, 
Строка 263: Строка 289:
 # получение данных из LINQ-запроса # получение данных из LINQ-запроса
 response = session.post( response = session.post(
-    url = DOMAIN+'/api/queries/get', +    url = DOMAIN + '/api/queries/get', 
     cookies = cookies,      cookies = cookies, 
     json = LINQ,     json = LINQ,