Как получить ключевые слова контакта с помощью API исходящей электронной почты Tridion? - PullRequest
4 голосов
/ 13 марта 2012

Я использую API Tridion.OutboundEmail.ContentManagement для извлечения и управления контактными данными.

Получение контактов работает нормально, равно как и откат словаря 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 Ответ

6 голосов
/ 13 марта 2012

Это потому, что ключевые слова не загружаются, когда вы получаете список контактов.Из соображений производительности доступно только подмножество данных.

Чтобы решить эту проблему, вам потребуется перезагрузить каждый контакт.Поскольку контакты передаются из базы данных, вы не можете сделать это внутри цикла.Поэтому вам нужно сначала создать список контактов, а затем зациклить их и загрузить их полностью.

Для получения дополнительной информации и примеров см. Мой пост в блоге на эту тему: http://pkjaer.wordpress.com/2011/12/01/looping-through-contacts/

...