Запрет сохранения записи

Здравствуйте!
Подскажите, пожалуйста, как можно реализовать следующий функционал. Хочу при сохранении записи делать проверку и при определенных условиях не давать сохранять запись и выводить сообщение. Так вот для этого я в событие "Перед сохранением" моего объекта написал скрипт с моей проверкой и возвращал в нем false если не хотел сохранять запись. Но запись все равно сохраняется. Подскажите, пожалуйста что можно сделать чтобы это заработало и как еще вывести в MessagePanel сообщение о причинах при которых эта запись не сохраняется(аналог указан на картинке). Спасибо!

Нравится

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

Может вру, но вот в тройке я возвращаю true, чтобы запись не сохранялась, может и в BPM 5.х также!?
А на счет MessagePanel почитайте тут

Здравствуйте, Павел!
Можно добавить проверки в обработчик нажатия кнопки "ОК" и устанавливать булевский параметр в false, если проверка не прошла. А после Вашего скрипта ставить условный поток, который будет идти дальше в зависимости от параметра.

Можно повесить проверку на нажатие кнопки ОК.
OKBtnClick

В нижнем блоке:

Page.BaseMessagePanel.AddMessage(Warning, MyTextOfMessage, MessageType.Warning);
return true;

Спасибо! Помогло)

Добрый день, возникла похожая задача, но связанная с удалением.
Попытка отредактировать событие на стандартной кнопке удалить, не получилось, в любом случае происходит удаление. Пришлось создать свою кнопку, и скрыть стандартную.
Вот процесс который НЕ работает на стандартной кнопке, но работает на моей добавленной.

Вопрос: как это реализовать через стандартную кнопку?

ScriptTask2:

var AccountAddressCLADR =  UserConnection.EntitySchemaManager.GetInstanceByName("AccountAddressCLADR");
var entity = AccountAddressCLADR.CreateEntity(UserConnection);
var contactId = Page.DataSource.ActiveRowPrimaryColumnValue;
if(contactId == Guid.Empty ){
	Page.ThrowEvent("SaveContactNeeded");
	return true;
}
IsCanDelete = true;
if (entity.FetchFromDB(contactId)) {
 IsCanDelete = !entity.GetTypedColumnValue("ByDefault");
}
return true;

ScriptTask1:

string warningMessageId = "SomeMessageId";
string errorMessage = "Нельзя удалить адрес с установленным признаком <По умолчанию>";
MessagePanel messagePanel = ControlUtilities.FindControl(
                Page.AspPage.Controls[0], "BaseMessagePanel", true) as MessagePanel;
if (messagePanel != null) {
                messagePanel.Remove(warningMessageId);
                messagePanel.AddMessage(warningMessageId, Warning, errorMessage, MessageType.Warning);
}
return true;

На стандартную кнопку навешивается js-обработчик, см. в функции ScriptRegisterClientScriptExecute, унаследованной из BaseGridPage.

	public virtual bool ScriptRegisterClientScriptExecute(ProcessExecutingContext context) {
			string formatString = "{0}.on('click', function(el) {{ {1} }}, this)";
string script = GetRegisterQuestionScript();
if (!string.IsNullOrEmpty(script)) {	
	Page.AddScript(string.Format(formatString, Page.DeleteButton.ClientID, script));
}
...

Чтобы его отключить, можно в функции GetRegisterQuestionScript в своей странице написать вначале

return string.Empty; 

вместо логики.

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