Обращение к таблицам при обновлении вкладок деталей

Здравствуйте!
Имеется две схемы Террасофт. Проблема с обновлением вкладок деталей. Скрипты все одинаковые. Все сравнила. В момент перехода на вкладку Детали запустила SQL Monitor. В правильной конфигурации идет обращение к таблице tbl_НовыйРаздел, а в неправильной - tbl_Files. Речь идет об обновении вкладок деталей с разными типами файлов. Пробовала отлаживать по шагам в Visual Studio. Нигде не нашла обращение к какой-либо из этих таблиц. Скажите, пожалуйста, в чем может быть ошибка?

Нравится

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

Здравствуйте!
Трудно что либо ответить, нужны примеры сервисов и скриптов, где по Вы думаете, что присутствует ошибка.

Здравствуйте!
Спасибо за ответ!
Проблема была связана с дополнительным обновлением деталей http://community.terrasoft.ua/forum/topic/2076 .
В тестовой базе все получилось, в рабочей со скриптами сделала то же самое, но в итоге с помощью SQL Monitor нашла отличие в том, что обращение происходит к разным таблицам, поэтому и не работает. В чем может быть причина?

Трудно сказать, необходимо более точно описание.

Суть проблемы. Существует в деталях нового раздела 3 вкладки с файлами: Файлы1, Файлы2, Файлы3. Добавляем новый файл на определенную вкладку. Переходим на другую вкладку и видим этот же файл, т. е. фильтр по типу файла не отработал. Относительно фильтров в файле прописано такое.

// wnd_FilesDetailGridAreaScript
function RefreshAllFileDetailRecord(){
var ParentID = FilesDetailGridArea.ParentItemID;
var ChildDataset = FilesDetailGridArea.Dataset;
var ChildFilterName = BaseGridArea.ParentItemFieldName;
if (Self.Attributes('TableUSI') == 'tbl_FileInRequest') { // имя таблицы интересующей детали Файлы
ChildDataset.Close();
ApplyDatasetFilter(ChildDataset, ChildFilterName, ParentID, true);
// <здесь накладываем дополнительные фильтры>
ChildDataset.Open();
} else {
RefreshDetailDataByParentID(ParentID, ChildDataset, ChildFilterName);
}
}

// scr_DB
function ApplyDatasetFilter(Dataset, FilterName, ParamValue, Enabled) {
var SelectQuery = Dataset.SelectQuery;
ApplySelectQueryFilter(SelectQuery, FilterName, ParamValue, Enabled);
}

Ну пока ничего "криминального" не видно :)
Хотелось бы увидеть "// <здесь накладываем дополнительные фильтры>"
и как построен запрос.

Я же для этого и написала функцию ApplyDatasetFilter. А то просто комментарий к предыдущей строке.

Непонятно тогда как вы фильтруете по типу файла?

Вот запрос. sq_FileInItem
Добавила выключенный фильтр сравнения
tbl_FileInRequest"."FileTypeID" = :pFileTypeID (параметр Строка Unicode)

А где Вы указываете значение параметра и включаете этот фильтр?

//wnd_МойРазделScript

function InitializeFilesDetail() {
WWCWorkspace.FileWindow = wndFilesDetail.Window;
SetAttribute(WWCWorkspace.FileWindow, 'DatasetUSI',
'ds_FileInItem');
SetAttribute(WWCWorkspace.FileWindow, 'TableUSI',
'tbl_FileInRequest');
SetAttribute(WWCWorkspace.FileWindow, 'InsertLinkUSI',
'iq_FileInRequest');
SetAttribute(WWCWorkspace.FileWindow, 'ParentItemFieldName',
'RequestID');

//-----Установить атрибут типа файла-------------
WWCWorkspace.FileWindow.Attributes('FileTypeID') = rft_File;

WWCWorkspace.FileWindow.Prepare();
WWCWorkspace.FileDataset =
WWCWorkspace.FileWindow.ComponentsByName('dlData').Dataset;

//-----Включить фильтр по типам файлов
ApplyDatasetFilter(WWCWorkspace.FileDataset ,'FileTypeID', '{CF1AEBB6-9E3D-4303-B036-40EBD1E47A91}', true);
}

function RefreshFilesDetail() {
InitializeFilesDetail();
WWCWorkspace.InitializeFileFlag = true;
var RequestID =
BaseWorkspace.GridDataset.ValAsGUID('ID');
if (RequestID == WWCWorkspace.FilesOldRequestID) {
return;
} else {
WWCWorkspace.FilesOldRequestID = RequestID;
}

SetAttribute(WWCWorkspace.FileWindow, 'ParentItemID',
RequestID);

RefreshDetailData(BaseWorkspace.GridDataset, 'ID',
WWCWorkspace.FileDataset, 'ItemID', 1); // Не выключать включенные фильтры
}

И Вы этот код продублировали для всех трех деталей с разным указанием значения FileTypeID:

...
ApplyDatasetFilter(WWCWorkspace.FileDataset ,'FileTypeID', '{CF1AEBB6-9E3D-4303-B036-40EBD1E47A91}', true);
...

?

Да, с разным значеним. И аттрибут в строке
WWCWorkspace.FileWindow.Attributes('FileTypeID') = rft_File;
тоже 3 раза разный устанавливала.

А что показывает SQL Server Profiler? Параметр меняется?

У нас Oracle. По шагам отлаживала. Параметр меняется. Фильтр применяется. Но в итоге в деталях неправильно отображены файлы.

Кажется я понял... У Вас WWCWorkspace.FileDataset перетирается при инициализации новой детали. Вам надо для каждой детали свою переменную завести.

В функции InitializeFilesDetail я же каждый раз переопределяю Dataset.

WWCWorkspace.FileDataset =
WWCWorkspace.FileWindow.ComponentsByName('dlData').Dataset;

А... я почему-то подумал, что Вы флаг InitializeFileFlag проверяете... Ну это очень не оптимально... У Вас каждый раз при переходе по записям выполняется очень много лишнего кода.
Какой запрос идет на сервер когда Вы нажимаете F5(Refresh) в детали? Приведите пример из трех деталей.

С помощью SQL Monitor в момент нажатия кнопки "Обновить" в деталях находим запрос:

SELECT * FROM (
SELECT 
	"tbl_Files"."ID" "ID",
	"FileInInvoice"."ID" "FileInItemID",
	"FileInInvoice"."RequestID" "ItemID",
	"tbl_Files"."ItemTypeID" "ItemTypeID",
	"tbl_Files"."Link" "Link",
	"tbl_Files"."Description" "Description",
	"tbl_Files"."Revision" "Revision",
	"tbl_Files"."LockedByID" "LockedByID",
	"Contact"."Name" "LockedByName",
	"tbl_Files"."IsArchive" "IsArchive",
	"tbl_Files"."ModifiedByID" "ModifiedByID",
	"Modifier"."Name" "ModifiedByName"
FROM 
	"tbl_Files" "tbl_Files", 
	"tbl_FileInRequest" "FileInInvoice", 
	"tbl_Contact" "Contact", 
	"tbl_Contact" "Modifier"
WHERE 
	"tbl_Files"."ID" = "FileInInvoice"."FileID"(+)
AND
	"tbl_Files"."LockedByID" = "Contact"."ID"(+)
AND
	"tbl_Files"."ModifiedByID" = "Modifier"."ID"(+)
AND 
	("tbl_Files"."ID" = :pID)
) WHERE ROWNUM <= 1
pID = '{9E10BE43-256C-46B3-9F5E-4E390B119BAA}'

Хм... Это Вы карточку открываете?

Это я нажимаю кнопку Обновить в деталях.

Но фильтр у Вас не по типу файла, как Вы писали, а по ID. Опубликуйте xml сервиса запроса детали.

В правильной версии тоже этот запрос отрабатывает при нажатии кнопки Обновить в деталях.

Сервис запроса с файлами.

  <?xml version="1.0" encoding="UTF-8" ?> 
- <Service UID="98AEEBAA44CC487B9DCD95DFDA592C9A" USI="X15\Workspaces\Common\GridAreas\Files\sq_FileInItem" ServiceTypeCode="SelectQuery" Caption="sq_FileInItem">
- <Parameters>
  <Item Name="ID" UID="63AF7502B9224DDF8294878A306B350C" DataType="7" Value_ValueType="0" /> 
  <Item Name="ItemID" UID="19306BE4AA96466E83C3783095BA07D6" DataType="7" Value_ValueType="0" /> 
  <Item Name="FileItemTypeID" UID="8E58543501FD483FA930E923543C20B9" DataType="7" Value_ValueType="0" /> 
  <Item Name="LinkItemTypeID" UID="577A1245CCB64BE390E9467B41A5EFBB" DataType="7" Value_ValueType="0" /> 
  <Item Name="MSProjectFileMask" UID="ED2A9C31E51B4EE0A9B4E1DBBAA7D44F" Value="%.mp%" /> 
  <Item Name="FileTypeID" UID="597151D80B04482B8D5A348F806974EE" Value_ValueType="0" /> 
  </Parameters>
- <Selects>
- <Item Code="Select" UID="4E5092BEC662477D9B5300D14CC9C723" FromTableAlias="tbl_Files" FromTableUSI="tbl_Files">
- <Joins>
  <Item LeftTableAlias="FileInInvoice" UID="CD7A6FCC4A1A40F0B3C426E5EE5EF6FF" LeftFieldTableUSI="tbl_FileInInvoice" RightFieldTableUSI="tbl_Files" LeftFieldSQLName="FileID" RightFieldSQLName="ID" /> 
  <Item LeftTableAlias="Contact" UID="7E4D76F5212E4F89AF53F1C27828171A" LeftFieldTableUSI="tbl_Contact" RightFieldTableUSI="tbl_Files" LeftFieldSQLName="ID" RightFieldSQLName="LockedByID" /> 
  <Item LeftTableAlias="Modifier" UID="629110ACFA7047E0A665BDF166092EF4" LeftFieldTableUSI="tbl_Contact" RightFieldTableUSI="tbl_Files" LeftFieldSQLName="ID" RightFieldSQLName="ModifiedByID" /> 
  <Item LeftTableAlias="Creator" UID="3AF568C2DE014C729578A1E2A5DFB7B6" LeftFieldTableUSI="tbl_Contact" RightFieldTableUSI="tbl_Files" LeftFieldSQLName="ID" RightFieldSQLName="CreatedByID" /> 
  <Item LeftTableAlias="tbl_FileInRequest" UID="3AEB6A2220674B4C8F6B0FABF3BFB371" LeftFieldTableUSI="tbl_FileInRequest" RightFieldTableUSI="tbl_Files" LeftFieldSQLName="FileID" RightFieldSQLName="ID" IsAdministrated="True" /> 
  </Joins>
- <Columns>
  <Item ColumnAlias="ID" UID="2AE81BE7C50A41459EEFA8BEC95E4C48" Type="GeneralColumn" CanDisable="False" FieldSQLName="ID" FieldTableUSI="tbl_Files" /> 
- <Item ColumnAlias="FileInItemID" UID="F071AD3449604D0E817CE04AC873FCFF" Type="GeneralColumn" ParentJoinCode="FileInInvoice" CanDisable="False" FieldSQLName="ID" FieldTableUSI="tbl_FileInInvoice">
- <DependsOn>
  <Item Value="FileInInvoice" UID="F3254AEC92D84299BC0391E11B45E212" /> 
  </DependsOn>
  </Item>
- <Item ColumnAlias="ItemID" UID="DFCA0AB0128C4A599D4067B61BA85319" Type="GeneralColumn" ParentJoinCode="FileInInvoice" CanDisable="False" FieldSQLName="InvoiceID" FieldTableUSI="tbl_FileInInvoice">
- <DependsOn>
  <Item Value="FileInInvoice" UID="DEEEEC806E244DCBBBD38229BCEF3637" /> 
  </DependsOn>
  </Item>
  <Item ColumnAlias="ItemTypeID" UID="96436049388B4DD1A880089BBDD5007A" Type="GeneralColumn" CanDisable="False" FieldSQLName="ItemTypeID" FieldTableUSI="tbl_Files" /> 
  <Item ColumnAlias="Link" UID="F3DEFD7323C34BBDA250CE5A276FF441" Type="GeneralColumn" FieldSQLName="Link" FieldTableUSI="tbl_Files" /> 
  <Item ColumnAlias="Description" UID="5C96487BBD6E4232A4D94925673446E9" Type="GeneralColumn" CanDisable="False" FieldSQLName="Description" FieldTableUSI="tbl_Files" /> 
  <Item ColumnAlias="Revision" UID="D279341C1DAD4AC8869FF3D6E9823396" Type="GeneralColumn" FieldSQLName="Revision" FieldTableUSI="tbl_Files" /> 
  <Item ColumnAlias="LockedByID" UID="056A9DFF11304DEDB65627386E14C515" Type="GeneralColumn" CanDisable="False" FieldSQLName="LockedByID" FieldTableUSI="tbl_Files" /> 
- <Item ColumnAlias="LockedByName" UID="6A7975767348495F800DC59705693B2A" Type="GeneralColumn" ParentJoinCode="Contact" FieldSQLName="Name" FieldTableUSI="tbl_Contact">
- <DependsOn>
  <Item Value="Contact" UID="A83F8A449367426A856A31E3FB7A4623" /> 
  </DependsOn>
  </Item>
  <Item ColumnAlias="FileData" UID="63F283E151974E96BD92B3D6052B25FF" Type="GeneralColumn" FieldSQLName="FileData" FieldTableUSI="tbl_Files" /> 
  <Item ColumnAlias="IsArchive" UID="3758E521217148BEA915F886FD40FDE7" Type="GeneralColumn" CanDisable="False" FieldSQLName="IsArchive" FieldTableUSI="tbl_Files" /> 
  <Item ColumnAlias="ModifiedByID" UID="0ED2D9E51EAE495F919C4177F46DD33B" Type="GeneralColumn" FieldSQLName="ModifiedByID" FieldTableUSI="tbl_Files" /> 
- <Item ColumnAlias="ModifiedByName" UID="AB9ED79F535B42769A364CB598E17E7C" Type="GeneralColumn" ParentJoinCode="Modifier" FieldSQLName="Name" FieldTableUSI="tbl_Contact">
- <DependsOn>
  <Item Value="Modifier" UID="8BFC082E37184A938139334952075430" /> 
  </DependsOn>
  </Item>
  <Item ColumnAlias="CreatedByID" UID="859CCA428EB44294966E9F01D6781AA6" Type="GeneralColumn" FieldSQLName="CreatedByID" FieldTableUSI="tbl_Files" /> 
- <Item ColumnAlias="CreatedByName" UID="B6F702972CA84169966BEBDCF235C128" Type="GeneralColumn" ParentJoinCode="Creator" FieldSQLName="Name" FieldTableUSI="tbl_Contact">
- <DependsOn>
  <Item Value="Creator" UID="F60D2E9B21704550850FD562E3B66645" /> 
  </DependsOn>
  </Item>
  <Item ColumnAlias="ModifiedOn" UID="B8E8E96E1FCB4A548A3364A7BB9AE1A1" Type="GeneralColumn" FieldSQLName="ModifiedOn" FieldTableUSI="tbl_Files" /> 
  <Item ColumnAlias="CreatedOn" UID="FFED574110514432BA8CB879B7B0395B" Type="GeneralColumn" FieldSQLName="CreatedOn" FieldTableUSI="tbl_Files" /> 
- <Item ColumnAlias="FileTypeID" UID="B7A01D2AC8A748FD80BB87B88F2A358D" Type="GeneralColumn" ParentJoinCode="tbl_FileInRequest" FieldSQLName="FileTypeID" FieldTableUSI="tbl_FileInRequest">
- <DependsOn>
  <Item Value="tbl_FileInRequest" UID="B2710F0614614648B0CE16091E541929" /> 
  </DependsOn>
  </Item>
  </Columns>
- <Filters Code="Where" Type="Filters">
  <UserFilters /> 
- <Item Code="ID" UID="90405FC1909A44618B977F405E31C28D" Type="CompareFilter" IsEnabled="False" ExpressionTypeCode="FieldFilterExpression" ValueExpressionTypeCode="ParamFilterExpression">
  <TestExpression Type="FieldFilterExpression" FieldSQLName="ID" FieldTableUSI="tbl_Files" TableAlias="tbl_Files" /> 
  <ValueExpression Type="ParamFilterExpression" ParameterName="ID" /> 
  </Item>
- <Item Code="ItemID" UID="8E0628FB030F40AC9C784E513CCD089B" Type="CompareFilter" IsEnabled="False" ExpressionTypeCode="FieldFilterExpression" ValueExpressionTypeCode="ParamFilterExpression">
  <TestExpression Type="FieldFilterExpression" FieldSQLName="InvoiceID" FieldTableUSI="tbl_FileInInvoice" TableAlias="FileInInvoice" /> 
  <ValueExpression Type="ParamFilterExpression" ParameterName="ItemID" /> 
  </Item>
- <Item Code="ItemType" UID="05C989E1B2CD417EA968A226494F9359" Type="Filters" LogicalOperator="1" IsEnabled="False">
- <Item Code="FileItemTypeID" UID="80CA2D11980D4006AD0F0F3668351391" Type="CompareFilter" IsEnabled="False" ExpressionTypeCode="FieldFilterExpression" ValueExpressionTypeCode="ParamFilterExpression">
  <TestExpression Type="FieldFilterExpression" FieldSQLName="ItemTypeID" FieldTableUSI="tbl_Files" TableAlias="tbl_Files" /> 
  <ValueExpression Type="ParamFilterExpression" ParameterName="FileItemTypeID" /> 
  </Item>
- <Item Code="LinkItemTypeID" UID="D2DAADE11C1740989BDDADEBD5C7B800" Type="CompareFilter" IsEnabled="False" ExpressionTypeCode="FieldFilterExpression" ValueExpressionTypeCode="ParamFilterExpression">
  <TestExpression Type="FieldFilterExpression" FieldSQLName="ItemTypeID" FieldTableUSI="tbl_Files" TableAlias="tbl_Files" /> 
  <ValueExpression Type="ParamFilterExpression" ParameterName="LinkItemTypeID" /> 
  </Item>
  </Item>
- <Item Code="MSProjectFile" UID="EF60F3DDBD4349578972FEADD5202532" Type="LikeFilter" IsEnabled="False" ExpressionTypeCode="FieldFilterExpression" ValueExpressionTypeCode="ParamFilterExpression" LikeType="1">
  <TestExpression Type="FieldFilterExpression" FieldSQLName="Link" FieldTableUSI="tbl_Files" TableAlias="tbl_Files" /> 
  <ValueExpression Type="ParamFilterExpression" ParameterName="MSProjectFileMask" /> 
  </Item>
- <Item Code="FileTypeID" UID="EB5A5C312DD44C4D9E458E6B9A917E31" Type="CompareFilter" IsEnabled="False" ExpressionTypeCode="FieldFilterExpression" ValueExpressionTypeCode="ParamFilterExpression">
  <TestExpression Type="FieldFilterExpression" FieldSQLName="FileTypeID" FieldTableUSI="tbl_FileInRequest" TableAlias="tbl_FileInRequest" /> 
  <ValueExpression Type="ParamFilterExpression" ParameterName="FileTypeID" /> 
  </Item>
  </Filters>
  </Item>
  </Selects>
  </Service>

"В правильной версии тоже этот запрос отрабатывает при нажатии кнопки Обновить в деталях. " - значит Вы приводите не тот запрос. Их наверное несколько, а Вы берете последний. Потому как нет фильтрации по типу.

Должен применяться фильтр по значению конкретной закладки в деталях, т. е. "FileTypeID". В скрипте раздела это прописано (см. выше). Скажите, пожалуйста, может еще где-то надо прописать такое обновление?

Как выглядит функция RefreshDetailData и RefreshDetailDataByParentID?

// scr_DB

Эти функции я не меняла.

function RefreshDetailDataByParentID(ParentID, ChildDataset, ChildFilterName) {
	if (ParentID == EmptyStr) {
		ParentID = GUID_NULL;
	}
	if (ChildDataset.State != dstInactive) {
		ChildDataset.Close();
	}
	EnableDatasetFilters(ChildDataset, false);
	ApplyDatasetFilter(ChildDataset, ChildFilterName, ParentID, true);	
	ChildDataset.Open();
}
function RefreshDetailData(ParentDataset, ParentFieldName, ChildDataset,
		ChildFilterName) {
	var ParentFieldValue = ParentDataset.ValAsStr(ParentFieldName);	
	RefreshDetailDataByParentID(ParentFieldValue, ChildDataset, 
		ChildFilterName);
}

Тогда как работает эта реализация?

...
RefreshDetailData(BaseWorkspace.GridDataset, 'ID',
WWCWorkspace.FileDataset, 'ItemID', 1); // Не выключать включенные фильтры
...

Судя по scr_DB то фильтры отключаются...

Большое спасибо!

Показать все комментарии