Personnalisation du fichier de définition XSLT dans Lync Server 2013
Rubrique Dernière modification : 2014-09-11
Le service de conformité enregistre et archive les données relatives à chaque conversation Lync Server 2013 du serveur de conversation permanente, y compris lorsqu’un participant :
Joint une salle de conversation permanente
Quitte une salle de conversation
Publie un message
Consulte l’historique d’une conversation
Transfère un fichier
Télécharge un fichier
Les données sont fournies sous forme de code XML, que vous pouvez transformer au format qui convient le mieux à votre organisation, à l’aide d’un fichier de définition XSLT. Cette rubrique décrit le fichier XML que le service de conformité crée. Elle fournit également des échantillons de fichiers de définition XSLT et de sortie.
Format de sortie
La sortie du service conformité est classée par conversation (élément Conversation), puis par message (l’élément Messages), comme indiqué dans l’exemple de code suivant.
<?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 élément Conversation contient quatre éléments (Channel, FirstMessage, StartTimeUTC et EndTimeUTC). L’élément Channel contient l’URI (Uniform Resource Identifier) de la salle de conversation et l’élément FirstMessage décrit le premier message de l’élément Messages. Les éléments StartTimeUTC et EndTimeUTC fournissent les heures de début et de fin de la conversation, comme indiqué dans l’exemple de code suivant.
<<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 élément Message contient deux éléments (Sender et DateTimeUTC) et trois attributs (Type, Content et ID). L’élément Sender représente l’utilisateur qui envoie le message, et l’élément DateTimeUTC représente lorsqu’un événement se produit, comme indiqué dans l’exemple de code suivant.
<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>
Le tableau suivant décrit les attributs de message Type, Content, et ID.
Attributs de l’élément Messages
Attribut | Description | Facultatif/obligatoire |
---|---|---|
Type |
Spécifie le type de message. Les types de message sont décrits dans la table Éléments de message Types de message. |
Obligatoire |
Contenu |
Contient le contenu du message. Les messages de type Join ou Part n’utilisent pas cet attribut. |
Facultatif |
ID |
Spécifie l’ID unique du contenu. Cet attribut est utilisé uniquement avec les messages de type Chat. |
Facultatif |
Chaque élément Sender contient cinq attributs : username, ID, email, internal et URI. Ces attributs sont décrits dans la table suivante.
Attributs de l’élément Sender
Attribut | Description | Facultatif/obligatoire |
---|---|---|
Nom d’utilisateur |
Nom de l’expéditeur. |
Facultatif |
ID |
ID unique de l’expéditeur. |
Obligatoire |
Adresse de messagerie de l’expéditeur. |
Facultatif |
|
Interne |
Détermine si l’utilisateur est un utilisateur interne ou fédéré. Si la valeur est Vraie, l’utilisateur est interne. |
Facultatif |
Uri |
URI SIP de l’utilisateur. |
Obligatoire |
La table suivante décrit les types de message que l’élément Messages peut contenir. Elle fournit également des exemples de la manière avec laquelle chaque élément est utilisé.
Éléments de message Types de message
Type de message | Description | Exemple de code |
---|---|---|
Rejoindre |
Un utilisateur rejoint une salle de conversation. |
|
Quitter |
Un utilisateur quitte une salle de conversation. |
|
Conversation |
Adresse de messagerie de l’expéditeur. |
|
Sauvegarde de conversation |
Un utilisateur demande du contenu issu de l’historique de la conversation. |
|
Téléchargement de fichier |
Un utilisateur transfère un fichier. |
|
Téléchargement de fichier |
Un utilisateur télécharge un fichier. |
|
XSD de sortie de conversation permanente par défaut et exemple de transformation XSL
L’exemple de code suivant contient la sortie par défaut du serveur de conformité.
<?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>
L’exemple de code suivant contient un exemple de transformation XSL.
<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>