以编程方式为营销人员保存Sitecore Web表单

Jes*_*off 3 c# database sitecore web-forms-for-marketers

如何在不使用提交按钮的情况下保存表单(我在页面上有另一个可用于运行保存代码的触发器).表单永远不会显示给用户,我只需要将其保存到营销人员数据库的Web表单中,除非当然有更聪明的方法.

我可以很好地使用它

Sitecore.Forms.Core.Data.FormItem form =
 Sitecore.Forms.Core.Data.FormItem.GetForm(formID);
Run Code Online (Sandbox Code Playgroud)

但是,我想

  1. 更改表单字段中的数据

(即类似的东西)

form.Fields["Name"] = "Test name"; 
// this wont work, I dont know how to access the field's value before I store it.
Run Code Online (Sandbox Code Playgroud)
  1. 将表单数据保存在sitecore中的营销人员项目数据库的Web表单中.

在我修改了字段后,我当然希望保存它.

Jes*_*off 6

这样做的方法是首先获取表单的副本,使用AdaptedControlResult列表设置其字段并使用InsertForm保存它.这样它最终会在WFFM的数据表中正确结束.

代码中使用的customerInfo来自CartHelper,但它可以是任何东西.

码:

string formID = "{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}";
DataUri uri = new DataUri(new ID(formID));
Sitecore.Data.Items.Item formItem = Sitecore.Context.Database.GetItem(uri);

// if the item exists, run through all the known fields and add the values from the customerinfo into them.
if (formItem != null)
{
   List<AdaptedControlResult> acrList = new List<AdaptedControlResult>();
   Sitecore.Data.Items.Item[] fieldItems = formItem.Axes.GetDescendants();

   foreach (Sitecore.Data.Items.Item fieldItem in fieldItems) //.Where(x => x.TemplateName == "Field"))
   {
      if (fieldItem.Name == "E-mail")
      {
         acrList.Add(new AdaptedControlResult(new ControlResult(fieldItem.Name, System.Web.HttpUtility.UrlDecode(customerInfo.Email), string.Empty) { FieldID = fieldItem.ID.ToString(), FieldName = fieldItem.Name, Value = System.Web.HttpUtility.UrlDecode(customerInfo.Email) }, true));
         continue;
      }

   // same for all other fields.
   }

   // save data
   if (acrList.Count > 0)
   {
      AdaptedResultList arl = new AdaptedResultList(acrList);

      try
      {
         Sitecore.Forms.Data.DataManager.InsertForm(formItem.ID, arl, Sitecore.Data.ID.NewID, null);
      }
      catch (Exception ex)
      {
         // Log data here
      }
   }
}
Run Code Online (Sandbox Code Playgroud)