WFFM 8 - 以编程方式提交数据

时间:2015-09-04 01:33:00

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

我在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中的,而不是保存在报告数据库中。

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

2 个答案:

答案 0 :(得分:0)

应该可以。基本上,您需要在代码中创建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/

答案 1 :(得分:0)

试试这段代码。它适用于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