ОШИБКА ПО УМОЛЧАНИЮ ОБРАТНЫЙ ПЕРЕЗВОНОК на JayData

Когда я добавляю или сохраняю некоторые данные об использовании JayData и SQL Lite Provider (в разрыве телефона). Я получаю следующую ошибку:

DefaultError: ОШИБКА ПО УМОЛЧАНИЮ!

Данные об исключении: Аргументы [1] 0: код SQLError: 0 сообщение: «обратный вызов оператора вызвал исключение или обратный вызов ошибки оператора не возвратил false» proto: SQLError ...... длина: 1 прототип: стек получения объекта: функция () { [собственный код] } сообщение: "ОШИБКА ПО УМОЛЧАНИЮ ОБРАТНЫЙ ВЫЗОВ!" имя: «DefaultError» set stack: function () { [native code] } proto: Object jaydata.min.js:53 Guard.raise jaydata.min.js:53 Uncaught DefaultError: DEFAULT ERROR CALLBACK !

Однако запись добавляется/обновляется нормально. Понятия не имею, в чем может быть проблема... есть идеи?

Код:

//Entities:
var Task = $data.Entity.extend("$org.types.Task", {
    Id: { type: "int", key: true },
    TaskType: { type: String, required: false },
    StatusId: { type: "int", required: false },
    DateScheduled:  { type: Date, required: false },
    TimeSlot:  { type: String, required: false },
    LastUpdated:  { type: Date,required: false },
    TaskName:  { type: String, required: false },    
    SpecialInstructions:  { type: String},
    PropertyAddress:  { type: String, required: false },
    PropertyPostCode:  { type: String, required: false },
    PropertyType:  { type: String, required: false },
    NumberOfBedrooms:  { type: "int", required: false },
    HasGarage:  { type: Boolean, required: false },
    HasOutHouse:  { type: Boolean, required: false },
    IsReadyForReportGeneration: {type: Boolean},
    TaskStatus: {type: String},
    DateOfTaskDisplayName: {type: String}
});

//inside a look etc:

taskToUpdate.TaskType = task.TaskType;
                        taskToUpdate.StatusId = task.TaskStatusId;
                        taskToUpdate.TaskStatus = task.TaskStatus;
                        taskToUpdate.DateScheduled = task.Date;
                        taskToUpdate.TimeSlot = task.Time;
                        taskToUpdate.LastUpdated = new Date();
                        taskToUpdate.TaskName = "Job " + task.TaskId + " " + task.TaskType + " @" + task.AddressOfTask + ", " + task.PropertyPostCode;
                        taskToUpdate.SpecialInstructions = specialInstructions;
                        taskToUpdate.PropertyAddress = task.AddressOfTask;
                        taskToUpdate.PropertyPostCode = task.PropertyPostCode;
                        taskToUpdate.PropertyType = task.PropertyType;
                        taskToUpdate.NumberOfBedrooms = task.NumberOfBedrooms;
                        taskToUpdate.HasGarage = task.HasGarage;
                        taskToUpdate.HasOutHouse = task.HasOutHouse;
                        taskToUpdate.DateOfTaskDisplayName = task.DateOfTaskDisplayName,
                        taskToUpdate.IsReadyForReportGeneration = task.ReportReady;

                        if (result.length == 0) {
                            $org.context.Task.add(taskToUpdate);
                        }

                        rowsProcessed++;

                        if (rowsProcessed == rowsToProcess) {
                            $org.context.saveChanges({
                                success: function(db) {
                                    viewModel.messages.push({message:"Tasks saved to local device."});
                                    showNotificationInfo("Tasks saved to local device.");
                                    hideLoader();
                                }, error: function(err) {
                                    console.log(err);
                                    viewModel.messages.push({message:"Errors saving tasks: " + err});
                                    showNotificationError("Errors saving tasks: " + err);   
                                    hideLoader();
                                }
                            });  
                        }

person Dave Stringer    schedule 15.10.2013    source источник
comment
как вы создаете экземпляр taskToUpdate ?   -  person Gabor Dolla    schedule 15.10.2013
comment
С attachOrGet... забавно, раньше он работал нормально, пока я не изменил какое-то определение таблицы. Я также попытался использовать параметр dropAllTables, чтобы проверить, не возникла ли проблема с изменением модели.   -  person Dave Stringer    schedule 16.10.2013
comment
добавление calculated=true к определению идентификатора поможет убедиться, что у вас есть уникальные значения. это меняет поведение?   -  person Robesz    schedule 16.10.2013
comment
Идентификатор не вычисляется... данные фактически поступают с сервера (задачи хранятся/синхронизируются локально), поэтому идентификаторы всегда уникальны (идентификатор сервера - это столбец идентификаторов).   -  person Dave Stringer    schedule 16.10.2013


Ответы (2)


Кажется, проблема возникает из-за того, что у вас нет набора идентификаторов на случай, если вы добавите новую запись. Исправить это легко:

if (result.length == 0) {
  taskToUpdate.Id = task.Id;
  $org.context.Task.add(taskToUpdate);
}
person Robesz    schedule 25.10.2013
comment
Извините, нужно было добавить эту строку кода: var taskToUpdate = $org.context.Task.attachOrGet({ Id:task.TaskId}); - person Dave Stringer; 29.10.2013

ПРАВИЛЬНО Оказалось, что я вызывал метод --logInfo(message), который также вызывал context.savechanges().

Вызывая это с сообщением о создании журнала, это вызывало ошибку ... однако все данные были сохранены в порядке, поэтому я все еще немного не уверен, что на самом деле происходит ...

Теперь я убедился, что savechanges() вызывается только после того, как вся работа выполнена, и вызывается только один раз...

Спасибо, что помогаете людям...

person Dave Stringer    schedule 31.10.2013