クローンされたアイテムの変更を自動的に承認する方法


解説

クローン機能がSitecoreソリューション全体で幅広く使用されている場合、クローンされたアイテムの変更の自動的な承認が必要なことがあります。

たとえばこの機能は、アイテムがワークフロー内にある場合に役立つことがあります。具体的に言うと、一部の状況では、元のアイテムの新しいアイテム バージョンが作成されるたびに、クローンされたアイテムの変更を承認するということが、無駄なアクションであると見なされる場合があります。そのような場合には、クローンされたアイテムを自動的に更新させることができます。

この記事では、クローンされたアイテムの変更を自動的に承認する挙動を実装するためのガイダンスを提供します。

解決策

クローンされたアイテムの変更を自動的に承認するには、以下の手順を実行してください:

  1. SqlServerNotificationProviderクラスを継承する独自の通知プロバイダーを作成します。
  2. AddNotificationメソッドをオーバーライドして、必要に応じて通知を自動的に承認するようにします。
    public override void AddNotification(Notification notification)
    {
      if (this.ShouldAutomaticallyAcceptChanges(notification))
      {
        try
        {
         notification.Accept(ItemManager.GetItem(notification.Uri.ItemID, notification.Uri.Language, notification.Uri.Version, Database.GetDatabase(notification.Uri.DatabaseName)));
         }
         catch (NullReferenceException ex)
         { }
      }
      else
      {
        base.AddNotification(notification);
      }
    }
  3. 要件に応じて、ShouldAutomaticallyAcceptChangesメソッドを実装します。たとえば、カスタムのweb.config設定に基づいて、すべての通知を承認することも、VersionAddedNotificationなどの特定のタイプの通知のみを承認することもできます:
    private bool ShouldAutomaticallyAcceptChanges(Notification notification)
    {             
      //設定値に基づいて通知を承認する
      return Settings.GetBoolSetting("Cloning.AcceptChangesAutomatically", false);
    
      //特定のタイプの通知を承認する
      //返却するnotificationはVersionAddedNotification
    }
  4. 作成した通知プロバイダーをコンパイルし、アセンブリをWebサイトの\binフォルダーに配置します。
  5. クローンを使用する各データベースのweb.configファイルで、以下のようにデフォルトの通知プロバイダーを独自のものに置き換えます:
    <NotificationProvider type="[通知プロバイダー クラスへの完全修飾パス], [クラスを含むアセンブリ]">
      <param connectionStringName="$(id)">
      </param>
      <param desc="databaseName">$(id)</param>
    </NotificationProvider>

備考: