I've been following the instructions on how to create custom personalization tokens. After following the instructions everything compiles, and everything seemingly works just fine. I can create a new campaign in EXM and I can send a test mail from "Review". However, the test mail doesn't replace my custom tokens.

Having googled a bit I found this question, which is similar, but not identical. The answer to that question was that the custom facets had not been added to the custom DispatchTask.

My custom facets, however, have been added to my custom DispatchTask, and I know that there's nothing wrong with them as I can read and write to them in XConnect and through Tracker.Current.Contact.

It seems that my CustomDispatchTask class is never executed, which explains why my custom tokens are not replaced.

/sitecore/admin/showconfig.aspx shows that my custom class has indeed been patched in:

<exm>
    <dispatchTask
        type="My.Namespace.CustomTokensDispatchTask, MyAssemblyName"
        patch:source="My.EXM.config">
    .....
    </dispatchTask>
</emx>

But if I try to debug either the constructor or the overridden GetContacts methods, the breakpoints are never hit. I also added some logging to it (in case this code is executed on AppStart where I won't be able to debug fast enough) but those log messages never appear in the log file. There are actually no exceptions or errors in the log files at all.

Why isn't my CustomTokensDispatchTask executed?

CustomTokensDispatchTask.cs

public class CustomTokensDispatchTask : DispatchTask
{
    private readonly IContactService _contactService;

    public CustomTokensDispatchTask([NotNull] ShortRunningTaskPool taskPool, IRecipientValidator recipientValidator, IContactService contactService, EcmDataProvider dataProvider, ItemUtilExt itemUtil, IEventDataService eventDataService, IDispatchManager dispatchManager, EmailAddressHistoryManager emailAddressHistoryManager, IRecipientManagerFactory recipientManagerFactory, SentMessageManager sentMessageManager)
      : base(taskPool, recipientValidator, contactService, dataProvider, itemUtil, eventDataService, dispatchManager, emailAddressHistoryManager, recipientManagerFactory, sentMessageManager)
    {
        Sitecore.Diagnostics.Log.Info("HELLO CustomTokensDispatchTask", this);
        _contactService = contactService;
    }

    protected override IReadOnlyCollection<IEntityLookupResult<Contact>> GetContacts(List<DispatchQueueItem> dispatchQueueItems)
    {
        Sitecore.Diagnostics.Log.Info("HELLO CustomTokensDispatchTask.GetContacts", this);
        return _contactService.GetContacts(dispatchQueueItems.Select(x => x.ContactIdentifier),
            PersonalInformation.DefaultFacetKey,
            AddressList.DefaultFacetKey,
            EmailAddressList.DefaultFacetKey,
            ConsentInformation.DefaultFacetKey,
            PhoneNumberList.DefaultFacetKey,
            ListSubscriptions.DefaultFacetKey,
            MyCustomFacet.DefaultFacetKey);
    }
}

My.EXM.Config

<?xml version="1.0" encoding="utf-8" ?>
<configuration xmlns:patch="http://www.sitecore.net/xmlconfig/" xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform" xmlns:set="http://www.sitecore.net/xmlconfig/set">
    <sitecore>
        <exm>
            <dispatchTask set:type="My.Namespace.CustomTokensDispatchTask, MyAssemblyName">
            </dispatchTask>
        </exm>
        <recipients>
            <recipientPropertyTokenMap set:type="My.Namespace.CustomTokensTokenMap, MyAssemblyName">
            </recipientPropertyTokenMap>
        </recipients>
    </sitecore> 
</configuration>

Sitecore 9.0.2

  • Can you please update your question @GTHvidsten with content of My.EXM.config? Could be that the problem is with patching. I just want to clarify that. – Peter Prochazka Nov 8 at 12:35
  • Added My.EXM.Config now. As you can see by the excerpt from showconfig.aspx this is indeed patched in correctly. – GTHvidsten Nov 8 at 12:42
  • Yes. As I mentioned using the custom facets in XConnect and through Tracker.Current.Contact works just fine – GTHvidsten Nov 8 at 12:54
  • You aren't in emulation mode right? doc.sitecore.net/email_experience_manager/… – Peter Prochazka Nov 8 at 12:54
  • I have read your question once again. You mentioned there that you are sending test mail. Are you using "Send quick test" functionality for this? doc.sitecore.net/email_experience_manager/… . – Peter Prochazka Nov 8 at 12:55
up vote 3 down vote accepted

Because you are using "Send quick test" functionality, EXM won't hit your dispatch task.

For "Send quick test" functionality DispatchNewsletter pipeline is using SendTestMessage and therefore TestMessageTask is called instead of your custom DispatchTask.

You need to send email campaign only to your "test" contact to hit your custom Dispatch Task

  • If this is the case, how can you make sure that your custom tokens are replaced properly without having to actually send the campaing (or creating a campaign with one user, as suggested, and then having to copy settings from one campaign to the other, or having to reset engagement plans)? (It seems a bit silly to not be able to test custom tokens) – GTHvidsten Nov 8 at 13:09
  • You can use "Preview for recipients" button under Message tab where you edit content of message. Take a look here -> doc.sitecore.net/email_experience_manager/… section "Preview the token for different recipients" – Peter Prochazka Nov 8 at 13:12
  • "Preview for recipients" still doesn't replace my custom tokens with the actual values. – GTHvidsten Nov 8 at 13:14
  • And when you send email campaign? Are you hitting your code? – Peter Prochazka Nov 8 at 13:24
  • I have to draw back my previous statement. Obviously "Preview for recipients" won't call your custom Dispatch Task :) I was too quick with writing it down. But still tokens should be replaced with preview... – Peter Prochazka Nov 8 at 13:27

Your Answer

 

By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

Not the answer you're looking for? Browse other questions tagged or ask your own question.