gpt4 book ai didi

Sitecore WFFM : Issues Submitting form programmatically

转载 作者:行者123 更新时间:2023-12-02 20:05:31 30 4
gpt4 key购买 nike

我一直在尝试向 WFFM 提交我自己的表格。我创建的表单与使用 WFFM 创建的表单相同,这样所有字段都可以正确映射。

我开始执行以下步骤:https://jermdavis.wordpress.com/2015/05/18/programmatic-wffm-submissions/

我必须对代码进行一些小的更改才能获得 SubmitActionManager去上类

The members of Sitecore.Form.Core.Submit.SubmitActionManager class have been moved to the IActionExecutor interface.To obtain the instance of this interface use the (IActionExecutor)Factory.CreateObject ("wffm/wffmActionExecutor", false) call.

下面是我到目前为止的代码:

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

最佳答案

当您使用Sitecore 8时表单提交存储在 MongoDB 。 Sitecore 的实现 MongoDB , xDB主要依赖于跟踪用户,称他们为Contacts .

大部分数据存储在xDB中链接到 Contact通过 ContactId 。您在日志中找到的错误消息表明当前未启用跟踪,因此没有 Contact存在且不存在 Interaction网站和用户之间。

因此您需要启动Sitecore.Tracker我建议使用以下代码

if (!Tracker.IsActive)
Tracker.StartTracking();

if (!Tracker.IsActive || Tracker.Current.Contact == null)
{
// handle no tracker and contact
}

现在您已开始跟踪工作,您需要为 sessionID 使用正确的 ID变量。

您关注的博客基于 Sitecore 7,在 Sitecore 8 Sitecore.Form.Core.Analytics.AnalyticsTracker.SessionId已移除。我反编译了Sitecore 7代码,Sitecore.Form.Core.Analytics.AnalyticsTracker.SessionId最终使用Tracker.CurrentVisit.VisitId .

但是,此命名空间在 Sitecore 8 中发生了变化,访问现在称为交互,因此您需要使用变量 SessionID 而不是

Tracker.Current.Interaction.InteractionId;

这应该可以解决您当前遇到的问题,但您可能需要更多的开发才能完成它。

关于Sitecore WFFM : Issues Submitting form programmatically,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34622923/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com