Envoie un message générique au connecteur frontline, avec des propriétés personnalisables. Celles-ci sont gérées par l'attribut 'DefaultInspectionRequestHandler.class'.
Identifiant : send_commit_message
Attributs
type : Le type d'événement à basculer, dans le connecteur Frontline.
Valeurs possibles : Chaîne de caractères
- Obligatoire : vrai
- Valeur par défaut : -
connection_timeout : Délai d'attente en secondes
Valeurs possibles : numeric_value
- Obligatoire : false
- Valeur par défaut : 50
save_response : Contexte dans lequel enregistrer la réponse
Valeurs possibles : step, workflow
- Obligatoire : false
- Valeur par défaut : step
Éléments
identifiant : L'identifiant utilisé pour les services d'intégration (par exemple, l'identifiant de la tâche).
- Obligatoire : false
- Valeur par défaut : " " (Chaîne vide)
propriétés : Collection de paramètres, qui peuvent être utilisés par le service d'intégration.
- Obligatoire : false
- Valeur par défaut : [ ] (collection vide)
Les propriétés sont converties en interne en une carte et sa valeur peut être une collection de conversions récursives. La carte finale est stockée sous forme de chaîne JSON dans la chaîne de données utiles du message et les valeurs primitives telles que les chaînes de caractères, les valeurs numériques et les valeurs booléennes sont stockées dans le champ de carte des propriétés. Cela rend le message très flexible lors de la communication avec le service d'intégration.
Traitement des réponses
Il y a trois résultats possibles lors de l'envoi d'un message de livraison :
- Succès
- Délai d'attente
- Erreur
Un dépassement de délai se produit lorsqu'aucune réponse n'est reçue après un temps donné. Cela peut être dû au fait que le message se perd dans le réseau ou que le serveur a besoin de trop de temps pour traiter le résultat.
Dans ce cas, une erreur signifie généralement un comportement inattendu, comme l'impossibilité d'envoyer des messages en raison d'erreurs de réseau ou de serveur.
La gestion des erreurs attendues (par exemple, la gestion d'un état invalide dans le processus, etc.) est effectuée par une réponse positive.
Toutes les réponses génèrent un événement d'entrée avec la modalité "send_commit_message". La commande est l'une des suivantes : RESPONSE_OK, RESPONSE_TIMEOUT, et RESPONSE_ERROR.
Les messages contiennent un objet de charge utile qui contient des données supplémentaires pour la réponse.
En cas d'erreur et de dépassement du délai d'attente, les données utiles contiennent les champs "type" et "identifiant" définis sur les mêmes valeurs que celles utilisées dans la demande. Cela peut être utilisé pour identifier les erreurs pour des demandes spécifiques si nécessaire.
Dans le cas d'un succès, ces champs ne sont pas présents mais le champ "status" est défini par une valeur numérique (définie par le gestionnaire dans le service d'intégration). Cette valeur peut être utilisée pour gérer les cas d'erreur attendus dans le processus.
Dans tous les cas, la réponse du champ contient une chaîne définie par le service d'intégration qui peut être utilisée pour différencier davantage la réponse.
En plus des valeurs d'état et de réponse, le service d'intégration peut définir des propriétés supplémentaires à renvoyer avec l'événement. Ces propriétés sont disponibles en tant que variables contextuelles au moment du traitement de l'événement. Un exemple de ceci est le renvoi d'un message d'erreur du WMS du client pour la gestion des erreurs ou des informations supplémentaires pour traiter le commit réussi (voir ci-dessous pour des fragments de ceci).
Exemples
<send_commit_message id="pre_task_request" type="PRE_TASK_REQUEST" connection_timeout="600">
<properties>
<param name="group" type="string">#{group}</param>
<param name="aisle" type="string">#{aisle}</param>
</properties>
</send_commit_message>
<send_commit_message id="complete_inspection" type="COMPLETE_INSPECTION" connection_timeout="1500">
<param name="identifier">#{cockpit_id}</param>
</send_commit_message>
La valeur de l'identifiant n'est pas valide pour être définie comme un attribut de balise - cela devrait être possible avec les itérations futures du créateur.
<send_commit_message id="send_asset_info" type="PHOTO" connection_timeout="60">
<properties>
<param name="asset_uri" type="string">#{event:payload.media_file}</param>
<param name="order_id" type="string">?{pickOrder.name}?</param>
<param name="group_id" type="string">?{pickOrder.groups[activeGroup].label}?</param>
<param name="customer_reference">?{pickOrder.groups[activeGroup].picks[0].article.customerReference}?</param>
<param name="amount" type="string">?{pickOrder.groups[activeGroup].picks[0].amountOpen}?</param>
</properties>
</send_commit_message>
Téléchargez une image et envoyez un message de confirmation contenant des informations sur l'image téléchargée.
Cet exemple d'étape attend simplement une URI de ressource d'image (media_file) comme entrée.
<step id="send_asset" uitemplate="WAIT" persist="false" screen_lock_enabled="false" debug_mode="false">
<actions>
<action id="upload_media" type="trigger_upload_asset">
<param name="asset_uri">#{media_file}</param>
<param name="delete_after_upload" type="bool">true</param>
<param name="upload_immediately" type="bool">true</param>
<param name="upload_immediately_delete_on_failure" type="bool">true</param>
</action>
<send_commit_message id="send_asset_info" type="PHOTO" connection_timeout="200">
<properties>
<param name="asset_uri" type="string">#{event:payload.asset_uri}</param>
<param name="asset_name" type="string">#{event:payload.asset_name}</param>
<param name="asset_version" type="string">#{event:payload.asset_version}</param>
</properties>
</send_commit_message>
<ui_notification id="show_nok" type="WARN">
<duration>SHORT</duration>
<message>Picture NOT OK</message>
</ui_notification>
<ui_notification id="show_upload_error" type="ERROR">
<duration>SHORT</duration>
<message>Media upload failed</message>
</ui_notification>
<ui_notification id="show_commit_error" type="ERROR">
<duration>SHORT</duration>
<message>Commit failed</message>
</ui_notification>
</actions>
<states>
<onresume>
<rule id="auto_exec">
<expression>1</expression>
<actions>
<action ref="upload_media"/>
</actions>
</rule>
</onresume>
<onevent>
<rule id="upload_ok">
<expression>
<![CDATA[#{event(trigger_upload_asset):command} == 'OK']]>
</expression>
<actions>
<action ref="send_asset_info"/>
</actions>
</rule>
<rule id="upload_error">
<expression>
<![CDATA[#{event(trigger_upload_asset):command} == 'ERROR' || #{event(trigger_upload_asset):command} == 'NETWORK_ERROR' || #{event(trigger_upload_asset):command} == 'INTERNAL_ERROR']]>
</expression>
<actions>
<action ref="show_upload_error"/>
<action ref="finish"/>
</actions>
</rule>
<rule id="commit_ok_ok">
<expression>
<![CDATA[#{event(send_commit_message):command} == 'RESPONSE_OK' && #{event(send_commit_message):payload.response} == 'OK']]>
</expression>
<actions>
<action ref="finish_workflow"/>
</actions>
</rule>
<rule id="commit_ok_nok">
<expression>
<![CDATA[#{event(send_commit_message):command} == 'RESPONSE_OK' && #{event(send_commit_message):payload.response} != 'OK']]>
</expression>
<actions>
<action ref="show_nok"/>
<action ref="goto_take_picture"/>
</actions>
</rule>
<rule id="commit_error_or_timeout">
<expression>
<![CDATA[#{event(send_commit_message):command} == 'RESPONSE_ERROR' || #{event(send_commit_message):command} == 'RESPONSE_TIMEOUT']]>
</expression>
<actions>
<action ref="show_commit_error"/>
<action ref="goto_take_picture"/>
</actions>
</rule>
</onevent>
</states>
</step>
Manipulation avec un statut d'erreur personnalisé
<actions>
<!-- dialog references variables set by the commit message response for error handling -->
<ui_dialog id="sap_error" type="Error" title="Error">
<message><![CDATA[#{sap_message}<br>Continue to '#{sap_material}/#{sap_position}'?]]></message>
<buttons>
<button>
<text>ANDRRES_fw</text>
<command>SAP_FIX</command>
<focused>true</focused>
</button>
<button>
<text>ANDRRES_bw</text>
<command>DO_NOT_TRY_AGAIN</command>
</button>
</buttons>
</ui_dialog>
<!-- more actions
[...]
-->
</actions>
<!-- more WF code
[...]
-->
<onevent>
<!-- Technical success but check for SAP response -->
<rule id="success">
<expression><![CDATA[#{event:command} == 'RESPONSE_OK' && #{event:payload.status} == 0 ]]></expression>
<actions>
<ui_notification id="show_done" type="INFO">
<duration>SHORT</duration>
<message>#{cockpit_id} completed...</message>
</ui_notification>
<action ref="close_ds_task"/>
<action ref="finish_workflow"/>
</actions>
</rule>
<rule id="sap_error_in_success">
<expression><![CDATA[#{event:command} == 'RESPONSE_OK' && #{event:payload.status} == 500 ]]></expression>
<actions>
<!-- variables are automatically set when the event is handled and can be used in the action -->
<action ref="sap_error"/>
</actions>
</rule>
<rule id="unknown_error_in_success">
<expression><![CDATA[#{event:command} == 'RESPONSE_OK' && #{event:payload.status} != 0 && #{event:payload.status} != 500 ]]></expression>
<actions>
<action ref="completion_error"/>
</actions>
</rule>
<rule id="request_error">
<expression><![CDATA[#{event:command} == 'RESPONSE_ERROR']]></expression>
<actions>
<action ref="completion_error"/>
</actions>
</rule>
<rule id="request_timeout">
<expression><![CDATA[#{event:command} == 'RESPONSE_TIMEOUT']]></expression>
<actions>
<action ref="completion_error"/>
</actions>
</rule>
</onevent>
Exemple MQTT
<send_commit_message id="send_mqtt" type="FRONTLINE_MQTT" connection_timeout="200">
<properties>
<param name="mqtt" type="string"><![CDATA[?{
var mqtt = {
topic: "MY/TOPIC",
content: "MY CONTENT"
};
var stringmqtt = JSON.stringify(mqtt);
stringmqtt;}?]]>
</param>
</properties>
</send_commit_message>
Côté manipulateur
Voici un exemple de code de traitement dans le connecteur, à l'intérieur du gestionnaire de requête "inspection".
@Override
public CommitMessageResponse handleCommitMessage(CommitMessage aCommit) {
if("COMPLETE_INSPECTION".equals(aCommit.getType())) {
String evaluation = aCommit.getIdentifier();
// HANDLE EVENT
// [CODE]
if(isSuccess) {
log.info("Completion success!");
return new CommitMessageResponse(aCommit, 0, "Success!");
}
// HANDLE ERROR
CommitMessageResponse cmr = new CommitMessageResponse(aCommit, 500, "SAP Error!");
cmr.addProperties("sap_message", cr.getMessage()); // 'cr' is an object specific to the custom code
cmr.addProperties("sap_material", cr.getMaterial());
cmr.addProperties("sap_position", cr.getPosition());
return cmr;
}
// OTHER MESSAGES
Les propriétés ajoutées dans le cas d'erreur seront disponibles pour le flux de travail lorsque l'événement sera traité.