Sana Assistant (online)
Table of Contents

EntityTemplateFieldReadOnlyEditorExtension reference

This article provides reference material about EntityTemplateFieldReadOnlyEditorExtension class. All entity template field read only editor extensions have to be inherited from the EntityTemplateFieldReadOnlyEditorExtension which, in turn, inherits from the core Sana Commerce Cloud Extension class.

There is also generic class EntityTemplateFieldReadOnlyEditorExtension<TSettings> inherited from EntityTemplateFieldReadOnlyEditorExtension which provides template field read only editor extensions with possibility to use extra settings required to display field value by editor. It takes type inherited from EntityTemplateFieldEditorSettings as a generic type parameter.

EntityTemplateFieldReadOnlyEditorExtension inheritance

Properties

EntityTemplateFieldReadOnlyEditorExtension

FieldType

The field type for which the editor can be used.

public override EntityTemplateFieldType FieldType => EntityTemplateFieldType.DeliveryDate;

Name

The unique name of template field editor among other editors.

public override string Name => "MyDeliveryDateEditorReadOnly";

Title

The field editor title which will be shown in admin.

public override string Title => "My delivery date editor";

Methods

EntityTemplateFieldReadOnlyEditorExtension

Note

All code examples may contain nonexistent methods or properties. They are used as declarations only and should be created if they fit the designed extension or deleted if they do not.

CreateDefaultSettings

Creates default field editor settings.

This method should be used to create editor settings with default values.

public override EntityTemplateFieldEditorSettings CreateDefaultSettings() =>
        new ReadOnlyDeliveryDateTemplateFieldEditorSettings() { LongFormat = true };

FormatValueForDisplayAsync

Formats managed by the field editor value for display.

This method is used by Sana to format read only field value previously managed by editor. External API calls can be made to get extra information required for value formatting, it is better to use MemoryCache with short lifetime for results in this case to prevent extra API calls.

public override ValueTask<string> FormatValueForDisplayAsync(
        object value,
        TemplateFieldEditorSettings settings,
        EntityTemplateFieldDisplayValueFormatContext context)
{
    var date = (DateOnly)value;
    return ValueTask.FromResult(date.ToLongDateString());
}

InitSettings

Initializes the field editor settings with additional data required for field value display.

Check full example with all required classes

public class ReadOnlyDeliveryDateTemplateFieldEditorExtension
    : EntityTemplateFieldReadOnlyEditorExtension<ReadOnlyDeliveryDateTemplateFieldEditorSettings>
{
    public override string Name => "MyDeliveryDateEditorReadOnly";

    public override string Title => "My delivery date display";

    public override EntityTemplateFieldType FieldType => EntityTemplateFieldType.Date;

    protected override ValueTask<string> FormatValueForDisplayAsync(
        object value,
        ReadOnlyDeliveryDateTemplateFieldEditorSettings settings,
        EntityTemplateFieldDisplayValueFormatContext context)
    {
        var date = (DateOnly)value;
        var displayValue = settings.LongFormat ? date.ToLongDateString() : date.ToShortDateString();

        return ValueTask.FromResult(displayValue);
    }
}

public class ReadOnlyDeliveryDateTemplateFieldEditorSettings : EntityTemplateFieldEditorSettings
{
    [Display(Name = "DeliveryDateDisplayLongFormat", Order = 10, Description = "DeliveryDateDisplayLongFormatDescription")]
    public bool LongFormat { get; set; }
}

See also