Я пытался отправить свою форму в WFFM. Созданная мной форма идентична форме, созданной с помощью WFFM, поэтому все поля отображаются правильно.
Я начал со следующих шагов: https://jermdavis.wordpress.com/2015/05/18/programmatic-wffm-submissions/
Мне пришлось внести небольшие изменения в код, чтобы заставить SubmitActionManager
работать.
Члены класса Sitecore.Form.Core.Submit.SubmitActionManager перемещены в интерфейс IActionExecutor. Чтобы получить экземпляр этого интерфейса, используйте вызов (IActionExecutor)Factory.CreateObject ("wffm/wffmActionExecutor", false).
Ниже приведен код, который у меня есть до сих пор:
public void SubmitData(ContactUsFormModel data)
{
var results = new List<ControlResult>();
results.Add(makeControlResult(Models.Constants._cufFirstNameID, "First Name", data.FirstName));
results.Add(makeControlResult(Models.Constants._cufLastNameID, "Last Name", data.LastName));
results.Add(makeControlResult(Models.Constants._cufEmailID, "Email", data.Email));
results.Add(makeControlResult(Models.Constants._cufCompanyID, "Company", data.Company));
results.Add(makeControlResult(Models.Constants._cufSubjectID, "Subject", data.Subject));
results.Add(makeControlResult(Models.Constants._cufMessageID, "Message", data.Message));
var formItem = Sitecore.Context.Database.GetItem(Models.Constants._contactUsFormID);
var simpleForm = new SitecoreSimpleForm(formItem);
var saveActionXml = simpleForm.FormItem.SaveActions;
var actionList = Sitecore.Form.Core.ContentEditor.Data.ListDefinition.Parse(saveActionXml);
var actionDefinitions = new List<ActionDefinition>();
actionDefinitions.AddRange(actionList.Groups.SelectMany(x => x.ListItems).Select(li => new ActionDefinition(li.ItemID, li.Parameters) { UniqueKey = li.Unicid }));
var SubmitActionManager = (IActionExecutor)Factory.CreateObject("wffm/wffmActionExecutor", false);
Sitecore.Form.Core.WffmActionEvent sessionID = new Sitecore.Form.Core.WffmActionEvent();// SessionIDGuid
var result = SubmitActionManager.ExecuteSaving(ID.Parse(Models.Constants._contactUsFormID), results.ToArray(), actionDefinitions.ToArray(), true, ID.Parse( sessionID.SessionIDGuid ));
}
private ControlResult makeControlResult(string fieldID, string fieldName, string fieldValue)
{
return new ControlResult(fieldName, fieldValue, string.Empty)
{
FieldID = fieldID,
FieldName = fieldName,
Value = fieldValue,
Parameters = string.Empty
};
}
Я не знал, где взять Sitecore.Form.Core.Analytics.AnalyticsTracker.SessionId
, чтобы использовать его внутри ExecuteSaving
, поэтому я использовал WffmActionEvent
. Кроме того, в руководстве, которому я следовал, используется Execute
, который теперь устарел, поэтому мне пришлось использовать ExecureSaving
(мое лучшее предположение).
Однако это, похоже, не публикует отправленные данные в базу данных. Я не могу увидеть ни одно из своих представлений в отчетах форм WFFM или внутри mongoDB. Однако в журналах указано, что форма сохраняется в базе данных, но не уверен, что означают другие предупреждения.
24688 17:20:39 WARN [WFFM] Tracker.Current is not initialized
24688 17:20:39 INFO AUDIT (sitecore\admin): [WFFM] Form {978DBF4C-0F56-45A8-A9AC-52EF8D995DDF} is saving to db
24688 17:20:39 WARN [WFFM] Tracker.Current.Contact is not initialized
24688 17:20:39 WARN [WFFM] Tracker.Current.Interaction is not initialized
24688 17:20:39 WARN [WFFM] CurrentSession is not initialized