Вопрос

деталь журнала изменений

Добрый день.
На сервис sq_OpportunityLog добавил доп условия в WHERE (чтоб деталь логирования показывала не все записи) принудительные галки на условие поставил, чтоб всегда были включены. Но программа игнорирует мои доп условия и использует условия, те что заложенны в типовом варианте.
Не понятно, почему не работает. По трейсу в Провайлере запрос идет в туже таблицу tbl_OpportunityLog

У меня такой же вопрос

10 комментариев

Сервис «sq_Opportunity» относится к основной таблице раздела «tbl_Opportunity», а не к таблице «tbl_OpportunityLog».

Это я описался, я поправил именно сервис sq_OpportunityLog

Будьте внимательнее.:wink:

поправил то я ошибку в описании (на форуме) а в программе у меня правильно был доработан sq_OpportunityLog. но не работает
Вопрос остаеться открытым(((

Алексей, а как именно он был «правильно доработан». Может, дело в этом?

Добавил параметры и уcловия к запросу, вот так он выглядит если смотреть на просмотр (в конфигураторе). :

SELECT
[tbl_OpportunityLog].[ID] AS [ID],
[tbl_OpportunityLog].[RecordID] AS [RecordID],
[tbl_OpportunityLog].[ActionID] AS [ActionID],
[tbl_OpportunityLog].[CreatedOn] AS [CreatedOn],
[tbl_OpportunityLog].[CreatedByID] AS [CreatedByID],
[CreatedBy].[Name] AS [CreatedByName],
[tbl_OpportunityLog].[CustomerName] AS [CustomerName],
[tbl_OpportunityLog].[CustomerID] AS [CustomerID],
[tbl_OpportunityLog].[ChannelName] AS [ChannelName],
[tbl_OpportunityLog].[ChannelID] AS [ChannelID],
[tbl_OpportunityLog].[StageStage] AS [StageStage],
[tbl_OpportunityLog].[StageID] AS [StageID],
[tbl_OpportunityLog].[TypeOpportunityType] AS [TypeOpportunityType],
[tbl_OpportunityLog].[TypeID] AS [TypeID],
[tbl_OpportunityLog].[OwnerName] AS [OwnerName],
[tbl_OpportunityLog].[OwnerID] AS [OwnerID],
[tbl_OpportunityLog].[ContactName] AS [ContactName],
[tbl_OpportunityLog].[ContactID] AS [ContactID],
[tbl_OpportunityLog].[Revenue] AS [Revenue],
[tbl_OpportunityLog].[EstimatedRevenue] AS [EstimatedRevenue],
[tbl_OpportunityLog].[EstimatedStartDate] AS [EstimatedStartDate],
[tbl_OpportunityLog].[EstimatedCloseDate] AS [EstimatedCloseDate],
[tbl_OpportunityLog].[DateConfirm] AS [DateConfirm],
[tbl_OpportunityLog].[AlliasName] AS [AlliasName],
[tbl_OpportunityLog].[AlliasID] AS [AlliasID],
[tbl_OpportunityLog].[IsTender] AS [IsTender],
[tbl_OpportunityLog].[EstimatedRevenueTo] AS [EstimatedRevenueTo],
[tbl_OpportunityLog].[AlliasSHName] AS [AlliasSHName],
[tbl_OpportunityLog].[AlliasSHID] AS [AlliasSHID]
FROM
[dbo].[tbl_OpportunityLog] AS [tbl_OpportunityLog]
LEFT OUTER JOIN
[dbo].[tbl_Contact] AS [CreatedBy] ON [CreatedBy].[ID] = [tbl_OpportunityLog].[CreatedByID]
WHERE([tbl_OpportunityLog].[RecordID] = :RecordID AND
(EXISTS
(SELECT
[tbl_ContactDepartment].[ID] AS [ID]
FROM
[dbo].[tbl_ContactDepartment] AS [tbl_ContactDepartment]
WHERE([tbl_ContactDepartment].[ContactID] = '{251FB9AC-C17E-4DF7-A0CB-D591FDB97462}' AND
[tbl_ContactDepartment].[DepartmentID] =
(SELECT TOP 1
[tbl_Opportunity].[ChannelID] AS [ChannelID]
FROM
[dbo].[tbl_Opportunity] AS [tbl_Opportunity]
WHERE([tbl_Opportunity].[ID] = :RecordID)))) OR
'{EAB3D8EC-5400-4A26-8634-ACA9203EEB8E}' IN
(SELECT
[tbl_AdminUnit].[ID] AS [ID]
FROM
[dbo].[tbl_AdminUnit] AS [tbl_AdminUnit]
WHERE([tbl_AdminUnit].[UserIsAdmin] = :Is AND
[tbl_AdminUnit].[UserIsEnabled] = :Is))))

ORDER BY
4 DESC

Запрос рабочий если подставить параметры . Но при тестировании в трейсе Провайлера все равно с типовым условием , запрос как будто видит старый сервис.

А с правами доступа всё в порядке?

Да вроде норм, что под админом что просто под пользователем трейс ведет себя одинаково странно: при первом переходе на вкладку детали журнал изменения:
1) отрабатывает мой запрос (который я поправил),
2) а следом идет старый запрос:
exec sp_executesql N'SELECT TOP 40
[tbl_OpportunityLog].[ID] AS [ID],
[tbl_OpportunityLog].[RecordID] AS [RecordID],
[tbl_OpportunityLog].[ActionID] AS [ActionID],
[tbl_OpportunityLog].[CreatedOn] AS [CreatedOn],
[CreatedBy].[Name] AS [CreatedByName],
[tbl_OpportunityLog].[CustomerName] AS [CustomerName],
[tbl_OpportunityLog].[ChannelName] AS [ChannelName],
[tbl_OpportunityLog].[StageStage] AS [StageStage],
[tbl_OpportunityLog].[TypeOpportunityType] AS [TypeOpportunityType],
[tbl_OpportunityLog].[OwnerName] AS [OwnerName],
[tbl_OpportunityLog].[ContactName] AS [ContactName],
[tbl_OpportunityLog].[Revenue] AS [Revenue],
[tbl_OpportunityLog].[EstimatedRevenue] AS [EstimatedRevenue],
[tbl_OpportunityLog].[EstimatedStartDate] AS [EstimatedStartDate],
[tbl_OpportunityLog].[EstimatedCloseDate] AS [EstimatedCloseDate],
[tbl_OpportunityLog].[DateConfirm] AS [DateConfirm],
[tbl_OpportunityLog].[AlliasName] AS [AlliasName],
[tbl_OpportunityLog].[IsTender] AS [IsTender],
[tbl_OpportunityLog].[EstimatedRevenueTo] AS [EstimatedRevenueTo],
[tbl_OpportunityLog].[AlliasSHName] AS [AlliasSHName]
FROM
[dbo].[tbl_OpportunityLog] AS [tbl_OpportunityLog]
LEFT OUTER JOIN
[dbo].[tbl_Contact] AS [CreatedBy] ON [CreatedBy].[ID] = [tbl_OpportunityLog].[CreatedByID]
WHERE([tbl_OpportunityLog].[RecordID] = @P1)
ORDER BY
4 DESC',N'@P1 varchar(8000)','{073780C3-F023-4CC9-B3A6-00036BFA6A30}'

, и если перейти к следующей записи, то уже только 2-ой запрос работает.

Функция RefreshChangesLogDetail в scr_BaseWorkspace вызывает RefreshDetailData из scr_DB, а та запускает функцию RefreshDetailDataByParentID.

RefreshDetailDataByParentID(ParentFieldValue, ChildDataset, ChildFilterName, false);

А в ней происходит отключение всех фильтров при помощи:

EnableDatasetFilters(ChildDataset, false);

Чтобы фильтры не отключались, нужно вызывать эту функцию RefreshDetailDataByParentID с последним параметром DoNotDisableAllFilters, равным true.

Вы можете внести доработку, чтобы эта функция запускалась со включенными фильтрами конкретно для нужной детали или для всех, в зависимости от потребностей. Понять внутри функции, что за деталь, можно по ChildDataset.SelectQuery.Caption равному "sq_OpportunityLog".
Получится вроде:

RefreshDetailDataByParentID(ParentFieldValue, ChildDataset, ChildFilterName, (ChildDataset.SelectQuery.Caption == 'sq_OpportunityLog'));

Спасибо, теперь все получилось.

Войдите или зарегистрируйтесь, чтобы комментировать