Напоминания!

Здравствуйте!
Хочу автоматический изменять напоминания по определенной задачи для ответственного,
Некоторые строчки из моего кода:
var ds_Remind = dl_remLNK.Dataset;//ds_Remindings
vat ds_rem = ds_Remind.DataFields.ItemsByName('RemindTime');
RemindToOwnerID = DataFields.ItemsByName('RemindingToOwnerID');
//датасет задачи

ApplyDatasetFilter(ds_Remind, 'ID',RemindToOwnerID, true);
// пытаюсь фильтровать по ответственному
ds_Remind.Open();
ds_Remind.edit();
ds_rem.ValAsDateTime = Event.Start;
ds_Remind.post();

у меня никак не получается нормально фильтровать записи, чтобы найти напоминание связанное с ответственным по задаче и внести изменения в расписание напоминания,
буду рад любой помощи, особенно был бы признателен за примеры.
С уважением Марат Мамажанов.

Нравится

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

Вы применяете фильтр по полю ID(я так понимаю ID записи напоминания), а следует по полю контакта ContactID.

да я уже пробывал, только вот ошибки все равно выходят, когда ставлю ContactID, выходит ошибка что невозможно вставить значение nill, значение не допустипо для этого поля, а когда ставлю id вообще "выходит неопознаная ошибка"
это мне лог так пишет

В случаи с ContactID попробуйте вывести какое либо поле dataset-а(отбирает ли фильтр значения?).
Возможно Вы пытаетесь вставить пустое значение(Event.Start).

Event.Start значение не пустое, т.к. предворительно я туда присваиваю опред-е значение, да и лог ругается совсем на другое, я так понял что фильтрация если и происходит, то не потому значению либо она вообще у меня не срабатывает, так как в случае если фильтрация удачно, то поле "описание" не должно быть пустым, там уже есть старое описание задачи, а когда я присваиваю полю RemindTime значение Event.Start то оно присваетвается но при этом ругается что поле "описание" не должно быть пустым, в этом случае значит что фильтрация не дала нужного результата, как думаете может мне по пробывать вместо edit(); использовать append(); ???

Не стоит.
На какое событие вызывается Ваш скрипт?

UpdateDatasetRecordByEvent(Dataset, Event)
вот весь код:

function UpdateDatasetRecordByEvent(Dataset, Event) {

var DataFields = Dataset.DataFields;
//121321321

//4654654
var StartDateDataField = DataFields.ItemsByName('StartDate');
var DueDateDataField = DataFields.ItemsByName('DueDate');
var OwnerIDDataField = DataFields.ItemsByName('OwnerID');
var RemindToOwnerID = DataFields.ItemsByName('RemindingToOwnerID');
Dataset.Locate('ID', Event.ID);
var PriorStartDate = StartDateDataField.ValAsDateTime;
var PriorDueDate = DueDateDataField.ValAsDateTime;
if (!CheckTaskCovering(Dataset,OwnerIDDataField,Event.Start,Event.Finish)) {
CancelChangeEvent(Event, PriorStartDate, PriorDueDate);
return;
}

Dataset.Edit();
var RemindingToOwnerID = Dataset.Values('RemindingToOwnerID');
var uq_Remindings = GetSingleItemByCode('uq_Remindings', 'uq_RemindSingle');
var ds_Reminding1 = dl_remLNK.Dataset;
var Parameters = uq_Remindings.Parameters;
var ColumnsValues = uq_Remindings.ColumnsValues;
var ds_rem = ds_Reminding1.DataFields.ItemsByName('RemindTime');
var OwnerID = Dataset.DataFields.ItemsByName('OwnerID');
// SetParameterValue(Parameters, 'ID', RemindingToOwnerID);
// ColumnsValues.ItemsByName('RemindTime').Value = Event.Start;
// uq_Remindings.Execute();
//ds_Reminding1.Close();
// ds_Reminding1.DisableEvents();
ApplyDatasetFilter(ds_Reminding1, 'ID', RemindToOwnerID, true);
//ApplyDatasetIDFilter(ds_Remindings, RemindingToOwnerID, true);
// ds_Reminding1.EnableEvents();
ds_Reminding1.Open();
//RefreshDataset(ds_Remindings);
ds_Reminding1.edit();
ds_rem.ValAsDateTime = Event.Start;
ds_Reminding1.post();

StartDateDataField.ValAsDateTime = Event.Start;
DueDateDataField.ValAsDateTime = Event.Finish;
UpdateDuration(Dataset);
Dataset.Post();
UpdateEventColorsByDatasetRecord(Event, Dataset);

}

Передаете Dataset задач?

RemindToOwnerID = DataFields.ItemsByName('RemindingToOwnerID');
не вернет значение для
ApplyDatasetFilter(ds_Remind, 'ID',RemindToOwnerID, true);

и если хотите вернуть напоминания по ответственному то лучше
var RemindToOwnerID = Dataset.Values('RemindingToOwnerID');
ApplyDatasetFilter(ds_Remind, 'ComtactID',RemindToOwnerID, true);

Здравствуйте!
Что-то у меня никак не заладится, сделал:

var RemindToOwnerID = Dataset.Values('RemindingToOwnerID');
ApplyDatasetFilter(ds_Remind, 'ContactID',RemindToOwnerID, true);

как мне и посоветовали, но все равно не выходит, если я ставлю имя поля по которому фильтровать ID то выходит неопознаная ошибка, а если ставлю ContactID то выходит след-я ошибка:
[09.07.02 09.26.43.281] (E) Ошибка выполнения метода 'ScheduleControlOnChangeEvent'. Ошибка сохранения записи. Оригинальное сообщение об ошибке: Выполнение данной инструкции было прервано.
Не удалось вставить значение NULL в столбец "Description", таблицы "tsDemo331.dbo.tbl_Reminding"; в столбце запрещены значения NULL. Ошибка в INSERT «Call Stack»

из чего следует, что фильтр не вернул мне того значение, которо мне нужно, т.к. в таком случае поле "Description" небыло бы пустым, в нем должно хранится описание напоминания, я лишь пытаюсь изменить его время,
к стати еще вот такой вопрос, там же где и ds_Remindig там есть и ds_Remindigs чем они отличаются, какого назначение каждого?

может я не правильно подставляю датасет в фильтр, так как
датасет связанный с напомянанимями, я просто подключил данный источник данных к форме расписания задачи в не визульных компанентах, как дополнительный источник данных (dl_Link) просто потому-что не знал как подключить датасет из другого раздела, другой группы....в данный раздел, хотя запись в датасет идет, иначе ошибка в поле "Description" не появлялась бы........

Не понимаю причем здесь поле Description, ведь Вам нужно только время изменить. Или Вы хотите создавать новую напоминалку?

в этом и есть проблема, я хочу изменить время и для этого делаю фильтрацию по ответсвенному для того чтобы изменить время на том напоминании, кторое относится к нему, у которого поле Description уже заполнено, но фильтрации не просходит, и когда я пытаюсь изменть время, то запись идет вообще в другое напоминание, или создается новое, в котором это смое поле Description не заполнено, так происходит потому что у меня никак не заработает фильтр, или есть еще проблемы о которых я не догадываюь .. .
вот так обстоят дела

Марат, а Вы смотрели запрос в Profiler, который идет при включении фильтра?

:) а где этот Profiler можно посмотреть : ) я вообще навичек в этой среде, так что вы уже меня простите если задаю глупые вопросы : )

Марат, Profiler устанавливается с полным MS SQL:

я так понимаю что пример этот с 2000 го sql, у меня 2005 и Profiler мне найти не удалось : (

Функция, которая будет обновлять конкретное напоминание.
ContactID - контакт;
SubjectID - запись, для которой необходимо изменить напоминание;
NewTime - новое время напоминания;

function UpdateRiminding(ContactID, SubjectID, NewTime) {
	if ((IsEmtyValue(ContactID)) || (IsEmtyValue(SubjectID))) {
		ShowInformationDialog('Пустой параметр!');
		return;
	}
	var RimindingQuery = GetSingleItemByCode('sq_Reminding');
	RimindingQuery.Parameters.ItemsByName('ContactID').Value = ContactID;
	RimindingQuery.Parameters.ItemsByName('SubjectID').Value = SubjectID;
	var RemindingDataset = RimindingQuery.Open();
 
	if (IsEOF(RemindingDataset)) {
		return;
	}
	var OldTime = RemindingDataset.ValAsDateTime('RemindTime');
	var RemindingID = RemindingDataset.Values('ID');
	RemindingDataset.Close();
 
	var UpdateQuery = GetSingleItemByCode('up_Temp');
	UpdateQuery.Parameters.ItemsByName('ID').Value = RemindingID;
	UpdateQuery.ColumnsValues.ItemsByName('RemindTime').Value = NewTime;
	UpdateQuery.Execute();
 
}

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

Добрый день!
Вопрос по SQL 2005 оказывается довольно актуальный)
Не могли бы Вы открыть секрет как все же найти там profiler?
Спасибо!

Есть решение, вопрос снимается:twisted:
[quote="Лабьяк Олег Игоревич"]Если у Вас не Express, а более полная версия, то он находится в меню Tools->SQL Server Profiler. Если Express, то бесплатный профайлер, говорили, можно здесь скачать: http://sqlprofiler.googlepages.com/[/quote]

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