我开始执行以下步骤: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 initialized24688 17:20:39 INFO AUDIT (sitecore\admin): [WFFM] Form {978DBF4C-0F56-45A8-A9AC-52EF8D995DDF} is saving to db24688 17:20:39 WARN [WFFM] Tracker.Current.Contact is not initialized24688 17:20:39 WARN [WFFM] Tracker.Current.Interaction is not initialized24688 17:20:39 WARN [WFFM] CurrentSession is not initialized解决方法 当您使用Sitecore 8时,表单提交存储在MongoDB中. Sitecore的MongoDB实现,xDB主要依赖于跟踪用户,称之为联系人.
存储在xDB中的大多数数据通过ContactID链接到联系人.您在日志中找到的错误消息表明当前未启用跟踪,因此不存在联系,并且站点和用户之间没有交互.
因此,您需要启动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中的命名空间已更改,Visits现在称为交互,因此您需要使用的是变量SessionID
Tracker.Current.Interaction.InteractionID;
这应该可以解决您目前遇到的问题,但您可能需要更多的开发才能完成它.
总结以上是内存溢出为你收集整理的Sitecore WFFM:以编程方式提交表单的问题全部内容,希望文章能够帮你解决Sitecore WFFM:以编程方式提交表单的问题所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)