Здравствуйте.
Мне необходимо, чтобы после нажатия на кнопку Добавить на деталях или разделе Активности, система автоматически сохраняла задачу.
В карточке задачи я написала код:
if(IsNew){Page.DataSource.ActiveRow.SetColumnValue("Title", zagolovok);
Page.DataSource.ActiveRow.Save(); }
return true;
Благодаря которому происходит сохранение. НО, если пользователь сделал изменения и нажимает на кнопку Ок, то система выводит предупреждение о том, что задача с таким айди уже существует и при этом не сохраняет эти изменения.
Мне же нужно, чтобы после автоматического сохранения и нажатия на кнопку Ок, такой ошибки не возникало и в системе сохранялись изменения.
Подскажите, пожалуйста, каким образом мне этого добиться?
Нравится
Здравствуйте, Антонина!
Вы можете по нажатию на ОК делать запрос к базе на наличие записи с идентификатором активности и в случае количества больше нуля просто закрывать карточку.
Андрей, а какая функция или сигнал закрывает карточку?
Здравствуйте, Антонина!
Попробуйте вот так:
Page.AddScript("window.close();");
Андрей, я думаю, что такой вариант не подойдет, потому что в этом случае не происходит сохранения изменений.
Может есть какая то функция, которая такую карточку сделает !IsNew ?
Здравствуйте, Антонина!
Да, есть такой параметр.
Попробуйте, например, на PageLoadComplete установить значение параметра IsEdit = true, а IsNew = false в случае, если заголовок заполнен.
Андрей, попробовала сделать так. Но все равно при сохранении вылазит ошибка, что задача с таким айди уже существует.
Какие есть еще варианты?
Может быть закрывать и открывать тут же заново карточку? Такая функция есть?
Здравствуйте, Антонина.
Предлагаю сделать следующим образом.
Необходимо модифицировать обработчик события OkButtonClick в процессе страницы карточки.
1) Добавить параметр логического типа (назовем его IsExist).
2) Перед отправкой в родительский процесс выполним проверку на наличие записей с текущим идентификатором записи в базе данных с помощью EntitySchemaQuery.
3) Если есть, то просто будем сохранять измененые данные и закрывать это окно, а если нет - то уходить в родительский процесс.
Выглядит это так:
[URL=http://fastpic.ru/][IMG]http://i57.fastpic.ru/big/2015/0313/7b/7e04d4fb…]
Проверка, есть ли запись с текущим Id:
Guid recordId = Page.DataSource.ActiveRow.GetTypedColumnValue<Guid>("Id"); var entitySchemaManager = Page.UserConnection.GetSchemaManager("EntitySchemaManager") as EntitySchemaManager; var entitySchemaQuery = new EntitySchemaQuery(entitySchemaManager, "Activity"); entitySchemaQuery.AddColumn ("Id"); var filter = entitySchemaQuery.CreateFilterWithParameters(FilterComparisonType.Equal, "Id", recordId); var queryResult = entitySchemaQuery.GetEntityCollection(Page.UserConnection); if (queryResult.Count > 0) { IsExist = true; } else IsExist = false; return true;
Сохранить измененное и закрыть:
Page.ScriptManager.AddScript( "if (" + Page.DataSource.ClientID + ".activeRow.modifiedValues) {" + Page.DataSource.ClientID + ".save(); " + "} else { window.close(); }" ); NeedTreeGridRefresh = true; Page.AddScript("window.close();"); return true;
Здравствуйте, Андрей.
Этот метод вроде бы подходит, но при нажатии кнопки Ок, не происходит сохранение, если уже создана активность.
Антонина, проверил.
Сохранение происходит, просто реестр не обновляется.
Мой алгоритм действий такой:
1. Нажимаю на кнопку добавить активность.
2. Система открывает карточку активности и сохраняет ее автоматически.
3. Меняю заголовок, нажимаю на кнопку Ок.
В этой ситуации сохранения изменений не происходит.
Антонина, я тестировал из раздела.
Выполните пошаговую отладку согласно инструкции и посмотрите, где несостыковка.