Transforming information into performance

getPriceAndStock

Le service getPriceAndStock, associé à la plateforme Catalogue « IO »,
demande les prix et stocks d’une liste de pièces à une application Partenaire,
éventuellement les prix d’une liste de forfaits.

Deux cas sont à envisager :

  • 1er cas : accès direct
  • 2ème cas : mode par redirection

1er CAS, d’un accès direct du Catalogue « IO » à l’application Partenaire (pas de gestion de session) :

<xat2 xmlns="http://xat2.etai.fr" version="2.0">
  <session-context>
    <!-- Le quadruplet obligatoire d'identifiants XAT2 -->
    <application-id>{identifiant de l'application}</application-id>
    <dms-login>{identifiant de l’application Partenaire dans le garage}</dms-login>
    <user-shared-id>{identifiant de l’utilisateur}</user-shared-id>
    <garage-shared-id>{identifiant du garage}</garage-shared-id>
  </session-context>
  <shuttle>
    <transport>
      <partner>
        <!-- Déclaration du nom de l'application qui émet la requête -->
        <name>{Catalogue E-T-A-I}</name>
        <editor dictionary="ETAI:editor" ref="etai" />
        <version-code>{applicationVersion}</version-code>
      </partner>
      <action-list>
        <!-- Déclaration obligatoire du verbe -->
        <action>
          <verb>getPriceAndStock</verb>
        </action>
      </action-list>
    </transport>
    <!-- Définition par défaut de l'unité de valeur monétaire et de la langue utilisée -->
    <default-shuttle-settings>
      <currency dictionary="ETAI:unit" ref="euro"/>
      <language dictionary="ETAI:language" ref="{languageRef}" />
    </default-shuttle-settings>
    <!-- Dans l'élément <part-list> (optionnel) déclaration de 1 à N éléments <part>, 
    décrivant des pièces / ingrédients / pneus --> 
    <part-list>
      <part>
        <breakdown-list>
          <!-- Définition du type de pièce via le dictionnaire "ETAI:breakdown" :
          part (pièce) / ingredient (ingrédient) / tire (pneu) -->
          <classification dictionary="ETAI:breakdown" ref="part" />
          <!-- Dans le cas du type "part", définition du type d'élément via le dictionnaire 
          "ETAI:partIdentification" (OE / AM / PRE / GU / IU) -->
          <classification dictionary="ETAI:partIdentification" ref="elementAM" />
        </breakdown-list>
       <!-- Libellé de la pièce (donnée optionnelle) -->
        <label>
          <short-label>Bougie d'allumage</short-label>
        </label>
        <!-- Référence, éventuellement selon plusieurs sources -->
        <reference-list>
          <classification ref="Y-1005J" source="catalog" />
          <classification ref="Y1005J" source="clean" />
        </reference-list>
        <!-- Fournisseur de la pièce -->
        <supplier>
          <!-- Abréviation fournisseur, SI l'élément de la pièce est du type "elementAM" -->
          <abbreviation>NGK</abbreviation>
          <!-- Libellé complet du fournisseur -->
          <label>
            <long-label>NGK (Num STOCK)</long-label>
          </label>
          <classification-list>
            <!-- Abréviation du fournisseur selon les dictionnaires "ETAI:supplier" (pièces AM),
            "ETAI:make" (pièces Constructeur), "ETAI:manufacturer" (pneus)  -->
            <classification dictionary="ETAI:supplier" ref="NGK" />
            <!-- Identifiant E-T-A-I du fournisseur -->
            <classification ref="2425" source="etai" />
          </classification-list>
        </supplier>
      </part>
    </part-list>    
    <!-- Dans l'élément <operation-list> (optionnel) déclaration de 1 à N éléments <operation>, 
    décrivant des forfaits --> 
    <calculating-list>
      <calculating>    
        <operation-list>
          <operation>
            <breakdown-list>
              <!-- Déclaration d'un forfait -->
              <classification dictionary="ETAI:breakdown" ref="packageDeal" />
              <!-- Type du forfait (donnée optionnelle)-->
              <classification dictionary="ETAI:packageDealType" ref="{packageDealTypeValue}" />
            </breakdown-list>
            <reference-list>
              <classification ref="{referenceValue}" source="{sourceValue}" />
            </reference-list>
          </operation>
        </operation-list>
      </calculating>  
    </calculating-list>      
  </shuttle>
</xat2>

La réponse en retour est directe, elle pourrait être la suivante :

<xat2 xmlns="http://xat2.etai.fr" version="2.0">
  <date-list>
    <!-- Dates d'arrivée du message et de son traitement -->
    <explicit-date>
      <breakdown-list>
        <classification dictionary="ETAI:date" ref="receive" source="{nom DMS}" />
      </breakdown-list>
      <date format="yyyy-MM-dd HH:mm:ss">2017-01-09 14:59:38</date>
      </explicit-date>
    <explicit-date>
      <breakdown-list>
        <classification dictionary="ETAI:date" ref="dispatch" source="{nom DMS}" />
      </breakdown-list>
      <date format="yyyy-MM-dd HH:mm:ss">2017-01-09 14:59:38</date>
    </explicit-date>
  </date-list>
  <message-list>
    <!-- Accusé de réception du message -->
    <message>
      <message-category>ack</message-category>
      <technical-description>getPriceAndStock processing complete</technical-description>
      <classification-list>
        <classification dictionary="XAT2:message" ref="complete" />
      </classification-list>
    </message>
  </message-list>
  <shuttle>
    <transport>
      <!-- Déclaration fortement recommandée de l'application Partenaire -->
      <partner>
        <name>{nom application Partenaire}</name>
        <editor dictionary="ETAI:editor" ref="{editeur DMS}" />
        <version-code>{version de l'application Partenaire}</version-code>
      </partner>
    </transport>
    <person-list>
      <!-- Adresse du stock -->
      <person internal-id="icd6baffd-5e89-4dce-a5ba-7134b5ff7302">
        <breakdown-list>
          <classification dictionary="ETAI:breakdown" ref="storageLocation" />
        </breakdown-list>
        <name>S.A. societe</name>
        <place>
          <address number="1">ZI DU PRAT</address>
          <address number="2">1 RUE ALAIN GERBAULT</address>
          <zip-code>56000</zip-code>
          <city>VANNES</city>
          <country>
            <classification dictionary="ETAI:country" ref="FR">FRANCE</classification>
          </country>
        </place>
      </person>
    </person-list>
    <!-- Liste des pièces -->
    <part-list>
      <!-- Données transmises par le Distributeur :
      type de la pièce - référence(s) - libellé - fournisseur - packaging - prix - stock... -->    
      <part>
        <breakdown-list>
          <classification dictionary="ETAI:breakdown" ref="part" />
          <classification dictionary="ETAI:partIdentification" ref="elementAM" />
        </breakdown-list>
        <label>
          <short-label>Bougie d'allumage</short-label>
        </label>
        <reference-list>
          <classification ref="Y-1005J" source="catalog" />
          <classification ref="Y1005J" source="clean" />
        </reference-list>
        <supplier>
          <abbreviation>NGK</abbreviation>
          <label>
            <long-label>NGK (Num STOCK)</long-label>
          </label>
          <classification-list>
            <classification dictionary="ETAI:supplier" ref="NGK" />
            <classification ref="2425" source="etai" />
          </classification-list>
        </supplier>
        <packaging-list>
          <packaging>
            <value>
              <amount>1</amount>
            </value>
            <label>
              <short-label>Vendu à l'unité</short-label>
            </label>
          </packaging>
        </packaging-list>
        <stock-list>
          <stock person-internal-id="icd6baffd-5e89-4dce-a5ba-7134b5ff7302">
            <value-list>
              <value>
                <amount>0</amount>
                <amount-of>
                  <classification dictionary="ETAI:stock" ref="availableStock" />
                </amount-of>
              </value>
            </value-list>
            <availability>
              <delivery-list>
                <delivery>
                  <label>
                    <short-label>Enlèvement sur site</short-label>
                  </label>
                  <date>
                    <date format="yyyy-MM-dd">2017-01-09</date>
                  </date>
                  <carriage>
                    <breakdown-list>
                      <classification dictionary="ETAI:carriage" ref="removalOnSite" />
                    </breakdown-list>
                    <price>
                      <value-list>
                        <value value-type="exclTaxes">
                          <amount>0</amount>
                          <amount-of>
                            <classification dictionary="ETAI:unit" ref="euro" />
                          </amount-of>
                        </value>
                      </value-list>
                    </price>
                  </carriage>
                </delivery>
              </delivery-list>
            </availability>
          </stock>
        </stock-list>
        <price-list>
          <price>
            <breakdown-list>
              <classification dictionary="ETAI:unit" ref="unit" />
            </breakdown-list>
            <value-list>
              <value value-type="exclTaxes">
                <amount>11.24</amount>
                <measurement>
                  <classification dictionary="ETAI:unit" ref="euro" />
                </measurement>
              </value> 
            </value-list>
            <debtor>
              <classification dictionary="ETAI:person" ref="repairer" />
            </debtor>
            <date-list>
              <explicit-date>
                <breakdown-list>
                  <classification dictionary="ETAI:date" ref="validity" />
                </breakdown-list>
                <date format="yyyy-MM-dd">2017-01-09</date>
                <classification-list>
                  <classification dictionary="ETAI:availability" ref="within24h" />
                </classification-list>
              </explicit-date>
            </date-list>
          </price>
          <price>
            <breakdown-list>
              <classification dictionary="ETAI:unit" ref="unit" />
            </breakdown-list>
            <value-list>
              <value value-type="exclTaxes">
                <amount>11.24</amount>
                <measurement>
                  <classification dictionary="ETAI:unit" ref="euro" />
                </measurement>
              </value>
            </value-list>
            <debtor>
              <classification dictionary="ETAI:person" ref="client" />
            </debtor>
          </price>
        </price-list>
        <status>
          <classification dictionary="ETAI:status" ref="known" />
        </status>
      </part>
    </part-list>
    <!-- Liste des forfaits -->
    <calculating-list>
      <calculating>    
        <!-- Dans l'élément <operation-list> (optionnel) déclaration de 1 à N éléments <operation>, 
        décrivant chaque forfait --> 
        <operation-list>
          <operation>
            <reference-list>
              <!-- Les mêmes informations que celles présentes dans la requête -->
              <classification ref="{referenceValue}" source="{sourceValue}" />
            </reference-list>
            <price-list>
              <!-- Prix unitaire à l'achat du forfait -->
              <price>
                <breakdown-list>
                  <classification dictionary="ETAI:unit" ref="unit" />
                </breakdown-list>
                <value-list>
                  <value value-type="exclTaxes">
                    <amount>{amountValue}</amount>
                  </value> 
                </value-list>
                <debtor>
                  <classification dictionary="ETAI:person" ref="repairer" />
                </debtor>
                <currency dictionary="ETAI:unit" ref="euro" />
              </price>
              <!-- Prix unitaire à la vente du forfait -->
              <price>
                <breakdown-list>
                  <classification dictionary="ETAI:unit" ref="unit" />
                </breakdown-list>
                <value-list>
                  <value value-type="exclTaxes">
                    <amount>{amountValue}</amount>
                    <amount-of>
                      <classification dictionary="ETAI:unit" ref="unit" />                    
                    </amount-of>
                  </value>
                </value-list>
                <debtor>
                  <classification dictionary="ETAI:person" ref="client" />
                </debtor>
                <currency dictionary="ETAI:unit" ref="euro" />                
              </price>
            </price-list>            
          </operation>
        <operation-list>
      </calculating>  
    </calculating-list>            
  </shuttle>
</xat2>

2ème CAS , où l’application Partenaire est en accès via le mode par redirection (nécessité de créer une session)

1- Le Catalogue « IO » envoie un signal à l’application Partenaire, qui lui retourne un message avec le verbe getData

<xat2 xmlns="http://xat2.etai.fr" version="2.0">
  <session-context>
    <!-- Déclaration obligatoire de l'identifiant unique de la session, créée précédemment -->   
    <session-id>{identifiant unique de la session}</session-id>
  </session-context>
  <shuttle>
    <transport>
      <action-list>
        <!-- Déclaration obligatoire du verbe -->        
        <action>      
          <verb>getData</verb>
        </action>
      </action-list>
    </transport>
  </shuttle>
</xat2>

À ce message, le Catalogue « IO » répond avec le verbe getPriceAndStock et sa liste de demandes (pièces, forfaits) :

<xat xmlns="http://xat2.etai.fr" version="2.0">
  <date-list>
    <!-- Dates d'arrivée du message et de son traitement -->
    <explicit-date source="xat2">
      <breakdown-list>
        <classification dictionary="ETAI:date" ref="receive" source="xat2">Receive date</classification>
      </breakdown-list>
      <date format="dd.MM.yyyy HH:mm:ss:S Z">19.01.2017 11:55:18:826 +0100</date>
    </explicit-date>
    <explicit-date source="xat2">
      <breakdown-list>
        <classification dictionary="ETAI:date" ref="dispatch" source="xat2">Completion date</classification>
      </breakdown-list>
      <date format="dd.MM.yyyy HH:mm:ss:S Z">19.01.2017 11:55:18:826 +0100</date>
    </explicit-date>
  </date-list>
  <message-list>
    <!-- Statut de la requête getData. 
    Ici, accusé de réception "ack" indiquant le bon déroulement du service -->
    <message source="xat2">
      <message-category>ack</message-category>
      <user-description dictionary="Xat2:message" ref="complete">getData processing complete</user-description>
      <technical-description>getData processing complete</technical-description>
      <classification-list>
        <classification dictionary="Xat2:message" ref="complete" />
      </classification-list>
    </message>
  </message-list>
  <shuttle>
    <transport>
      <action-list>
        <!-- Déclaration obligatoire du verbe exprimant la demande du Catalogue IO -->      
        <action>
          <verb>getPriceAndStock</verb>
        </action>
      </action-list>
    </transport>
    <part-list>
      <!-- Détail de cet élément : cf. description de la demande getPriceAndStock (1er cas) -->
    </part-list>
  </shuttle>
</xat2>

L’application Partenaire envoie ses données avec le verbe postPriceAndStock :

<xat2 xmlns="http://xat2.etai.fr" version="2.0">
  <message-list>
    <!-- Statut de la requête getPriceAndStock. 
    Ici, accusé de réception "ack" indiquant le bon déroulement du service -->  
    <message source="xat2">
      <message-category>ack</message-category>
      <technical-description>getPriceAndStock processing complete</technical-description>
      <classification-list>
        <classification dictionary="Xat2:message" ref="complete" />
      </classification-list>
    </message>
  </message-list>
  <session-context>
    <!-- Déclaration obligatoire de l'identifiant unique de la session -->
    <session-id>{identifiant unique de la session}</session-id>
  </session-context>
  <shuttle>
    <transport>
      <action-list>
        <!-- Déclaration obligatoire du verbe -->    
        <action>
          <verb>postPriceAndStock</verb>
        </action>
      </action-list>
    </transport>
    <part-list>
      <!-- Détail de cet élément  : idem ci-dessus.
      Voir dans la description de la REPONSE au message getPriceAndStock -->
    </part-list>
  </shuttle>
</xat2>

Le Catalogue « IO » reçoit les données et retourne un accusé de réception : « ack » si tout va bien, sinon un message d’erreur :

<xat2 xmlns="http://xat2.etai.fr" version="2.0">
  <date-list>
    <!-- Dates d'arrivée du message et de son traitement -->
    <explicit-date source="xat2">
      <breakdown-list>
        <classification dictionary="ETAI:date" ref="receive" source="xat2">Receive date</classification>
      </breakdown-list>
      <date format="dd.MM.yyyy HH:mm:ss:S Z">19.01.2017 16:19:40:142 +0100</date>
    </explicit-date>
    <explicit-date source="xat2">
      <breakdown-list>
        <classification dictionary="ETAI:date" ref="dispatch" source="xat2">Completion date</classification>
      </breakdown-list>
      <date format="dd.MM.yyyy HH:mm:ss:S Z">19.01.2017 16:19:40:143 +0100</date>
    </explicit-date>
  </date-list>
  <message-list>
    <!-- Statut de la requête postPriceAndStock. 
    Ici, accusé de réception "ack" indiquant le bon déroulement du service -->  
    <message source="xat2">
      <message-category>ack</message-category>
      <user-description dictionary="Xat2:message" ref="complete">postPriceAndStock processing complete</user-description>
      <technical-description>postPriceAndStock processing complete</technical-description>
      <classification-list>
        <classification dictionary="Xat2:message" ref="complete" />
      </classification-list>
    </message>
  </message-list>
  <uri-list>
    <uri-service action="Display" direct-access="true">
      <uri>http://{nom de domaine}/xat2disp</uri>
    </uri-service>
  </uri-list>
  <shuttle>
    <transport>
      <partner>
        <name>{Application E-T-A-I}</name>
        <editor dictionary="ETAI:editor" ref="etai" />
        <version-code>{applicationVersion}</version-code>
      </partner>
    </transport>
  </shuttle>
</xat2>

 

 

retour