Здравствуйте!
Хочу автоматический изменять напоминания по определенной задачи для ответственного,
Некоторые строчки из моего кода:
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();
у меня никак не получается нормально фильтровать записи, чтобы найти напоминание связанное с ответственным по задаче и внести изменения в расписание напоминания,
буду рад любой помощи, особенно был бы признателен за примеры.
С уважением Марат Мамажанов.
Нравится
Вы применяете фильтр по полю ID(я так понимаю ID записи напоминания), а следует по полю контакта ContactID.
В случаи с 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);
}
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, который идет при включении фильтра?
Функция, которая будет обновлять конкретное напоминание.
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(); }
пример запроса в файле.
Есть решение, вопрос снимается:twisted:
[quote="Лабьяк Олег Игоревич"]Если у Вас не Express, а более полная версия, то он находится в меню Tools->SQL Server Profiler. Если Express, то бесплатный профайлер, говорили, можно здесь скачать: http://sqlprofiler.googlepages.com/[/quote]