Sitecore WFFM - 如何在外部触发表单

Posted

技术标签:

【中文标题】Sitecore WFFM - 如何在外部触发表单【英文标题】:Sitecore WFFM - How to trigger a form externally 【发布时间】:2014-06-02 08:46:14 【问题描述】:

我有一个营销人员的网络表单,我需要通过其他地方的代码“运行”该网络表单。

有没有办法加载网络表单并运行其执行操作?例如,对于常规站点核心项目,我可以根据其 ID 获取它,但我似乎无法找到将常规站点核心项目投射到 WFFM 项目然后执行其保存操作(并可能设置它的字段)。

【问题讨论】:

不完全确定您的情况是什么。但是您可以考虑创建自己的 WFFM 保存操作,并让该操作与您的“其他地方”代码对话? 不,因为情况正好相反。我已经有一个自定义保存操作,我需要使用表单从其他地方触发该自定义保存操作(以便在该调用中使用所有 sitecore 表单数据)。 特定的使用场景是这样的:我有一个订阅时事通讯网络表单,它工作正常。但是,我还需要在订单购买确认屏幕中进行“检查此处以注册时事通讯”(无论如何,电子邮件地址等都可用)。当客户随后购买订单时,它应该另外运行表单代码并以这种方式注册时事通讯。 好的,我明白了。而且没有简单的方法可以根据我接受的 WFFM 制作订单确认页面(或其中的一部分)? 您可能应该将 Reflector 指向 WFFM/ECM 中的“注册时事通讯”保存操作,然后查看它的作用。实际上,它只不过是将用户添加到邮件列表的特定角色中。 【参考方案1】:

听起来您正在尝试将数据插入 WFFM 数据库而无需运行 WFFM 提交操作?我说对了吗?

如果是这样,您可以使用以下代码将表单代码提交到 WFFM DB,它会无缝地显示在该表单的报告页面中:

假设您在此类的列表中填充了字段列表:

public class WffmField
    
        public string FieldName  get; set; 
        public string FieldGuid  get; set; 
        public string FieldValue  get; set; 
    

字段 guid 将是来自 sitecore 的 guid:

然后您可以保存到 WFFM 数据库:

// This should be populated with the data you want to send to the WFFM database
var fields = new List<WffmField>(); 
var wffmDatabaseFields = fields.Select(GetWFFMDatabaseField).ToList();

Sitecore.Forms.Data.DataManager.InsertForm(
    formId: new Sitecore.Data.ID("<Form guid here>"),
    fields: new AdaptedResultList(wffmDatabaseFields),
    sessionID: AnalyticsTracker.SessionId,
    data: null);

希望这会有所帮助!

【讨论】:

以上是关于Sitecore WFFM - 如何在外部触发表单的主要内容,如果未能解决你的问题,请参考以下文章

Sitecore 8.0(构建 3)MVC WFFM 自定义验证器不工作

使用 WFFM 在 Sitecore 参与计划中注册访客

如何在外部网页上自动填充表单数据?

如何从 iframe 内部提交表单并将结果显示在外部

Magento:如何让观察者在外部脚本中工作?

在外部用户控件上的 aspx 按钮上触发 Click 事件