Можно ли использовать в 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;
хм... делаю вот так:
[javascript]
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();
[/javascript]
в профайлере получаю вот такой запрос:
[sql]
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}'
[/sql]
include фильтру значения не присваиваются... почему?
Посмотрите функицю ApplyDatasetIncludeFilter в scr_DB. В ее теле как раз используется что-то вроде ApplySelectQueryIncludeFilter. Посмотрите в тело этой функции там включается фильтр и устанавливается параметр для фильтра, подобного вашему.
"Доленко Юрий" написал:Посмотрите функицю ApplyDatasetIncludeFilter в scr_DB. В ее теле как раз используется что-то вроде ApplySelectQueryIncludeFilter. Посмотрите в тело этой функции там включается фильтр и устанавливается параметр для фильтра, подобного вашему.
там, в качестве параметра, используется Dataset.SelectQuery, которого нет у сервиса UpdateQuery...
Примерно так, я полагаю:
[javascript]
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]);
}
[/javascript]
"SSV" написал:там, в качестве параметра, используется Dataset.SelectQuery, которого нет у сервиса UpdateQuery...
да, но Filters у них одного типа, а работа идет именно по этому свойству..
[javascript]
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;
}
[/javascript]
А ну тогда не удивительно :) я-то смотрю в 3.3.2
[javascript]
function CreateParam(Parameters, ParamName, ParamDataType) {
var Parameter = Parameters.CreateItem();
Parameter.Name = ParamName;
Parameter.DataType = ParamDataType;
Parameters.Add(Parameter);
return Parameter;
}
[/javascript]
Главное, чтобы получилось, я вырезала куски из ApplyDatasetIncludeFilter и вглубь, могла что-то упустить.