我正在使用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有过任何经验,并且/或者知道问题是什么?
答案 0 :(得分:6)
这是因为当您获得联系人列表时,不会加载关键字。出于性能原因,只有一部分数据可用。
要解决此问题,您需要重新加载每个联系人。由于联系人是从数据库流式传输的,因此您无法在循环内部执行此操作。因此,您需要首先构建联系人列表,然后循环遍历它们并完全加载它们。
有关更多信息和示例,请参阅我关于此主题的博文: http://pkjaer.wordpress.com/2011/12/01/looping-through-contacts/