Как в подписи указать Исполнителя - Текущего пользователя?

Добрый день.

В E-mail активностях заложена константа - общая подпись службы технической поддержки:
Activity:

Вопрос: подскажите, пожалуйста, как перед этой общей подписью указать исполнителя, который является текущим пользователем системы (т.е. того, что создает эту е-мейл активность) ?

Нравится

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

Здравствуйте, Татьяна!
Как вариант, Вы можете реализовать что-то типа макросов для этой цели. То есть, на уровне объекта Вы вставляете в значение тела по-умолчанию "[#CurrentUserName#]", а на странице E-mail на PageLoadComplete заменяете этот макрос на нужное значение с помощью String.Replace.

Добрый день. Не поняла.

Татьяна, уточните, что именно непонятно.

Добрый день На уровне объекта "Активность" я вставила в значение HtmlBody константу (по-умолчанию): "[#CurrentUserName#]". При опубликовании Система выдала ошибку:

Татьяна, уберите кавычки, чтобы было так:

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

Добрый день
Для обработки макроса: используем String.Replace (а, в)
а - это наша [#CurrentUserName#]
в - новая строка, здесь нужно ФИО пользователя.
Подскажите, как вытащить ФИО пользователя (того, кто создал е-мейл активность)?

Здравствуйте, Татьяна!

Guid contactId = UserConnection.CurrentUser.ContactId; //id контакта текущего пользователя
string contactName = UserConnection.CurrentUser.ContactName; //имя контакта текущего пользователя

Добрый день
т.е. получается так:
String.Replace ([#CurrentUserName#], contactName)

?

Добрый день!
Первый параметр должен быть строкой, то есть:

String.Replace("[#CurrentUserName#]", contactName);

Добрый день
На уровне объекта Активность вставила в значение НТМЛ-тела контанту по-умолчанию :[#CurrentUserName#],
В карточке е-мейл в PageLoadCompleteAfterParentScript написала:

Guid contactId = UserConnection.CurrentUser.ContactId; //id контакта текущего пользователя
string contactName = UserConnection.CurrentUser.ContactName; //имя контакта текущего пользователя
String.Replace("[#CurrentUserName#]", contactName);

При опубликовании система выдала ошибку:

Здравствуйте, Татьяна!
Как написано в сообщении об ошибке, String.Replace - нестатический метод, поэтому его вызов должен быть связан с экземпляром класса String. То есть,

string s = "my string";
s = s.Replace("my", "your");

Применительно к данной ситуации можно попробовать так:

string s = Page.BodyEdit.Text;
Page.BodyEdit.Text = string.Empty;
s = s.Replace("[#CurrentUserName#]", contactName);
Page.BodyEdit.InsertText(s);

Добрый день
В константе HTMLBody объекта Активность написала [#CurrentUserName#].
В процессе Карточки Е-мейл в PageLoadCompleteAfterParentScript написала:
Guid contactId = UserConnection.CurrentUser.ContactId; //id контакта текущего пользователя
string contactName = UserConnection.CurrentUser.ContactName; //имя контакта текущего пользователя
string s = Page.BodyEdit.Text;
Page.BodyEdit.Text = string.Empty;
s = s.Replace("[#CurrentUserName#]", contactName);
Page.BodyEdit.InsertText(s);

Опубликовалось без ошибок. Создаю новую е-мейл - ничего не изменилось, в теле письма выводится [#CurrentUserName#].

Точно нужно прописывать это в PageLoadCompleteAfterParentScript ?

Добрый день, Татьяна!
Прописывать необходимо в обработчике события PageLoadComplete, например, в скрипт-таске EnableSendButton. Рабочий вариант:

string contactName = UserConnection.CurrentUser.ContactName;
string s = Page.DataSource.ActiveRow.GetTypedColumnValue<string>("HtmlBody");
s = s.Replace("[#CurrentUserName#]", contactName);
Page.DataSource.ActiveRow.SetColumnValue("HtmlBody", s);
Page.BodyEdit.Text = s;

С уважением,
Великоиваненко Вадим

Добрый день. Хочу подставить должность текущего пользователя в подписи Е-мейл, для этого:
1) на уровне объекта Активность создала константу [#DolUserName#].
2) В процессе Карточки Е-мейл в скрипт-таске EnableSendButton написала:

string contactdol = UserConnection.CurrentUser.ContactJobTitle;
string d = Page.DataSource.ActiveRow.GetTypedColumnValue("HtmlBody");
d = s.Replace("[#DolUserName#]", contactdol);
Page.DataSource.ActiveRow.SetColumnValue("HtmlBody", d);
Page.BodyEdit.Text = d;

При компиляции появилась ошибка:

Подскажите, пжста, как избежать этой ошибки?

У UserConnection.CurrentUser нет такого свойства ContactJobTitle.
Чтобы вычислить должность текущего пользователя, считайте его ContactId:

Guid contactId = UserConnection.CurrentUser.ContactId

а затем при помощи функции вычитайте значение этого поля из контакта:

String contactdol = Terrasoft.Configuration.CommonUtilities.GetEntityTypedColumnValue<String>(UserConnection, "Contact", "JobTitle", ContactId;

Добрый день
В процессе Карточки Е-мейл в скрипт-таске EnableSendButton написала:

Guid contactId = UserConnection.CurrentUser.ContactId;
String contactdol = Terrasoft.Configuration.CommonUtilities.GetEntityTypedColumnValue(UserConnection, "Contact", "JobTitle", ContactId);
string d = Page.DataSource.ActiveRow.GetTypedColumnValue("HtmlBody");
d = s.Replace("[#DolUserName#]", contactdol);
Page.DataSource.ActiveRow.SetColumnValue("HtmlBody", d);
Page.BodyEdit.Text = d;

При компиляции система выдала ошибку:

ContactId в одном месте с большой буквы, а в другом — с маленькой.

спасибо, получилось

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

Guid ContId = UserConnection.CurrentUser.ContactId;
string contactmail = Terrasoft.Configuration.CommonUtilities.GetEntityTypedColumnValue(UserConnection, "Contact", "Email", ContId);
string m = Page.DataSource.ActiveRow.GetTypedColumnValue("HtmlBody");
m = s.Replace("[#MailUserName#]", contactmail);
Page.DataSource.ActiveRow.SetColumnValue("HtmlBody", m);
Page.BodyEdit.Text = m;

В итоге: у меня компилируется без ошибок. Но в самой подписи не происходит замена [#DolUserName#] на должность, а вместо [#MailUserName#] выводится эл.адрес пользователя. Если я закомментирую вышенаписанное , то все ок - вместо [#DolUserName#] выводится должность пользователя.
В чем моя ошибка, подскажите, пжста. Заранее спасибо

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

Полный текст:
В процессе Карточки Е-мейл в скрипт-таске EnableSendButton написала:

Guid СontactId = UserConnection.CurrentUser.ContactId;
String contactdol = Terrasoft.Configuration.CommonUtilities.GetEntityTypedColumnValue(UserConnection, "Contact", "JobTitle", ContactId);
string d = Page.DataSource.ActiveRow.GetTypedColumnValue("HtmlBody");
d = s.Replace("[#DolUserName#]", contactdol);
Page.DataSource.ActiveRow.SetColumnValue("HtmlBody", d);
Page.BodyEdit.Text = d;

Guid ContId = UserConnection.CurrentUser.ContactId;
string contactmail = Terrasoft.Configuration.CommonUtilities.GetEntityTypedColumnValue(UserConnection, "Contact", "Email", ContId);
string m = Page.DataSource.ActiveRow.GetTypedColumnValue("HtmlBody");
m = s.Replace("[#MailUserName#]", contactmail);
Page.DataSource.ActiveRow.SetColumnValue("HtmlBody", m);
Page.BodyEdit.Text = m;

В итоге: у меня компилируется без ошибок. Но в самой подписи не происходит замена [#DolUserName#] на должность, а вместо [#MailUserName#] выводится эл.адрес пользователя. Если я закомментирую вышенаписанное , то все ок - вместо [#DolUserName#] выводится должность пользователя.
В чем моя ошибка, подскажите, пжста. Заранее спасибо

Не записывайте и считывайте 2 раза, а считайте, вычислите d, затем m на основе d и запишите.

А как вычислить m на основе d ?

d = s.Replace("[#DolUserName#]", contactdol);
m = d.Replace("[#MailUserName#]", contactmail);

Спасибо, все получилось

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