从代码启动内容编辑器
我有一个在Sitecore中创建一个新项目然后将内容编辑器打开到该项目的应用程序,它的加载情况很好,但是每当我尝试打开html编辑器时,我都会收到" NullReferenceException"。仅当我以这种方法启动应用程序时,才会发生这种情况。
源代码:
[Serializable] public class PushToCMS : Command { public override void Execute(CommandContext context) { //Context.ClientPage.Start(this, "Action_PushToCMS"); Database dbCore = Sitecore.Configuration.Factory.GetDatabase("core"); Item contentEditor = dbCore.GetItem(new ID("{7EADA46B-11E2-4EC1-8C44-BE75784FF105}")); Database dbMaster = Sitecore.Configuration.Factory.GetDatabase("master"); DatabaseEngines engine = new DatabaseEngines(dbMaster); Item parentItem = dbMaster.GetItem("/sitecore/content/Home/Events/Parent/"); // Load existing related item if it exists Event evt = new Event(new Guid(HttpContext.Current.Items["id"].ToString())); Item item = dbMaster.SelectSingleItem("/sitecore/content/Home/Events/Parent/Item"); if (item == null) item = CreateNewEvent(engine.DataEngine, parentItem, evt); Sitecore.Text.UrlString parameters = new Sitecore.Text.UrlString(); parameters.Add("id", item.ID.ToString()); parameters.Add("fo", item.ID.ToString()); Sitecore.Shell.Framework.Windows.RunApplication(contentEditor, contentEditor.Appearance.Icon, contentEditor.DisplayName, parameters.ToString()); }
在加载这两种方法时,我可以告诉的唯一区别是html编辑器的url,但是我不知道在何处定义它或者如何控制它。
通过普通方法启动:
'http://xxxx/sitecore/shell/default.aspx?xmlcontrol = RichTextEditor&da = core&id =%7bDD4372AC-5D37-4C9E-BBFA-C4E3E2A27722%7d&ed = F27055570&vs&la = en&fld =%7b60D10DBB-7CD5-4341-A960&C7 = 0&hdl = H27055699&us =%7b83D34C8A-4CC4-4CD9-A209-600D51B26AAE%7d&mo`
通过RunApplication启动:http://xxxx/layouts/xmlcontrol.aspx?xmlcontrol = RichTextEditor&da = core&id =%7bDD4372AC-5D37-4C9E-BBFA-C4E3E2A27722%7d&ed = F27055196&vs&la = en&fld =%7b60D10DBB-7CD5-4341-A && 347 = A1-&A960-C7 = H27055325&us =%7b83D34C8A-4CC4-4CD9-A209-600D51B26AAE%7d&mo
任何帮助,将不胜感激。
解决方案
菲尔,
如果答案还为时不晚... :)
我们可能在没有读取核心数据库的权限的情况下运行此代码。在这种情况下,当我们尝试调用contentEditor时。我们将获得NullReference。我建议我们使用另一种运行应用程序的格式,使用另一种方法:
Sitecore.Shell.Framework.Windows.RunApplication("Content Editor", parameters.ToString());
如果这样做没有帮助,请添加我们所获得的异常的堆栈跟踪。
希望这可以帮助。