Вопрос

Автосохранение карточки

Здравствуйте.
Мне необходимо, чтобы после нажатия на кнопку Добавить на деталях или разделе Активности, система автоматически сохраняла задачу.
В карточке задачи я написала код:
if(IsNew){Page.DataSource.ActiveRow.SetColumnValue("Title", zagolovok);
Page.DataSource.ActiveRow.Save(); }
return true;

Благодаря которому происходит сохранение. НО, если пользователь сделал изменения и нажимает на кнопку Ок, то система выводит предупреждение о том, что задача с таким айди уже существует и при этом не сохраняет эти изменения.

Мне же нужно, чтобы после автоматического сохранения и нажатия на кнопку Ок, такой ошибки не возникало и в системе сохранялись изменения.
Подскажите, пожалуйста, каким образом мне этого добиться?

Нравится

11 комментариев

Здравствуйте, Антонина!

Вы можете по нажатию на ОК делать запрос к базе на наличие записи с идентификатором активности и в случае количества больше нуля просто закрывать карточку.

Андрей, а какая функция или сигнал закрывает карточку?

Здравствуйте, Антонина!

Попробуйте вот так:

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. Меняю заголовок, нажимаю на кнопку Ок.
В этой ситуации сохранения изменений не происходит.

Антонина, я тестировал из раздела.

Выполните пошаговую отладку согласно инструкции и посмотрите, где несостыковка.

Показать все комментарии