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

时间:2012-03-13 15:31:06

标签: 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
    }
}

我也尝试过以下方法:

[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有过任何经验,并且/或者知道问题是什么?

1 个答案:

答案 0 :(得分:6)

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

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

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