Можно ли использовать в UpdateQuery Include фильтр? И если можно, то как? Попытка разобраться с ним как с SelectQuery (ApplyDatasetIncludeFilter(UpdateIDs, 'IDs', ReserveNumberIDs, true)) приводит к ошибке, смысл кототой - 'Dataset.SelectQuery - undefined'...
Нравится
Вы можете оставить его всегда включенным (если нет никаких ограничений для этого) или воспользоваться EnableUpdateQueryFilters(UpdateQuery, Enabled, FilterCodesArray).
ApplyDatasetIncludeFilter() не предназначен для UpdateQuery, он рассчитывает на DataSet и первым делом ищет у него SelectQuery.
Я просто поискала в scr_DB по ключевому слову UpdateQuery. Можно и самому после создания экземпляра UpdateQuery под отладчиком посмотреть, там скорее всего свойство Filters (ну или оно на пару уровней глубже, но существует),а у него по имени найти нужный item и просто сделать ему Enable = true;
хм... делаю вот так:
var ReserveNumberIDs = new Array(); ReserveNumberIDs.push(dlNumbers.Dataset.Values('IDpw')); var StatusID = '{878A4783-39F9-41A5-B83E-00475A76E4C0}'; var UpdateIDs = Services.GetNewItemByUSI('uq_AllRemovalFromReserve'); var FilterCodesArray = new Array('IDs'); EnableUpdateQueryFilters(UpdateIDs, 'IDs', ReserveNumberIDs, true); UpdateIDs.Parameters.ItemsByName('StatusID').ValAsGUID = StatusID; UpdateIDs.Execute();
в профайлере получаю вот такой запрос:
exec sp_executesql N'UPDATE [tbl_PhoneInWorking] SET [StatusID] = @P1, [ModifiedOn] = getdate(), [ModifiedByID] = ''{A653FD19-379F-484B-8519-A1AD4CF4D6BF}'' WHERE ([tbl_PhoneInWorking].[ID] IN ())', N'@P1 varchar(38)', '{878A4783-39F9-41A5-B83E-00475A76E4C0}'
include фильтру значения не присваиваются... почему?
Посмотрите функицю ApplyDatasetIncludeFilter в scr_DB. В ее теле как раз используется что-то вроде ApplySelectQueryIncludeFilter. Посмотрите в тело этой функции там включается фильтр и устанавливается параметр для фильтра, подобного вашему.
"Доленко Юрий" написал:Посмотрите функицю ApplyDatasetIncludeFilter в scr_DB. В ее теле как раз используется что-то вроде ApplySelectQueryIncludeFilter. Посмотрите в тело этой функции там включается фильтр и устанавливается параметр для фильтра, подобного вашему.
там, в качестве параметра, используется Dataset.SelectQuery, которого нет у сервиса UpdateQuery...
Примерно так, я полагаю:
var Filter = UpdateIDs.Filters.ItemsByCode("IDs"); var ValuesExpressions = Filter.ValuesExpressions; var Parameters = UpdateIDs.Parameters; DeleteParametersByValueExpressions(Parameters, ValuesExpressions); ValuesExpressions.Clear(); for (var j = 0; j < ReserveNumberIDs.length; j++) { AddValuesExpressionsParameter(ValuesExpressions, Parameters, pdtGUID, ReserveNumberIDs[j]); }
"SSV" написал:там, в качестве параметра, используется Dataset.SelectQuery, которого нет у сервиса UpdateQuery...
да, но Filters у них одного типа, а работа идет именно по этому свойству..
function AddValuesExpressionsParameter(ValuesExpressions, Parameters, DataType, ParamValue) { if (DataType == null) { DataType = pdtUnicodeString; } var Result = CreateParam(Parameters, GenParamName(Parameters), DataType); Result.Value = ParamValue; var ParamExpression = ValuesExpressions.CreateParamFilterExpression(); ValuesExpressions.Add(ParamExpression); ParamExpression.Code = Connector.GenGUID(); ParamExpression.Parameter = Result; return Result; }
А ну тогда не удивительно :) я-то смотрю в 3.3.2
function CreateParam(Parameters, ParamName, ParamDataType) { var Parameter = Parameters.CreateItem(); Parameter.Name = ParamName; Parameter.DataType = ParamDataType; Parameters.Add(Parameter); return Parameter; }
Главное, чтобы получилось, я вырезала куски из ApplyDatasetIncludeFilter и вглубь, могла что-то упустить.