【发布时间】:2019-05-10 01:42:15
【问题描述】:
我正在尝试创建一个自定义模块,该模块存储一些包含基于收件人列表的宏的文本。收件人列表来自特定的联系人组。
我有一个富文本编辑器,其中包含文本“Hi {%Contact.ContactFirstName%}”,需要根据联系人将其转换为实际名字并将其存储在表格中。
首先,我将获取联系人组成员的电子邮件并将其放入数组中。
然后,我使用了 Send(IssueInfo issue, string recipients) 方法并将电子邮件传递给该方法,解析宏并将其存储在表中。
但是,存储在表中的值是当前用户(即我自己)的名字,而不是联系人的名字。
以下是获取联系人组中所有成员的代码。
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"), "") + ";";
}
这是解析宏并存储在表中的代码。其中大部分来自电子邮件营销模块代码。
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);
}
}
预期结果将是联系人组中联系人的名字,例如“Hi John”,而不是单击“保存”按钮的用户。
我在 Kentico 10.0.42 上。
【问题讨论】:
-
issueHelper 怎么会知道有关联系人的任何信息?换句话说,我认为宏解析器不知道联系人上下文。或者它使用 Kentico 为您的帐户创建的当前联系人。
-
对我必须做什么有什么建议吗?