Здравствуйте.
Мне необходимо, чтобы после нажатия на кнопку Добавить на деталях или разделе Активности, система автоматически сохраняла задачу.
В карточке задачи я написала код:
if(IsNew){Page.DataSource.ActiveRow.SetColumnValue("Title", zagolovok);
Page.DataSource.ActiveRow.Save(); }
return true;
Благодаря которому происходит сохранение. НО, если пользователь сделал изменения и нажимает на кнопку Ок, то система выводит предупреждение о том, что задача с таким айди уже существует и при этом не сохраняет эти изменения.
Мне же нужно, чтобы после автоматического сохранения и нажатия на кнопку Ок, такой ошибки не возникало и в системе сохранялись изменения.
Подскажите, пожалуйста, каким образом мне этого добиться?
Нравится
Здравствуйте, Антонина!
Вы можете по нажатию на ОК делать запрос к базе на наличие записи с идентификатором активности и в случае количества больше нуля просто закрывать карточку.
Андрей, а какая функция или сигнал закрывает карточку?
Здравствуйте, Антонина!
Попробуйте вот так:
[csharp]
Page.AddScript("window.close();");
[/csharp]
Андрей, я думаю, что такой вариант не подойдет, потому что в этом случае не происходит сохранения изменений.
Может есть какая то функция, которая такую карточку сделает !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:
[csharp]
Guid recordId = Page.DataSource.ActiveRow.GetTypedColumnValue("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;
[/csharp]
Сохранить измененное и закрыть:
[csharp]
Page.ScriptManager.AddScript(
"if (" + Page.DataSource.ClientID + ".activeRow.modifiedValues) {"
+ Page.DataSource.ClientID + ".save(); " +
"} else { window.close(); }"
);
NeedTreeGridRefresh = true;
Page.AddScript("window.close();");
return true;
[/csharp]
Здравствуйте, Андрей.
Этот метод вроде бы подходит, но при нажатии кнопки Ок, не происходит сохранение, если уже создана активность.
Антонина, проверил.
Сохранение происходит, просто реестр не обновляется.
Мой алгоритм действий такой:
1. Нажимаю на кнопку добавить активность.
2. Система открывает карточку активности и сохраняет ее автоматически.
3. Меняю заголовок, нажимаю на кнопку Ок.
В этой ситуации сохранения изменений не происходит.
Антонина, я тестировал из раздела.
Выполните пошаговую отладку согласно инструкции и посмотрите, где несостыковка.