文章 小组件扩展

小组件扩展是支持向小组件公开 API 的插件。有关 Limyee 电商平台附带的扩展的文档,请访问小组件扩展文档。

为什么要创建小组件扩展?

您是否希望能够直接从小组件调用任何自定义方法或属性?自定义小组件扩展可以公开这些方法和属性,以便可以直接在 velocity 脚本中调用它们。

创建小组件扩展

首先,我们需要一个类,其中包含一个或多个要在小组件扩展中公开的公共方法或属性。Velocity(脚本化小组件使用的脚本引擎)最适合简单的数据类型和 IDictionarys。

下面的类有一个名为 SayHello 的公共方法。该方法采用单个字符串参数名称并返回“Hello {name}”。

public class Sample 
{
    public string SayHello(string name) 
    {
        return "Hello " + name;
    }
}

为了公开这个类,我们将使用第二个类来实现 IScriptedContentWidgetExtension 插件类型。首先,我们将 Sample 类的一个实例返回到 Extension 方法。

public object Extension
{
    get { return new Sample(); }
}

我们还需要为示例扩展提供唯一的名称。对于该示例,我们将使用名称“limyee_v1_sample”。我们建议在命名小组件扩展时使用 {vendor}_v{version_number}_{service_name},以确保扩展名的唯一名称、易于版本控制并与现有扩展保持一致。

public string ExtensionName
{
    get { return "limyee_v1_samples"; }
}

一旦 IScriptedContentWidgetExtension 实现并部署到 Limyee 电商平台站点的 bin/ 文件夹中,必须在管理区域中启用它,然后才能将其用于脚本化小组件。

示例

示例扩展的完整源代码:

using Limyee.Extensibility.UI.Version1;

namespace Samples
{
    public class Sample
    {
        public string SayHello(string name)
        {
            return "Hello " + name;
        }
    }

    public class SampleWidgetExtension : IScriptedContentWidgetExtension
    {
        #region IScriptedContentWidgetExtension Members

        public string ExtensionName
        {
            get { return "limyee_v1_samples"; }
        }

        public object Extension
        {
            get { return new Sample(); }
        }

        #endregion

        #region IPlugin Members

        public string Name
        {
            get { return "扩展示例"; }
        }

        public string Description
        {
            get { return "使小组件能够使用 Sample 类的公共成员。"; }
        }

        public void Initialize() { }

        #endregion
    }
}

使用扩展

现在我们的扩展已启用,我们可以创建一个调用我们的扩展的小组件:

$limyee_v1_samples.SayHello('World')

将此小组件添加到页面,您应该会看到小组件输出“Hello World”。如果对小组件扩展的调用引发了异常,则不会为终端用户呈现该小组件。编辑页面时,您将看到呈现的异常,而不是预期的小组件内容。错误信息也可以返回响应,以提供可翻译或更容易理解的错误消息。返回使用或继承以下类型之一(ApiList、PagedList、ApiEntity 或 AdditionalInfo)的值,通过在返回对象上提供 Errors 集合属性来添加错误的返回。