Я пытаюсь создать пользовательский модуль, который хранит некоторый текст, который содержит некоторые макросы на основе списка получателей. Список получателей из определенной группы контактов.
У меня есть текстовый редактор с текстом «Hi {% Contact.ContactFirstName%}», который необходимо преобразовать в фактическое имя на основе контакта и сохранить его в таблице.
Сначала я получу электронные письма членов контактной группы и помещу их в массив.
Затем я использовал метод Send (IssueInfo, строка-получатели) и передал электронные письма методу, который разрешил макрос и сохранил его в таблице.
Однако значениями, которые хранятся в таблице, является имя текущего пользователя (который является мной) вместо имени контакта.
Ниже приведен код для получения всех участников в группу контактов.
var members = ContactInfoProvider.GetContacts().WhereIn("ContactID", ContactGroupMemberInfoProvider.GetRelationships().Column("ContactGroupMemberRelatedID").WhereEquals("ContactGroupMemberType", 0).WhereIn("ContactGroupMemberContactGroupID", IssueContactGroupInfoProvider.GetIssueContactGroups().Column("ContactGroupID").WhereEquals("IssueID", issue.IssueID))).WhereNotEmpty("ContactMobilePhone");
foreach (var member in members)
{
email += ValidationHelper.GetString(member.GetValue("ContactEmail"), "") + ";";
}
Вот код для разрешения макроса и для хранения внутри таблицы. Большая часть этого просто из кода модуля Email Marketing.
public void Send(SMSIssueInfo issue, string recipients)
{
if (issue == null)
throw new ArgumentNullException(nameof(issue));
if (string.IsNullOrEmpty(recipients))
throw new ArgumentNullException(nameof(recipients));
SMSInfo newsletterInfo = SMSInfoProvider.GetSMSInfo(issue.IssueSMSID);
if (newsletterInfo == null)
throw new InvalidOperationException("SMS not found.");
SiteInfo siteInfo = SiteInfoProvider.GetSiteInfo(newsletterInfo.SMSSiteID);
if (siteInfo == null)
throw new InvalidOperationException("SMS site not found.");
string[] strArray = recipients.Split(new char[1]
{
';'
}, StringSplitOptions.RemoveEmptyEntries);
SMSTemplateInfo SMSTemplate = SMSTemplateInfoProvider.GetSMSTemplateInfo(issue.IssueTemplateID);
foreach (string smsrecipients in strArray)
{
string str = "";
str = GetEmailBody(issue, newsletterInfo, SMSTemplate, null, false, siteInfo.SiteName, null, null, null);
SMSIssueHelper issueHelper = new SMSIssueHelper();
if (issueHelper.LoadDynamicFields(null, newsletterInfo, null, issue, true, siteInfo.SiteName, null, null, null))
{
//.Subject = issueHelper.ResolveDynamicFieldMacros(message.Subject, newsletterInfo, issue);
str = issueHelper.ResolveDynamicFieldMacros(str, newsletterInfo, issue);
}
string absolute = LinkConverter.ConvertToAbsolute(str, SMSIssueHelper.GetNewsletterLinksBaseUrl(newsletterInfo, siteInfo));
var contacts = ContactInfoProvider.GetContactInfo(smsrecipients);
SMSQueueInfo smsQueue = new SMSQueueInfo();
smsQueue.SmsLastModified = DateTime.Now;
smsQueue.SmsScheduledSendTime = DateTime.Now;
smsQueue.SmsTo = contacts.ContactMobilePhone;
smsQueue.SetValue("SmsSubject", ValidationHelper.GetString(issue.GetValue("IssueSubject"), ""));
smsQueue.SetValue("SmsBody", str);
smsQueue.SetValue("SmsSiteID", ValidationHelper.GetString(issue.GetValue("IssueSiteID"), ""));
smsQueue.SetValue("SmsCreated", DateTime.Now);
smsQueue.SetValue("SmsIsScheduled", 0);
smsQueue.SetValue("SmsIssueID", ValidationHelper.GetString(issue.GetValue("IssueID"), ""));
smsQueue.SetValue("SmsClientID", ValidationHelper.GetString(contacts.GetValue("ContactClientID"), ""));
smsQueue.SetValue("SmsClientName", ValidationHelper.GetString(issue.GetValue("ContactFirstName"), ""));
smsQueue.SetValue("SmsSenderID", MembershipContext.AuthenticatedUser.UserID);
smsQueue.SetValue("SmsKey", ValidationHelper.GetString(newsletterInfo.GetValue("SMSKey"), ""));
smsQueue.SetValue("SmsFrom", ValidationHelper.GetString(newsletterInfo.GetValue("SMSSenderNumber"), ""));
smsQueue.SetValue("SmsClientName", ValidationHelper.GetString(contacts.GetValue("ContactFirstName"), ""));
smsQueue.SetValue("SmsStatus", 0);
SMSQueueInfoProvider.SetSMSQueueInfo(smsQueue);
}
}
Ожидаемым результатом будет имя контакта, который находится в группе контактов, например «Привет, Джон», а не пользователь, который нажал кнопку «Сохранить».
Я нахожусь на Kentico 10.0.42.