【问题标题】:WFFM 8 - submit data programmaticallyWFFM 8 - 以编程方式提交数据
【发布时间】:2015-09-04 01:32:59
【问题描述】:

我在WFFM 8 rev. 150625

我创建了一个表单,可以通过编程方式向 WFFM 提交数据。

截取提交数据的代码为:

var simpleForm = new SitecoreSimpleForm(sitecoreFormItem);
var actionList = simpleForm.FormItem.ActionsDefinition;

var actionDefinitions = new List<ActionDefinition>();
actionDefinitions.AddRange(actionList.Groups.SelectMany(x => x.ListItems)
                 .Select(li => new ActionDefinition(li.ItemID, li.Parameters)  
                 { UniqueKey = li.Unicid }));

//crList is ControlResult[] and contains field values. 
SubmitActionManager.Execute(sitecoreFormItem.ID, 
                            crList.ToArray(), actionDefinitions.ToArray());

我在 sitecore 中的 WFFM 表单没有保存操作,因为我在代码本身中发送电子邮件。我注意到数据保存在 MongoDB 中,而不是报告数据库中。

有什么方法可以触发保存到报告数据库操作?我需要调用其他函数来执行那个位吗?

【问题讨论】:

  • 报告数据库中有一个 WFFM 事实表,您需要随 WFFM 一起安装。您想在此处添加数据吗?我认为该表存储汇总数据,而不是像旧版本那样存储单个提交数据条目。
  • 嗨,Ian,我指的是存储在 SQL 中的数据,用于报告目的。像 FormFieldValues 这样的表仍然存储表单数据并链接到 Fact_FormSummary 等。只是想知道如果以编程方式提交表单,为什么它不会处理和存储该数据。还是我需要调用其他函数来做到这一点?
  • 您解决了这个问题吗?我在通过服务提交表单时遇到了同样的问题

标签: sitecore web-forms-for-marketers sitecore8


【解决方案1】:

应该是可以的。本质上,您需要在代码中创建 SaveToDatabase 的新实例。然后你需要执行Save Action,传入FormIdAdaptedResultList,包含FieldsValues

    public void SubmitToDatabase(FormItem formItem, string[] values)
    {
        // Create AdaptedControlResult for the Fields of the form 
        // even better if you can pass the AdaptedResultList
        // from the form directly
        var adaptedControlResults = new List<AdaptedControlResult>();
        foreach (FieldItem fieldItem in formItem.FieldItems.ToList())
        {
            adaptedControlResults.Add(new AdaptedControlResult(new ControlResult(fieldItem.Name, values[formItem.FieldItems.ToList().IndexOf(fieldItem)], null), true));
        }

        var adaptedResultList = new AdaptedResultList(adaptedControlResults);

        Sitecore.Form.Submit.SaveToDatabase saveToDatabaseSaveAction = new Sitecore.Form.Submit.SaveToDatabase();
        try
        {
            saveToDatabaseSaveAction.Execute(formItem.ID, adaptedResultList, null);
        }
        catch (Exception ex)
        {
            Sitecore.Diagnostics.Log.Error(ex.Message, ex, this);
        }

最复杂的部分是将用户输入的值传递给此方法以进行保存。我建议尽可能直接传递 AdaptedResultList。

参考 - http://mikerobbins.co.uk/2014/10/15/write-to-web-forms-programmatically/

【讨论】:

  • 嘿乔纳森,这就是我已经在做的事情,它将数据保存在 mongoDB 中,但不保存在报告数据库中。
  • SubmitActionManager 调用 savetoDatabase 函数
【解决方案2】:

试试这个代码。它适用于 Sitecore 8.0 及更高版本。 请注意,此代码不会触发保存操作。如果你想触发它们,你需要手动将它们传递到 FormDataHandler.ProcessData

 var controlResults = new List<ControlResult>();
                    controlResults.Add(new ControlResult(Pdf_Request_Form.Name.ItemID.ToString(), "Name", name, string.Empty));
                    controlResults.Add(new ControlResult(Pdf_Request_Form.Email.ItemID.ToString(), "Email", email, string.Empty));

    #pragma warning disable 618
                    FormDataHandler.ProcessData(Pdf_Request_Form.ItemID, controlResults.ToArray(), new IActionDefinition[] {}, DependenciesManager.ActionExecutor);
    #pragma warning restore 618

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-22
    • 2018-06-13
    • 2013-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多