Использование форм Umbraco для редактирования данных

Я хотел бы использовать Umbraco Forms не только для вставки данных, но и для их редактирования. До сих пор, когда я хочу редактировать запись, я передаю форму guid и идентификатор записи через строку запроса и заполняю правильные данные в полях. Все идет нормально.

Затем я успешно подключаюсь к событию Umbraco.Forms.Data.Storage.RecordStorage.RecordInserting.

void RecordStorage_RecordInserting(object sender, Umbraco.Forms.Core.RecordEventArgs e)
    {
        var ms = (Umbraco.Forms.Data.Storage.RecordStorage)sender;
        if(this record exists){
         ms.UpdateRecord(e.Record, e.Form);
        }
    }

Однако, когда я пытаюсь отправить отредактированную запись, и запускается строка ms.RecordUpdate(e.Record, e.Form), я получаю эту ошибку

The INSERT statement conflicted with the FOREIGN KEY constraint "FK_UFRecordDataString_UFRecordFields_Key". The conflict occurred in database "UmbracoPlay", table "dbo.UFRecordFields", column 'Key'.
The statement has been terminated.

Я не могу удалить старую запись, а затем вставить новую запись, потому что она будет вызывать одно и то же событие каждый раз, когда я вызываю ms.InsertRecord.

Что мне не хватает? Как я могу использовать Umbraco Forms для редактирования существующих данных?


person etoisarobot    schedule 31.08.2015    source источник
comment
Если вы редактируете данные, я не думаю, что вам нужно подключаться к событию вставки. Какую версию Umbraco/Contour вы используете?   -  person Tim    schedule 09.09.2015


Ответы (1)


Я не нашел исправления для этой ошибки — похоже, что метод UpdateRecord на самом деле пытается вставить все объекты UFRecordField во второй раз, а не обновлять существующие значения (или существующие значения полей), что приводит к этому нарушению ключа.

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

    var ms = (Umbraco.Forms.Data.Storage.RecordStorage)sender;
    if(this record exists){
       ms.DeleteRecord(e.Record, e.Form);
       ms.InsertRecord(e.Record, e.Form);
    }

Неопрятное решение, но вроде бы эффективное.

person glenatron    schedule 23.03.2016