Personalizar el archivo de definición XSLT
Última modificación del tema: 2011-02-02
El Servicio de cumplimiento registra y archiva datos relacionados con cada conversación de Microsoft Lync 2010 Group Chat, incluido el hecho de que un participante:
Se una a una sala de chat.
Abandone una sala de chat.
Publique un mensaje.
Vea el historial de chat.
Cargue un archivo.
Descargue un archivo.
Los datos se proporcionan en formato XML, que puede convertir al formato que mejor se adapte a las necesidades de su organización, mediante el uso de un archivo de definición XSLT. Este tema describe el archivo XML que crea el Servicio de cumplimiento. También proporciona ejemplos de archivos de definición XSLT y de salida.
Formato de salida
La salida del Servicio de cumplimiento se categoriza por conversación (el elemento Conversation), y posteriormente por mensaje (el elemento Messages), tal y como se muestra en el siguiente código de ejemplo.
<?xml version="1.0" encoding="utf-8" ?>
<Conversations xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Conversation>
<Channel uri="ma-chan://litwareinc.com/300" name="ma-chan://litwareinc.com/300" islogged="" />
<!--FirstMessage goes here --!>
<Messages>
<!—Messages go here--!>
</Messages>
<StartTimeUTC since1970="1212610540953" string="2008-06-04T20:15:40.9535482Z" long="633482073409535482" />
<EndTimeUTC since1970="1212610602532" string="2008-06-04T20:16:42.5324614Z" long="633482074025324614" />
</Conversation>
</Conversations>
Un elemento Conversation contiene cuatro elementos (Channel, FirstMessage, StartTimeUTC y EndTimeUTC). El elemento Channel contiene el Identificador uniforme de recursos (URI) de la sala de chat, mientras que el elemento FirstMessage describe el primer mensaje del elemento Messages. Los elementos StartTimeUTC y EndTimeUTC contienen las horas de inicio y de finalización de la conversación, tal y como se muestra en el siguiente código de ejemplo.
<<FirstMessage type="JOIN" content="" id="0">
<Sender UserName="TestUser kazuto" id="10" email="kazuto@litwareinc.com" internal="true" uri="kazuto@litwareinc.com" />
<DateTimeUTC since1970="1212610540953" string="2008-06-04T20:15:40.9535482Z" long="633482073409535482" />
</FirstMessage>
Un elemento Message contiene dos elementos (Sender y DateTimeUTC) y tres atributos (Type, Content e ID). El elemento Sender representa el usuario que envía el mensaje, mientras que el elemento DateTimeUTC representa el momento en el que tiene lugar un suceso, tal y como se muestra en el siguiente código de ejemplo.
<Message type="JOIN" content="" id="0">
<Sender UserName="TestUser kazuto" id="10" email="kazuto@litwareinc.com" internal="true" uri="kazuto@litwareinc.com" />
<DateTimeUTC since1970="1206211842612" string="2008-03-22T18:50:42.6127374Z" long="633418086426127374" />
</Message>
En la siguiente tabla se describen los atributos de mensaje Type, Content e ID.
Atributos del elemento Messages
Atributo | descripción | Opcional/requerido |
---|---|---|
Tipo |
Especifica el tipo de mensaje. Los tipos de mensaje se describen en la tabla Tipos de mensaje de los elmentos de mensaje. |
Requerido |
Contenido |
Contiene el contenido del mensaje. Aquellos mensajes que presenten el tipo Join o Part no usan este atributo. |
Opcional |
ID |
Especifica el Id. único del contenido. Este atributo solo se usa cuando los mensajes son del tipo Chat. |
Opcional |
Cada elemento Sender contiene cinco atributos: nombre de usuario, Id., correo electrónico, interno y URI. Estos atributos se describen en la siguiente tabla.
Atributos del elemento Sender
Atributo | descripción | Opcional/requerido |
---|---|---|
Nombre de usuario : |
El nombre de la regla. |
Opcional |
ID |
Id. único del remitente |
Requerido |
Correo electrónico |
Dirección de correo electrónico del remitente. |
Opcional |
Internal |
Determina si el usuario es un usuario interno o un usuario federado. Si el valor está establecido en true, el usuario es interno. |
Opcional |
Uri |
URI del SIP del usuario. |
Requerido |
La siguiente tabla describe los tipos de mensaje que el elemento Messages puede contener. Contiene ejemplos también de la forma en la que se usa cada elemento.
Tipos de mensaje del elemento Message
Tipo de mensaje | descripción | Ejemplo de código |
---|---|---|
Join |
Un usuario se une a una sala de chat. |
|
Part |
Un usuario sale de una sala de chat. |
|
Chat |
Un usuario publica en una sala de chat. |
|
Backchat |
Un usuario solicita contenido del historial de chat. |
|
File upload |
Un usuario carga un archivo. |
|
File download |
Un usuario descarga un archivo. |
|
XSD de salida de chat de grupo predeterminada y transformación XSL de ejemplo
El siguiente código de ejemplo muestra la salida predeterminada del Servidor de cumplimiento.
<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="Conversations" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xs:simpleType name="ComplianceMessageType">
<xs:restriction base="xs:string">
<xs:enumeration value="JOIN"/>
<xs:enumeration value="PART"/>
<xs:enumeration value="CHAT"/>
<xs:enumeration value="BACKCHAT"/>
<xs:enumeration value="FILEUPLOAD"/>
<xs:enumeration value="FILEDOWNLOAD"/>
</xs:restriction>
</xs:simpleType>
<xs:element name="Sender">
<xs:complexType>
<xs:attribute name="UserName" type="xs:string" />
<xs:attribute name="id" type="xs:int" />
<xs:attribute name="email" type="xs:string" use="optional" />
<xs:attribute name="internal" type="xs:boolean" use="optional" >
<xs:annotation><xs:documentation>If the user is internal or federated</xs:documentation></xs:annotation>
</xs:attribute>
<xs:attribute name="uri" type="xs:anyURI" use="optional" />
</xs:complexType>
</xs:element>
<xs:element name="DateTimeUTC">
<xs:complexType>
<xs:attribute name="since1970" type="xs:long" />
<xs:attribute name="string" type="xs:string" />
<xs:attribute name="long" type="xs:long" />
</xs:complexType>
</xs:element>
<xs:element name="Conversations" msdata:IsDataSet="true" msdata:UseCurrentLocale="true">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element ref="Sender" />
<xs:element ref="DateTimeUTC" />
<xs:element name="Conversation">
<xs:complexType>
<xs:sequence>
<xs:element name="Channel" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:attribute name="uri" type="xs:anyURI" />
<xs:attribute name="name" type="xs:string" use="optional" />
</xs:complexType>
</xs:element>
<xs:element name="FirstMessage" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element ref="Sender" minOccurs="0" maxOccurs="unbounded" />
<xs:element ref="DateTimeUTC" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
<xs:attribute name="type" type="ComplianceMessageType" />
<xs:attribute name="content" type="xs:string" />
<xs:attribute name="id" type="xs:int" />
</xs:complexType>
</xs:element>
<xs:element name="Messages" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="Message" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element ref="Sender" minOccurs="0" maxOccurs="unbounded" />
<xs:element ref="DateTimeUTC" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
<xs:attribute name="type" type="ComplianceMessageType" />
<xs:attribute name="content" type="xs:string" />
<xs:attribute name="id" type="xs:int" />
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="StartTimeUTC" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:attribute name="since1970" type="xs:long" />
<xs:attribute name="string" type="xs:string" />
<xs:attribute name="long" type="xs:long" />
</xs:complexType>
</xs:element>
<xs:element name="EndTimeUTC" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:attribute name="since1970" type="xs:long" />
<xs:attribute name="string" type="xs:string" />
<xs:attribute name="long" type="xs:long" />
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
El siguiente código de ejemplo contiene una transformación XSL de muestra.
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="xs">
<xsl:output method="xml" encoding="UTF-8" indent="yes" />
<xsl:template match="/">
<FileDump>
<xsl:apply-templates />
</FileDump>
</xsl:template>
<xsl:template match="Conversation">
<xsl:variable name="chanName" select="Channel/@name" />
<Conversation Perspective="{$chanName}_group_channel">
<RoomID><xsl:value-of select="Channel/@name" /></RoomID>
<StartTimeUTC><xsl:value-of select="StartTimeUTC/@since1970" /></StartTimeUTC>
<xsl:apply-templates />
<EndTimeUTC><xsl:value-of select="EndTimeUTC/@since1970" /></EndTimeUTC>
</Conversation>
</xsl:template>
<xsl:template match="Message">
<xsl:choose>
<xsl:when test="@type='JOIN'">
<ParticipantEntered>
<xsl:call-template name="DateTimeAndLogin" />
<InternalFlag><xsl:value-of select="Sender/@internal" /></InternalFlag>
<ConversationID><xsl:value-of select="../../Channel/@name" /></ConversationID>
<CorporateEmailID><xsl:value-of select="Sender/@email" /></CorporateEmailID>
</ParticipantEntered>
</xsl:when>
<xsl:when test="@type='PART'">
<ParticipantLeft>
<xsl:call-template name="DateTimeAndLogin" />
<InternalFlag><xsl:value-of select="Sender/@internal" /></InternalFlag>
<ConversationID><xsl:value-of select="../../Channel/@name" /></ConversationID>
<CorporateEmailID><xsl:value-of select="Sender/@email" /></CorporateEmailID>
</ParticipantLeft>
</xsl:when>
<xsl:when test="@type='FILEUPLOAD' or @type='FILEDOWNLOAD'">
<FileTransferStarted>
<xsl:call-template name="DateTimeAndLogin" />
<FileName><xsl:value-of select="@content" /></FileName>
</FileTransferStarted>
<FileTransferEnded>
<xsl:call-template name="DateTimeAndLogin" />
<FileName><xsl:value-of select="@content" /></FileName>
<Status>Completed</Status>
</FileTransferEnded>
</xsl:when>
<xsl:when test="@type='CHAT' or @type='BACKCHAT'">
<Message>
<xsl:call-template name="DateTimeAndLogin" />
<Content><xsl:value-of select="@content" /></Content>
</Message>
</xsl:when>
<xsl:otherwise />
</xsl:choose>
</xsl:template>
<xsl:template name="DateTimeAndLogin">
<LoginName><xsl:value-of select="Sender/@userName" /></LoginName>
<DateTimeUTC><xsl:value-of select="DateTimeUTC/@since1970" /></DateTimeUTC>
</xsl:template>
</xsl:stylesheet>