publish:end 事件的事件处理程序刚刚命中第一个选定的语言。任何的想法?

Event Handler for publish:end event is just hitting the first selected language. Any idea?

我为 publish:end 事件创建了一个事件处理程序,以便在每次 Sitecore 完成时为我的 Sitecore 实例中可用的每种语言创建站点地图 XML 文件发布网站。

Get Languages chosen for publish in publish:end event所述:

[...] actually the publish:end event hits once for every language - and you get get the language that is being published by doing EventArgs[0].Options.Language.

问题是 publish:end 事件只针对第一个 selected 语言触发了我的事件处理程序一次。例如,如果我在发布我的 Sitecore 实例期间 select 3 种语言(En-US、Pt-BR、Fr-CA),publish:end 事件将命中我的事件处理程序一次,并将 En-US 显示为 属性 EventArgs[0].Options.Language 的值。它不会影响我的其他 2 种 selected 语言(Pt-BR、Fr-CA)的事件处理程序。

我正在使用 Sitecore.NET 8.0(修订版 150812)

下面是我的事件处理程序配置文件:

<?xml version="1.0"?>
<configuration xmlns:patch="http://www.sitecore.net/xmlconfig/">
    <sitecore>
        <events>
            <event name="publish:end">
                <handler type="Project1.EventHandlers.BuildXMLSitemap, Project1.SBL" method="BuildSitemap" />
            </event>
      <event name="publish:end:remote">
        <handler type="Project1.EventHandlers.BuildXMLSitemap, Project1.SBL" method="BuildSitemap" />
      </event>
    </events>

    <!-- Update settings for the Trusted_Connection = True -->
    <sites>

      <site name="website">
        <patch:attribute name="sitemapXmlFileName">sitemap</patch:attribute>
        <patch:attribute name="sitemapXmlIndexFileName">sitemapindex</patch:attribute>
      </site>

    </sites>
    </sitecore>
</configuration>

下面是我的代码:

namespace Project1.EventHandlers
{
    public class BuildXMLSitemap
    {

        public void BuildSitemap(object sender, EventArgs args)
        {

            Language language = GetLanguage(args);              

        }

        private Language GetLanguage(EventArgs args)
        {
            Language language;
            if (args is PublishEndRemoteEventArgs)
            {
                var publishArgs = args as PublishEndRemoteEventArgs;
                language = LanguageManager.GetLanguage(publishArgs.LanguageName);
            }
            else
            {
                var publisher = Event.ExtractParameter(args, 0) as Publisher;
                if (publisher == null) return null;
                language = publisher.Options.Language;
            }

            return language;
        }

    }

}

这是我的 Sitecore 实例,配置了语言:

Sitecore Languages Configured

这里是显示可用语言的 Sitecore 发布站点对话框:

Publish Site Dialog

无论为项目发布选择多少种语言,每个发布过程只调用一次 publish:end 处理程序。自 Sitecore 7.2 以来,这已作为发布改进的一部分进行了更改。

您可能想看看 publish:complete 处理程序。