既存のTridionコンポーネントのスキーマを変更するにはどうすればよいですか
質問
Tridionには、特定のスキーマ用に設定されたコンポーネントアイテムがいくつかあります。これらのアイテムのスキーマを新しいスキーマに変更できるようにしたいと思います。新しいスキーマは、古いものが持っていた既存のプロパティのすべてを保持するため、データの損失はありません。この状況では、既存のスキーマを変更するだけではありません。
これを行うことができるかどうか誰もが知っていますか?
解決 5
Tridionデータベース内でスキーマ名と参照を直接置き換えるためにいくつかのクエリを書くことでこれを行うことができました。うまくいきましたが、開始スキーマが最終スキーマとまったく同じ場合にのみ、これをお勧めします。それ以外の場合は、コンポーネントが破損します。
他のヒント
コンポーネントのスキーマをコンポーネントのスキーマプロパティに割り当てて保存するだけで、コンポーネントのスキーマを変更できます。もちろん、コンポーネントを保存するには、コンポーネントが新しいスキーマに対して検証する必要があります。
これの些細なケースは、スキーマをコピーしたばかりで、両方のスキーマが同一である場合です。実際には、通常、スキーマを変更する理由があります。その場合、コンポーネントでgetXml()とupdatexml()を使用し、XSLTを新しいスキーマに準拠したものにxslt変換することをお勧めします。このシナリオでは、XSLTのスキーマリファレンスを単純に更新できます。
Jonathonが言うように、これにはカスタムページを使用できますが、一般的にこれはプログラマーと管理者が設計/実行する必要がある1回限りのアクションであるため、カスタムページを使用する場合は、おそらく削除する必要があります。その後。
Tridion GUIでコンポーネントのスキーマを変更できない理由があります。たとえ2つのスキーマに共通のフィールドがある場合でも、コンポーネントがそのような変更後にコンテンツを失う可能性が非常に高いです。これを避けるために、スキーマに同じターゲットネームスペースがあることを確認してください。その場合、両方のスキーマでフィールドが定義されている場合、スキーマが変更された後でもコンポーネントはその値を保持します。
Tridion Content Porterを使用すると、コンテンツとスキーマをあるCMSから別のCMSにエクスポートできます。アイテムの移動にも使用できます の間に 出版物。これは、スキーマとそのコンテンツを再利用するためのコンテンツを「複製」する1つのオプションです(ライブデータを変更する前に作業をバックアップします!)。
保持したい名前空間またはXMLフィールドを変更しないように注意してください(説明とスキーマ名は大丈夫です)。確かに、特にライブデータを使用すると、これらの回答のいずれかを使用する前に、クリーンなエクスポートを行います。
Content Managerインターフェイスを介してTridionコンポーネントのスキーマを変更することはできません。ただし、APIによりコードを介してコンポーネントのスキーマを変更できるため、「カスタムページ」を使用してこれを実現できます。
SDL Tridion 2009ドキュメント(テンプレート実装マニュアル(tom.net)2009)から取得:
- クラス:tridion.contentmanager.contentmanagement.component
- プロパティ:パブリックスキーマスキーマ{get;セットする; }
- 説明:コンポーネントのコンテンツとメタデータのスキーマを取得または設定します。
これについては、Tridion開発者フォーラム(topic_id = 2899)にはアイテム(コードサンプルを含む)があります。ただし、これはクローズドフォーラムであるため、ここでコードを再現する合法性について確信が持てません。