значение ID возвращает null, и ApplyDatasetFilter не фильтрует записи нобора данных.
Здравствуйте обитатели форум, пожалуйста прошу помочь мне в следующей проблеме: Когда я пытаюсь вернуть значение Dataset.Values('Dataset.Values('RemindingToOwnerID'); из ds_Task, почему-то возвращается значение null, хотя я пробывал вернуть другие значения этой же таблицы для проверки, вдруг я вообще не стем полем работаю, так все остальные значения данного поля выводятся нормально, как и следует, кроме поля 'RemindingToOwnerID'
данное значение мне нужно для фильтрации другого датасета, по данному значению, к стати так-же у меня не срабатывает ApplyDatasetFilter хотя я туда уже и записал готовое значени поля нужного мне ID, хотя ApplyDatasetIDFilter работает нормально, далее я представлю свой код, для лучшего понимания моей проблемы...
var DataFields = Dataset.DataFields;
var StartDateDataField = DataFields.ItemsByName('StartDate');
var StartDateDataField2 = Dataset.Values('StartDate');
var DueDateDataField = DataFields.ItemsByName('DueDate');
var OwnerIDDataField = DataFields.ItemsByName('OwnerID');
var RemindingToOwnerID1 = Dataset.Values('Title');
var RemindingToOwnerID = Dataset.Values('ID');
// var RemindingToOwnerID = Dataset.Values('RemindingToOwnerID'); // вот оно это самое null значение!!!
var RemindingToOwnerID2 = Dataset.Values('RemindingToOwnerID');
ShowInformationDialog('id нужной записи = {48EE50FD-F61F-4C01-9D01-1CF42AC3880D}'+' заголовок нужной задачи = '+RemindingToOwnerID1+' ID нужной задачи = '+RemindingToOwnerID+' значние поля RemindingToOwnerID нужной задачи ='+RemindingToOwnerID2);
Dataset.Locate('ID', Event.ID);
var PriorStartDate = StartDateDataField.ValAsDateTime;
var PriorDueDate = DueDateDataField.ValAsDateTime;
var ds_Remindings = GetRemindingDataset();
var RemDataFields = ds_Remindings.DataFields;
// Dataset.Open();
// ApplyDatasetFilter(ds_Remindings, 'id',RemindingToOwnerID, true);
var RemStartDateDataField = RemDataFields.ItemsByName('RemindTime');
ds_Remindings.Open();
var RemindingDescription = ds_Remindings.Values('Description');
var RemindingDescription2 = ds_Remindings.Values('RemindTime');
if (!CheckTaskCovering(Dataset, OwnerIDDataField, Event.Start,
Event.Finish)) {
CancelChangeEvent(Event, PriorStartDate, PriorDueDate);
return;
}
var converted = Date.parse(Event.Start) ;
var converted1 = Date.parse(StartDateDataField2) ;
var converted2 = Date.parse(RemindingDescription2) ;
if (Event.Start>StartDateDataField2) {
var conv1 = converted - converted1;
var conv2 = converted2 + conv1;
var someDate = new Date(conv2);
}
if (Event.StartStartDateDataField2) {
var conv1 = converted1-converted;
var conv2 = converted2 - conv1;
var someDate = new Date(conv2);
}
//ds_Remindings.Edit();
//RemStartDateDataField.ValAsDateTime = Event.Start;
//RemStartDateDataField.ValAsDateTime = DateToStr(someDate)+' '+TimeToStr(someDate);
//ds_Remindings.Post();
//ds_Remindings.Close();
//ds_Remindings.Open();
//ApplyDatasetFilter(ds_Remindings, 'id','0000', true);
ds_Remindings.Close();
//ApplyDatasetIDFilter(ds_Remindings,'{48EE50FD-F61F-4C01-9D01-1CF42AC3880D}', true);
ApplyDatasetFilter(ds_Remindings,'id','{48EE50FD-F61F-4C01-9D01-1CF42AC3880D}', true);
ds_Remindings.Open();
//ds_Remindings.Open();
ShowInformationDialog(ds_Remindings.Values('Description')+'hkjhkjh');
//ShowInformationDialog('id нужной записи = {48EE50FD-F61F-4C01-9D01-1CF42AC3880D}'+' Id записи RemindingТoOwnerID = '+RemindingToOwnerID);
//ds_Remindings.Open();
//var RemindingToOwnerID1 = Dataset.Values('RemindingToOwnerID');
//ShowInformationDialog('id нужной записи = {48EE50FD-F61F-4C01-9D01-1CF42AC3880D}'+' значение нужной задачи = '+RemindingToOwnerID1+'====='+RemindingToOwnerID);
Dataset.Edit();
Dataset.ValAsStr('Title') = Event.Caption;
StartDateDataField.ValAsDateTime = Event.Start;
DueDateDataField.ValAsDateTime = Event.Finish;
UpdateDuration(Dataset);
Dataset.Post();
UpdateEventColorsByDatasetRecord(Event, Dataset);
}
Нравится
По-моему RemindingToOwnerID хитрое поле и наличие в нем значения, отличного от пустого еще ни о чем не говорит. Учтите это.
Upd: Предлагаю после нажатия кнопки "Добавить комментарий" дизейблить ее :)
"Мамажанов Марат Кадралдыкович" написал:sql-server 2005
С инсталляцией идет SQl Server Profiler
вы знаете, у меня что-то не совсем получаеться с данной утилитой SQL Server Profiler, но думаю что я правильно обращаюсь к базе и к таблице, просто исходя из того что, другие данные из тойже таблицы и поля, выводяться нормально, т.е. все поля данной зиписи выводятся как и следует, но именно при обращении к данному полю "RemindingToOwnerID" получаеться вот такая вот непонятная ситуация ....
Скажите может ли это быть из-за того что, я пытаюсь присвоить значение уникального идентификатора, может ли в этом крыться ошибка?, т.к. для сравнения пробовал присваивать значения других полей данной записи имеющих отличный тип данных, все выводятся нормально, но как только дело доходить до полей с уникальным идентификатором, то они как мое поле ругаются на то что, значение null...
скажите как в этом случае мне поступить ???
Может быть есть возможность конвертировать значение данного тип в строку?
С уважением Марат Мамажанов.
"Мамажанов Марат Кадралдыкович" написал:конвертировать значение данного тип в строку
Dataset.ValAsStr('FieldName')
вроде еще такое бывает SomeVariable.toString()
а вообще посмотрите для данной записи прямо в таблице значение злополучного поля - оно там значение какое имеет?
ООО "Лайнсервис"
www.ls-crm.ru
Исключая элемент мистики))
var RemindingToOwnerID = Dataset.Values('RemindingToOwnerID');
- а если дебаггером посмотреть что присваивается переменной? если null, тогда смотрим здесь же значение поля Dataset.Values('ID'), потом в базе смотрим, действительно ли там для соответствующей записи поле RemindingToOwnerID имеет значение null или нет еще раз)).
Если нет там null, делаем вывод, что в датасете это поле сначала получает благодаря запросу правильное значение, а потом уже заполняется значением null (благодаря какому-либо скрипту) перед тем, как мы к нему обращаемся
ООО "Лайнсервис"
www.ls-crm.ru
у меня уже были такие предположения, и ID этой же записи уже смотрел, там все нормально, и делал обращения сразу после как присвоил занчение переменной, чтобы исключить возможность изменения данных в других местах скрипта...
даже и не знаю что еще можно попробывать
Если это в карточке происходит, то там идет вызов PrepareRemindControls в wnd_TaskEditOnPrepare и там есть кусок кода
if (!ExistRemindingToOwner){ Dataset.Values('RemindingToOwnerID') = null; }
Т.е. если в таблице поле RemindingToOwnerID не пустое, но напоминание уже удалено, то RemindingToOwnerID сбрасывается в null
"Мамажанов Марат Кадралдыкович" написал:данный скрипт вызыватеться при перетягивании задачи в расписании, может ли при этом происходить то действие, которое Вы описываете ?
а Вы debugger туда впишите в начале функции, вот и узнаем наверняка:smile:
ООО "Лайнсервис"
www.ls-crm.ru
Вы знаете, так ничего у меня и не получилось с этим полем
:sad:
Если не затруднит, может кто-нибудь попробует проделать такое же действие, может получиться что...
Хотя бы просто присвоить значение этого поля и вывести его в сообщении ShowInformationDialog.
Заранее спасибо!
Вы бы сначала с профайлером разобрались. Ато нехорошо просить людей что-то сделать, а самому не попытаться разобраться в такой элементарной вещи. Посмотрите какой запрос. Выполните его QueryAnalizer-ом. Посмотрите там значение поля. И уже от сюда плясать будем.
Кстати убедитесь, что напоминание не удалено из базы. Мне кажется все спецэфекты с этим связаны.