我在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中的,而不是保存在报告数据库中。
有什么方法可以触发保存到报告数据库操作?我是否需要调用其他函数来执行该位?
答案 0 :(得分:0)
应该可以。基本上,您需要在代码中创建SaveToDatabase
的新实例。然后,您需要执行Save Action
传递FormId
,AdaptedResultList
,其中包含Fields
和Values
。
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