Optimizely Forms – 如何自动将额外数据添加到提交中

关于优化表单的一些话

Optimizely Forms 是 Optimizely 开发团队的内置插件,可以通过基于块的方法动态创建表单。 开发人员可以通过安装 nuget 包将 Optimizely Forms 安装到任何 Optimizely CMS 或定制商务网站。

它允许内容编辑器动态创建表单作为普通块,将可用的表单元素(例如文本框、文本区域、日期时间、文件上传、图像等)拖放到表单容器块中。 因此,编辑人员可以轻松地设计具有所需控件的任何表单,并在任何页面上重复使用它以实现不同的上下文,例如用户调查、用户注册、用户反馈、用户支持。

一旦用户提交表单,数据将默认永久保存到数据库中。 此外,我们还可以通过连接器将提交数据发送给第三方,以用于汽车营销目的。

这是有关在编辑用户界面中创建表单的图示

创建表单然后将表单放置在页面中,然后用户在查看页面时可以看到它,如下所示

Optimizely Forms 的工作原理

下图说明了如何应用 Optimizely Forms 及其工作原理

因此,作为一名开发人员,我意识到我们可以围绕 Optimizely Forms 进行大量自定义,例如创建新的表单元素、添加更多额外的提交后参与者、实现自定义连接器。

最近,我收到一个需求,客户希望在所有提交的数据中都有一些额外的数据,例如页面url、页面类别。 这些额外的字段必须存储在数据库中,并显示在表单提交视图和导出文件中。

下图显示了如何在后端用户界面中显示提交的数据。

可以看到蓝色边框的数据是用户填写的数据,橙色边框的数据是系统数据——它们不是用户填写的数据。 是否可以添加与默认系统数据相同的更多数据? 是的。 我们可以对其进行定制,这是我想分享的示例代码

我如何在提交时添加额外数据

  • 首先,我们需要一个新的提交后参与者来向提交数据添加额外的数据。 应首先通过设置顺序来运行此参与者,以确保始终在所有其他参与者之前将额外数据添加到提交数据中。
public class MoreExtraInformationPostSubmissionActor : PostSubmissionActorBase, ISyncOrderedSubmissionActor
 {
     private readonly IUrlResolver _urlResolver;

     public MoreExtraInformationPostSubmissionActor(IUrlResolver urlResolver)
     {
         _urlResolver = urlResolver;
     }

     public int Order => 1;

     public override object Run(object input)
     {
         var hostedPageId = SubmissionData.Data["SYSTEMCOLUMN_HostedPage"] as string;

         if (!string.IsNullOrEmpty(hostedPageId))
         {
             var hostedPageUrl = _urlResolver.GetUrl(new ContentReference(hostedPageId));
             SubmissionData.Data.Add("PageUrl", hostedPageUrl);
         }
         return new SubmissionActorResult();
     }
 }
  • 为了在视图和导出文件中显示额外的数据,我们需要添加以下内容。
public class CustomFormRepository : FormRepository
{
    public override IEnumerable GetFriendlyNameInfos(FormIdentity formIden, params Type[] excludedElementBlockTypes)
    {
        var friendlyNameInfos = new List(base.GetFriendlyNameInfos(formIden, excludedElementBlockTypes));
        friendlyNameInfos.Add(new FriendlyNameInfo() { FormatType = FormatType.String, FriendlyName = "Page Url", ElementId = "PageUrl" });
        return friendlyNameInfos;
    }
}

  • 最后,需要通过在 Startup.cs 中添加以下代码来用新的 FormRepository 覆盖默认的 FormRepository
  services.AddSingleton();
  services.AddSingleton();

应用以上所有代码后的结果发生变化

这就是我想在本文中分享的全部内容。 我希望这对某人有帮助。 快乐编码!

2024 年 4 月 29 日

1714428105
#Optimizely #Forms #如何自动将额外数据添加到提交中
2024-04-29 03:49:42

Leave a Reply

Your email address will not be published. Required fields are marked *

近期新闻​

编辑精选​