我正在使用 Tridion.OutboundEmail.ContentManagement API 来检索和管理联系人详细信息。
检索联系人工作正常,提取 ExtendedDetails 字典也是如此,但关键字 TcmUriCollection 始终为空。
[Test]
public void GetContacts_via_address_book()
{
var uri = new TcmUri(101, 2, TcmItemTypes.StaticAddressBook);
var addressBook = new StaticAddressBook(uri);
var contacts = addressBook.GetContacts();
foreach (var contact in contacts)
{
var firstName = contact.ExtendedDetails["NAME"].StringValue;
Assert.That(contact.EmailAddress, Is.Not.Empty); // PASS
Assert.That(firstName, Is.Not.Empty); // PASS
Assert.That(contact.Keywords.Count, Is.GreaterThan(0)); // FAIL
}
}
我也试过下面的方法:
[Test]
public void GetContacts_via_filter()
{
var uri = new TcmUri(101, 2, TcmItemTypes.StaticAddressBook);
var addressBook = new StaticAddressBook(uri);
var filter = new ContactFilter(UserContext.Current);
var contacts = Contact.GetContacts(filter, addressBook);
foreach (var contact in contacts)
{
var firstName = contact.ExtendedDetails["NAME"].StringValue;
Assert.That(contact.EmailAddress, Is.Not.Empty); // PASS
Assert.That(firstName, Is.Not.Empty); // PASS
Assert.That(contact.Keywords.Count, Is.GreaterThan(0)); // FAIL
}
}
我什至可以将关键字添加到联系人的关键字集合并保存,它在 Tridion 中正确显示,但是当我再次检索相同的联系人时,该集合再次为空。
有没有人对此 API 有任何经验,和/或知道问题出在哪里?
最佳答案
这是因为在您获取联系人列表时未加载关键字。出于性能原因,只有一部分数据可用。
要解决此问题,您需要重新加载每个联系人。由于联系人是从数据库流式传输的,因此您不能在循环内执行此操作。因此,您需要先构建联系人列表,然后遍历它们并完整加载它们。
有关更多信息和示例,请参阅我关于该主题的博客文章: http://pkjaer.wordpress.com/2011/12/01/looping-through-contacts/
关于c# - 如何使用 Tridion 的出站电子邮件 API 检索联系人的关键字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9687094/