特定のスキーマ用に設定されたtridionのコンポーネントアイテムがいくつかあります。それらのアイテムのスキーマを新しいスキーマに変更できるようにしたいと思います。新しいスキーマは、古いスキーマが持っていた既存のプロパティをすべて保持するため、データが失われることはありません。この状況では、既存のスキーマを変更することはできません。
これが可能かどうか誰かが知っていますか?
コンポーネントのSchemaプロパティに新しい値を割り当てて保存するだけで、コンポーネントのスキーマを変更できます。もちろん、コンポーネントを保存するには、コンポーネントが新しいスキーマに対して検証する必要があります。
これの些細なケースは、スキーマをコピーして貼り付けたばかりであり、したがって両方のスキーマが同一である場合です。実際には、通常、スキーマを変更する理由があります。その場合、コンポーネントでGetXml()とUpdateXml()を使用し、XSLTでXMLを新しいスキーマに準拠したものに変換する必要があります。このシナリオでは、XSLTのスキーマ参照を更新するだけです。
Jonathonが言うように、これにはカスタムページを使用できますが、通常、これはプログラマーと管理者が設計/実行する必要がある1回限りのアクションであるため、カスタムページを使用する場合は、おそらく削除する必要があります。その後それ。
Tridion Content Porterを使用すると、コンテンツとスキーマを1つのCMSから別のCMSにエクスポートできます。パブリケーション間でアイテムを移動するためにも使用できます。これは、スキーマとそのコンテンツを「複製」して再利用する(また、ライブデータを変更する前に作業をバックアップする)ための1つのオプションです。
名前空間や保持したいXMLフィールドを変更しないように注意してください(ただし、説明とスキーマ名は問題ありません)。確かに、特にライブデータの場合は、これらの回答のいずれかを使用する前に備えて、クリーンなエクスポートを実行してください。
Tridion GUI でコンポーネントのスキーマを変更できないのには理由があります。2 つのスキーマに共通のフィールドがある場合でも、変更後にコンポーネントの内容が失われる可能性が非常に高いからです。これを回避するには、スキーマのターゲット名前空間が同じであることを確認してください。その場合、両方のスキーマでフィールドが定義されていると、スキーマが変更された後でも、コンポーネントはその値を保持します。
コンテンツマネージャインターフェイスを介してTridionコンポーネントのスキーマを変更することはできません。ただし、APIではコードを介してコンポーネントのスキーマを変更できるため、これは「カスタムページ」を使用して実現できます。
SDL Tridion 2009のドキュメント(テンプレート実装マニュアル(TOM.NET)2009)から引用:
Tridion開発者フォーラム(TOPIC_ID = 2899)には、これに関する項目(コードサンプルを含む)があります。ただし、これは非公開のフォーラムであるため、ここでコードを複製することの合法性については確信が持てません。
I was able to do this by writing some queries to replace the schema names and references directly within the tridion database. It worked fine, but I would only recommend this if the starting schema is EXACTLY like the end schema. Otherwise it'll break the components.