Создать кнопку "Переслать"

Добрый день
Подскажите, пожалуйста, как создать кнопку "Переслать" в реестре активностей, которая стояла бы на одному ряду с кнопками Добавить, Копировать,Изменить,Удалить ?

Нравится

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

И чтобы при нажатии на эту кнопку появлялась новая е-мейл-активность

И чтобы при нажатии на эту кнопку появлялась новая е-мейл-активность

Как создать кнопку "Переслать" в реестре активностей - это я сделала. Подскажите, как при нажатии на эту кнопку сделать так, чтобы появлялась новая е-мейл-активность с параметрами "старой" ?

Добрый день.
Создала кнопку "Переслать" непосредственно на странице карточки e-mail, обработчик:

все опубликовалось без ошибок. Но при нажатии на кнопку "Переслать" новое окно е-мейл активности не создается. Подскажите, почему?

попробовала написать скрипт по-другому, опубликовывает без ошибок, но карточке е-мейл активности не открывается. В чем моя ошибка?

var defValuesId = Guid.NewGuid();
var defValues = new Dictionary ();
defValues.Add("Contact", Page.ContactEdit.Value.ToString());
defValues.Add("Account", Page.AccountEdit.Value.ToString());
defValues.Add("CopyRecepient", Page.CopyRecepientEdit.Value.ToString());
defValues.Add("Recepient", Page.SenderEdit.Value.ToString());
defValues.Add("Body", Page.BodyEdit.Value.ToString());

var ActivityId = Guid.NewGuid();

UserConnection.SessionData[defValuesId.ToString()] = defValues;
var parameters =
new Dictionary {
{"createWithUId", ActivityId.ToString()},
{"entitySchemaUId", "C449D832-A4CC-4B01-B9D5-8A12C42A9F89"},
{"defValuesId", defValuesId.ToString()}
};
OpenTaskEditPage.OpenerInstanceId = InstanceUId;
OpenTaskEditPage.UseCurrentActivePage = true;

OpenTaskEditPage.PageUId = new Guid("dcdda065-321b-4560-aacb-05f6cc72cd80");
OpenTaskEditPage.PageParameters = parameters ;
return true;

Возможно, дело в формате объекта defValues.
Обычно он такого типа:

var defValues = new Dictionary <string, object>();
defValues["SysAdminUnitType"] = SysAdminUnitTypeId;

Записывается не строка, а значение типа Guid.

Если же дело не в этом, попробуйте провести отладку и посмотреть, как отрабатывает OpenPageUserTask.

я за основу брала : http://www.community.terrasoft.ru/forum/topic/9208
мне же не нужно создавать инцидент, генерировать номер для активности не нужно. Достаточно ли будет сигнала нажатия на кнопку "Переслать" и скрипта по открытию окна е-мейл активности?

пишу в этом скрипте:
var defValuesId = Guid.NewGuid();
var defValues = new Dictionary ();

defValues.Add("Contact", Page.ContactEdit.Value.ToString());
defValues.Add("Account", Page.AccountEdit.Value.ToString());
defValues.Add("CopyRecepient", Page.CopyRecepientEdit.Value.ToString());
defValues.Add("Recepient", Page.SenderEdit.Value.ToString());
defValues.Add("Body", Page.BodyEdit.Value.ToString());

var ActivityId = Guid.NewGuid();

UserConnection.SessionData[defValuesId.ToString()] = defValues;
var parameters =
new Dictionary {
{"createWithUId", ActivityId.ToString()},
{"entitySchemaUId", "c449d832-a4cc-4b01-b9d5-8a12c42a9f89"},
{"defValuesId", defValuesId.ToString()}
};
OpenTaskEditPage.OpenerInstanceId = InstanceUId;
OpenTaskEditPage.UseCurrentActivePage = true;

OpenTaskEditPage.PageUId = new Guid("dcdda065-321b-4560-aacb-05f6cc72cd80");
OpenTaskEditPage.PageParameters = parameters ;

return true;

Опубликовывает без ошибок, но рез-та нет: при нажатии на кнопку "переслать" ничего не происходит.

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

"TatianaM" написал:

попробовала написать скрипт по-другому, опубликовывает без ошибок, но карточке е-мейл активности не открывается. В чем моя ошибка?

var defValuesId = Guid.NewGuid();

var defValues = new Dictionary ();

defValues.Add("Contact", Page.ContactEdit.Value.ToString());

defValues.Add("Account", Page.AccountEdit.Value.ToString());

defValues.Add("CopyRecepient", Page.CopyRecepientEdit.Value.ToString());

defValues.Add("Recepient", Page.SenderEdit.Value.ToString());

defValues.Add("Body", Page.BodyEdit.Value.ToString());

var ActivityId = Guid.NewGuid();

UserConnection.SessionData[defValuesId.ToString()] = defValues;

var parameters =

new Dictionary {

{"createWithUId", ActivityId.ToString()},

{"entitySchemaUId", "C449D832-A4CC-4B01-B9D5-8A12C42A9F89"},

{"defValuesId", defValuesId.ToString()}

};

OpenTaskEditPage.OpenerInstanceId = InstanceUId;

OpenTaskEditPage.UseCurrentActivePage = true;

OpenTaskEditPage.PageUId = new Guid("dcdda065-321b-4560-aacb-05f6cc72cd80");

OpenTaskEditPage.PageParameters = parameters ;

return true;

Ваш объект называется OpenTaskEditPage1 а в скрипте OpenTaskEditPage

невнимательность... огромное спасибо.

подскажите, а после создания новой активности, можно ли сделать так, чтобы автоматически "старая" активность закрывалась?

Да, можно.

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

а в каком месте? и какого поля значение?

Это зависит от того, что Вы хотите запрограммировать.

"TatianaM" написал:

подскажите, а после создания новой активности, можно ли сделать так, чтобы автоматически "старая" активность закрывалась?

Попробуйте после скрипта открытия 2й страницы добавить вторую ветку процесса(с помощью элемента "И")
и послать завершающий сигнал( с передачей в родительский процесс) нажатие кнопки Cancel (точно не помню как называется, вроде, CancelButtonClick) или OK

А, так требуется карточку активности закрыть? Думал, что речь о состоянии «Закрыта». Если карточку, то действительно нужно в старой активности после открытия карточки новой вызвать код, как на кнопке закрытия:

(Page.AspPage as Terrasoft.UI.WebControls.Page).Close();

Или же смотрите рекомендации автора предыдущего сообщения.

А если Вам надо после сохранения второй закрывать первую, то тогда сложнее.

Если не получится разобраться, можете заказать такую доработку.

"Зверев Александр" написал:Или же смотрите рекомендации автора предыдущего сообщения.

Сделала по рекомендации, но при нажатии на ОК в новой активности появляется ошибка, и окно активности не закрывается:

Предупреждение
The INSERT statement conflicted with the FOREIGN KEY constraint "FKInijGB83hrW19KtJno3hZK8". The conflict occurred in database "bptest", table "dbo.ChangeRequest", column 'Id'.
The statement has been terminated.

Такое сообщение говорит о том, что Вы неправильно заполнили в сохраняемой записи поле «Запрос на изменение». Смотрите рекомендации другого автора предыдущего сообщения:

"Мария Ватулина" написал:

Если не получится разобраться, можете заказать такую доработку.

"Зверев Александр" написал:Такое сообщение говорит о том, что Вы неправильно заполнили в сохраняемой записи поле «Запрос на изменение»

сама разобралась...

пишу:
defValues.Add("Incident",Page.IncidentEdit.Value.ToString());

но если поле Incident в "старой" е-мейл активности не заполнено, то при нажатии на ОК система выдает ошибку о том, что неправильно заполнили в сохраняемой записи поле "Инцидент".

Тогда делаю проверку на заполнение:
if (Page.IncidentEdit.Value != null)
{defValues.Add("Incident",Page.IncidentEdit.Value.ToString());}
else
{ defValues.Add("Incident","");} - то опубликовывает без ошибок, но не срабатывает при проверке, опять выдает ошибку о неправильно заполненном в сохраняемой записи поле "Инцидент".

Это потому, что Вы непонятно зачем работаете с полем «Инцидент» как с текстовым. А оно справочное. Если в копируемой записи поле не заполнено, то вообще нет смысла из него копировать.

нет, мне нужно его копировать, потому что поле "инцидент" может быть как заполнено, так и не заполнено.
пишу проверку так:

if (new Guid (Page.IncidentEdit.Value.ToString()) != Guid.Empty)
{defValues.Add("Incident",Page.IncidentEdit.Value.ToString());}
else {defValues.Add("Incident","");}

опубликовывает без ошибок, но при открытии новой е-мейл активности система выдает:
Exception Message: Нераспознанный формат идентификатора GUID.

Если оно не заполнено, то что Вы оттуда собираетесь копировать? Просто не заполняйте.

понятно, получилось так:

if (new Guid (Page.IncidentEdit.Value.ToString()) != Guid.Empty)
{defValues.Add("Incident",Page.IncidentEdit.Value.ToString());}

"Зверев Александр" написал:Если карточку, то действительно нужно в старой активности после открытия карточки новой вызвать код, как на кнопке закрытия:
(Page.AspPage as Terrasoft.UI.WebControls.Page).Close();

а как написать, что нужно именно старую активность закрывать?

Код должен выполняться в той карточке, которую надо потом закрыть.

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