You are correct—the "Ignore Additional Registrations" checkbox will make sure that nothing happens in case an existing outcome is attempted to be registered again.
Here's an excerpt from the decompiled class Sitecore.Analytics.Outcome.OutcomeManager
:
public virtual void Save(IOutcome outcome)
{
if (!this.CanSaveOutcome(outcome))
{
return;
}
this.repository.Save(outcome);
}
private bool CanSaveOutcome(IOutcome outcome)
{
IDefinitionManager<IOutcomeDefinition> definitionManager =
DefinitionManagerFactory.Default.GetDefinitionManager<IOutcomeDefinition>(null);
IOutcomeDefinition outcomeDefinition =
definitionManager.Get(outcome.DefinitionId, CultureInfo.InvariantCulture);
return
outcomeDefinition == null
|| !outcomeDefinition.AdditionalRegistrationsAreIgnored
|| !this.HasOutcome(outcome.EntityId, outcome.DefinitionId);
}
As you can see, OutcomeManager.Save()
will only register the outcome if the checkbox "Ignore Additional Registrations" is unchecked, or if the outcome has not been registered yet.
As a side note, it's quite interesting that the outcome will be saved successfully even if you specify a non-existing outcome definition ID in outcome.DefinitionId
.