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