如何以编程方式访问Sitecore内容交付服务器上的主数据库



如何以编程方式访问内容交付服务器上的Sitecore "主"数据库?其中直接访问主数据库使用的代码。

  Sitecore.Data.Database master = Sitecore.Configuration.Factory.GetDatabase("master");

是不可能的

你不能。更重要的是,你甚至不应该尝试。这个服务器被称为Content Delivery服务器,因为它的唯一目的是传递内容。而Sitecore master数据库则存储了尚未发布的、尚未交付给最终用户的内容。

我猜(但这只是猜测),你想在master数据库中存储一些用户生成的内容,然后可能在某个时候将其发布给最终用户。如果这是你需要的,你应该检查所有关于Sitecore用户生成内容的文章。

我在你的另一个问题中看到,你正在使用Sitecore Web APImaster数据库中创建项目。您还可以考虑使用Sitecore Web API发布项目。

几个月前,我们遇到了一个非常类似的问题。我们的任务是保存UGC,在我们的情况下的评论。

我们对这个问题的解决方案是使用Sitecore自定义事件。基本上,我们收集用户生成的数据,创建专用模型并将事件排队
CommentsRemoteSavingEvent eventmodel = new CommentsRemoteSavingEvent(commentModel); 
EventManager.QueueEvent(eventModel, true, false);

第一个参数决定事件是否全局排队,第二个参数决定事件是否局部排队。事件模型是一个自定义类,用于存储所有必需的信息。

在CM系统上,我们现在只需要创建一个钩子,它订阅这些自定义事件

public class CommentsRemoteSavingEventHook : IHook
{
    public void Initialize()
    {
        EventManager.Subscribe(new Action<CommentsRemoteSavingEvent>(CommentsRemoteSavingHandler.Run));
    }
}

这行代码订阅了CommentsRemoteSavingEvent,这是CM系统上触发的事件类型,并允许在事件退出队列时运行特定的Handler。

钩子本身可以通过一个简单的配置

添加到钩子中
<configuration xmlns:patch="http://www.sitecore.net/xmlconfig/">
  <sitecore>
    <hooks>
      <hook type="YOURNAMESPACE.CommentsRemoteSavingEventHook, YOURDLL" />
    </hooks>
  </sitecore>
</configuration>`enter code here`

Handler本身可以这样实现

    public class CommentsRemoteSavingHandler
{
    /// <summary>  
    /// This method is used handle the dequeued event  
    /// </summary>  
    /// <param name="e">The event</param>  
    public static void Run(CommentsRemoteSavingEvent e)
    {
        EventManager.RemoveQueuedEvents(new EventQueueQuery() { EventType = typeof(CommentsRemoteSavingEvent) });
          //// Use the CommentsRemoteSavingEvent which holds now all data
    }

第一行代码将事件安全地从事件队列中移除,因此它不会再次从队列中移除。

在CommentsRemoteSavingEvent(作为参数提供给您)中,现在是您在CD端放入的所有信息,但现在是在CM端。

因此,基于这些信息,您可以简单地创建项目并发布它们,因为您现在直接在CM系统上,就像我们对用户生成的评论所做的那样。

我希望这能帮助您解决从CD到CM的数据传输问题,并在CM系统上进行处理。

我以前也有过同样的情况,实际上我没有使用Sitecore Item Web api,因为我只想要三个函数来执行任务,所以我创建了自己的控制器,并在那里添加了与主数据库对话的方法,并且我从CM环境中暴露了它们,并且从cd服务器上使用CM URL访问它们:

example : http://cmsitecore/yourcontroller/yourmethod

相关内容

最新更新