2012-10-01 13 views
7

Estoy tratando de agregar instrucciones de procesamiento a mi archivo xml en la vista fuente del componente xml. Por ejemplo:¿Cómo mantener las instrucciones de procesamiento del archivo xml en SDL Tridion?

<?altova_sps C:\Users\src\sps\2012\spsfile.sps?> 
<my_element xmlns="uuid:8d903098-e607-4d96-90a7-14d2d188dab7"> 
    ... 
</my_element> 

Después de hacer clic en Guardar, Tridion CME elimina automáticamente las instrucciones de procesamiento. ¿Hay alguna manera de cambiar este comportamiento?

(Quiero añadir la instrucción de procesamiento para que pueda abrir el archivo XML con XMLSpy en la visión auténtica mediante WebDAV)

Respuesta

3

He investigado esto un poco, y no estoy convencido de esto se puede hacer desde dentro de la CMS. Sin embargo, probablemente pueda lograr esto creando un HTTPModule o Proxy o alguna forma que transforme las solicitudes y respuestas hechas al directorio/webdav del CME.

Conceptualmente, cuando XMLSpy hace una solicitud, el nuevo módulo pendularía la instrucción deseada en el XML basándose en que el elemento es un Componente y el Esquema en el que se basa. Luego, cuando guardes (POST) la información, necesitaría quitarla nuevamente. Esto dejaría la estructura XML en el formato que SDL Tridion requiere.

Espero que ayude

Chris

+0

Gracias a Chris por toda la investigación y respuestas. También entiendo los desafíos. Me pregunto si Tridion CME puede mantener mis instrucciones de procesamiento después de que lo agregué en la vista de fuente. Eso salvaría todos los problemas. ¿Hay alguna manera de enviar una solicitud de función a Tridion? – charles

+0

Puede enviar la idea a través de http://ideas.sdltridion.com/ o una solicitud de mejora con la Asistencia al cliente de SDL Tridion. Sin embargo, como indica @Nuno, el XML que está viendo es solo el nodo de contenido y no el XML completo. , por lo que siempre será inválido guardar allí las instrucciones de procesamiento, por lo que no creo que sea probable que lo implementen. Pero vale la pena intentarlo. Buena suerte. –

2

Estoy publicar esto como una idea - aunque no puedo conseguir que hagas bastante Lo que quieras. He escrito un manejador de sucesos para manipular el XML recibido por XMLSpy (y todos los clientes, incluyendo la CME en este punto)

using System; 
using System.Text; 
using System.Xml; 
using Tridion.ContentManager.Extensibility.Events; 
using Tridion.ContentManager.Extensibility; 
using Tridion.ContentManager.ContentManagement; 
using System.IO; 

namespace UrbanCherry.Net.SDLTridion.EventHandlers 
{ 
    [TcmExtension("AppendAuthenticHeaders")] 
    public class AppendAuthenticHeaders : TcmExtension 
    { 
     public AppendAuthenticHeaders() 
     { 
      Subscribe(); 
     } 

     public void Subscribe() 
     { 
      EventSystem.Subscribe<Component, LoadEventArgs>(AppendAuthenticHeader, EventPhases.Processed); 
     } 

     private void AppendAuthenticHeader(Component source, LoadEventArgs args, EventPhases phase) 
     { 
      if (source.ComponentType != ComponentType.Multimedia) 
      { 
       XmlDocument newXml = new XmlDocument(); 
       newXml.LoadXml("<?altova_sps C:\\Users\\src\\sps\\2012\\spsfile.sps?>" + source.Content.OuterXml); 
       source.Content = newXml.DocumentElement; 
      } 
     } 


    } 
} 

He intentado manipular la salida (mediante la sustitución de una cadena), y lo hace aparecer en XMLSpy a través WebDAV. El problema que tengo es que agregar las instrucciones de procesamiento queda fuera de DocumentElement, por lo que nunca se convierte en el nuevo XML.

Así que sé que esto no resuelve su desafío, pero tal vez alguien más sepa de un evento que le permita agregar las instrucciones cuando el XML se cargue mediante el cartucho WebDAV de una manera similar.

esperanza otra persona puede ayudarle a cerrar este - Voy a cavar un poco más si tengo tiempo

Cuestiones relacionadas