如何使用Tridion的出站电子邮件API检索联系人的关键字?

Jam*_*imm 4 c# tridion

我正在使用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
    }
}
Run Code Online (Sandbox Code Playgroud)

我也试过以下方法:

[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
    }
}
Run Code Online (Sandbox Code Playgroud)

我甚至可以在联系人的关键字集合中添加一个关键字并保存它,并且它在Tridion中正确显示,但是当我再次检索同一个联系人时,该集合再次为空.

有没有人有这个API的经验,和/或知道问题是什么?

Pet*_*aer 6

这是因为当您获得联系人列表时,不会加载关键字.出于性能原因,只有一部分数据可用.

要解决此问题,您需要重新加载每个联系人.由于联系人是从数据库流式传输的,因此您无法在循环内部执行此操作.因此,您首先需要构建联系人列表,然后循环遍历它们并完整加载它们.

有关更多信息和示例,请参阅我关于该主题的博客文章:http: //pkjaer.wordpress.com/2011/12/01/looping-through-contacts/