UiPath Documentation
orchestrator
2020.10
false
Guide de l'API Orchestrator
Important :
Veuillez noter que ce contenu a été localisé en partie à l’aide de la traduction automatique. La localisation du contenu nouvellement publié peut prendre 1 à 2 semaines avant d’être disponible.

Requêtes relatives aux Robots

Récupération des états du Robot​

Remarque :

Pour extraire la valeur du paramètre LicenseKey, vous devez effectuer une requête GET vers le point de terminaison /odata/Robots(Id).

En fonction de son ID​

L'exemple suivant permet d'afficher le statut actuel du Robot avec l'ID 749.

Obtenir

/odata/Sessions?$top=10&$filter=Robot/Id eq 749&$select=State

En-têtes de requête.​
Clé (Key)Valeur (Value)
AutorisationPorteur
Codes de réponse​

200 OK

Corps de la réponse​
{
    "@odata.context": "/odata/$metadata#Sessions(State)",
    "@odata.count": 1,
    "value": [
        {
            "State": "Available"
        }
    ]
}
{
    "@odata.context": "/odata/$metadata#Sessions(State)",
    "@odata.count": 1,
    "value": [
        {
            "State": "Available"
        }
    ]
}

En fonction de son nom​

L'exemple suivant permet d'afficher l'état actuel du Robot avec le nom DocBot.

Obtenir

/odata/Sessions?$top=10&$filter=Robot/Name eq 'DocBot'&$select=State

En-têtes de requête.​
Clé (Key)Valeur (Value)
AutorisationPorteur
Codes de réponse​

200 OK

Corps de la réponse​
{
    "@odata.context": "/odata/$metadata#Sessions(State)",
    "@odata.count": 1,
    "value": [
        {
            "State": "Available"
        }
    ]
}
{
    "@odata.context": "/odata/$metadata#Sessions(State)",
    "@odata.count": 1,
    "value": [
        {
            "State": "Available"
        }
    ]
}

Récupération des informations du Robot en fonction de son état : Exemple 1​

L'exemple ci-dessous demande les 10 premiers Robots qui ont le statut Disponible et envoie une pulsation dans les 2 dernières minutes. Seules les informations pertinentes du robot s'affichent. Vous pouvez vérifier la pulsation en utilisant le paramètre Période de rapports et soustraire 2 minutes de l'heure actuelle. Comme vous le savez peut être, si un Robot n'a pas envoyé une pulsation dans les 2 dernières minutes, il est indiqué comme ne répondant pas.

Obtenir

/odata/Sessions?$top=10&$filter=State eq 'Available' and ReportingTime gt 2018-03-05T03:48:04.147Z&$select=Robot&$expand=Robot

En-têtes de requête.​

Clé (Key)Valeur (Value)
AutorisationPorteur

Codes de réponse​

200 OK

Corps de la réponse​

{
    "@odata.context": "/odata/$metadata#Sessions(Robot)",
    "@odata.count": 2,
    "value": [
        {
            "Robot": {
                    "LicenseKey": null,
                "MachineName": "MBOBOC",
                "Name": "DocBot",
                "Username": "UIPATH\\MADALINA.BOBOC",
                "Description": null,
                "Type": "NonProduction",
                "Password": null,
                "RobotEnvironments": "doc_env,WR_env,Group1",
                "Id": 749,
                "ExecutionSettings": null
            }
        },
        {
            "Robot": {
                    "LicenseKey": null,
                "MachineName": "midragomir",
                "Name": "mr-Rob",
                "Username": "uipath\\mircea.dragomir",
                "Description": "Alerts",
                "Type": "NonProduction",
                "Password": null,
                "RobotEnvironments": "",
                "Id": 902,
                "ExecutionSettings": null
            }
        }
    ]
}
{
    "@odata.context": "/odata/$metadata#Sessions(Robot)",
    "@odata.count": 2,
    "value": [
        {
            "Robot": {
                    "LicenseKey": null,
                "MachineName": "MBOBOC",
                "Name": "DocBot",
                "Username": "UIPATH\\MADALINA.BOBOC",
                "Description": null,
                "Type": "NonProduction",
                "Password": null,
                "RobotEnvironments": "doc_env,WR_env,Group1",
                "Id": 749,
                "ExecutionSettings": null
            }
        },
        {
            "Robot": {
                    "LicenseKey": null,
                "MachineName": "midragomir",
                "Name": "mr-Rob",
                "Username": "uipath\\mircea.dragomir",
                "Description": "Alerts",
                "Type": "NonProduction",
                "Password": null,
                "RobotEnvironments": "",
                "Id": 902,
                "ExecutionSettings": null
            }
        }
    ]
}

Récupération des informations du Robot en fonction de son état : Exemple 2​

L'exemple suivant recherche les 10 premiers Robots qui ont le statut Déconnecté et développe les informations des Robots.

Obtenir

/odata/Sessions?$top=10&$filter=State eq 'Disconnected'&$expand=Robot

En-têtes de requête.​

Clé (Key)Valeur (Value)
AutorisationPorteur

Codes de réponse​

200 OK

Corps de la réponse​

{
    "@odata.context": "/odata/$metadata#Sessions",
    "@odata.count": 2,
    "value": [
        {
            "State": "Disconnected",
            "ReportingTime": "2018-01-15T18:47:07.93Z",
            "Info": null,
            "IsUnresponsive": false,
            "Id": 718,
            "Robot": {
                    "LicenseKey": null,
                "MachineName": "DESKTOP-PMFQGCB",
                "Name": "Stan",
                "Username": "Alex",
                "Description": null,
                "Type": "Unattended",
                "Password": null,
                "RobotEnvironments": "doc_env,a_invoke_env,Group1",
                "Id": 759,
                "ExecutionSettings": null
            }
        },
        {
            "State": "Disconnected",
            "ReportingTime": "2018-01-18T18:14:14.34Z",
            "Info": null,
            "IsUnresponsive": false,
            "Id": 730,
            "Robot": {
                    "LicenseKey": null,
                "MachineName": "DESKTOP-PMFQGCB",
                "Name": "!~#$%^&*()_+=-",
                "Username": "dragomirmir",
                "Description": null,
                "Type": "NonProduction",
                "Password": null,
                "RobotEnvironments": "WR_env",
                "Id": 771,
                "ExecutionSettings": null
            }
        }
    ]
}
{
    "@odata.context": "/odata/$metadata#Sessions",
    "@odata.count": 2,
    "value": [
        {
            "State": "Disconnected",
            "ReportingTime": "2018-01-15T18:47:07.93Z",
            "Info": null,
            "IsUnresponsive": false,
            "Id": 718,
            "Robot": {
                    "LicenseKey": null,
                "MachineName": "DESKTOP-PMFQGCB",
                "Name": "Stan",
                "Username": "Alex",
                "Description": null,
                "Type": "Unattended",
                "Password": null,
                "RobotEnvironments": "doc_env,a_invoke_env,Group1",
                "Id": 759,
                "ExecutionSettings": null
            }
        },
        {
            "State": "Disconnected",
            "ReportingTime": "2018-01-18T18:14:14.34Z",
            "Info": null,
            "IsUnresponsive": false,
            "Id": 730,
            "Robot": {
                    "LicenseKey": null,
                "MachineName": "DESKTOP-PMFQGCB",
                "Name": "!~#$%^&*()_+=-",
                "Username": "dragomirmir",
                "Description": null,
                "Type": "NonProduction",
                "Password": null,
                "RobotEnvironments": "WR_env",
                "Id": 771,
                "ExecutionSettings": null
            }
        }
    ]
}

Récupération des informations du Robot en fonction de son ID​

L'exemple suivant récupère les détails du Robot avec l'ID 216. Notez que ce Robot utilise l'authentification par carte à puce.

Obtenir

/odata/Robots(216)

En-têtes de requête.​

Clé (Key)Valeur (Value)
AutorisationPorteur

Codes de réponse​

200 OK

Corps de la réponse​

{
    "@odata.context": "/odata/$metadata#Robots/$entity",
    "LicenseKey": "fc157179-3724-4bb0-acd2-8261bef82d01",
    "MachineName": "CAPETRINA",
    "MachineId": 15,
    "Name": "Gustavee",
    "Username": "uipath\\john.smith",
    "ExternalName": null,
    "Description": null,
    "Type": "Development",
    "HostingType": "Standard",
    "ProvisionType": "Manual",
    "Password": null,
    "CredentialStoreId": null,
    "UserId": 45,
    "Enabled": true,
    "CredentialType": null,
    "RobotEnvironments": "",
    "IsExternalLicensed": false,
    "LimitConcurrentExecution": false,
    "Id": 216,
    "ExecutionSettings": {
        "ResolutionHeight": 0,
        "ResolutionDepth": 0,
        "FontSmoothing": false,
        "AutoDownloadProcess": false
    }
}
{
    "@odata.context": "/odata/$metadata#Robots/$entity",
    "LicenseKey": "fc157179-3724-4bb0-acd2-8261bef82d01",
    "MachineName": "CAPETRINA",
    "MachineId": 15,
    "Name": "Gustavee",
    "Username": "uipath\\john.smith",
    "ExternalName": null,
    "Description": null,
    "Type": "Development",
    "HostingType": "Standard",
    "ProvisionType": "Manual",
    "Password": null,
    "CredentialStoreId": null,
    "UserId": 45,
    "Enabled": true,
    "CredentialType": null,
    "RobotEnvironments": "",
    "IsExternalLicensed": false,
    "LimitConcurrentExecution": false,
    "Id": 216,
    "ExecutionSettings": {
        "ResolutionHeight": 0,
        "ResolutionDepth": 0,
        "FontSmoothing": false,
        "AutoDownloadProcess": false
    }
}

Récupération de tous les Robots qui peuvent exécuter un processus spécifique​

L'exemple suivant montre une requête effectuée à /odata/Robots/UiPath.Server.Configuration.OData.GetRobotsForProcess. Elle permet d'identifier, à la volée, les Robots qui peuvent exécuter le paquet avec l'ID input_output_arguments_example.

Obtenir

/odata/Robots/UiPath.Server.Configuration.OData.GetRobotsForProcess(processId='input_output_arguments_example')

En-têtes de requête.​

Clé (Key)Valeur (Value)
AutorisationPorteur

Codes de réponse​

200 OK

Corps de la réponse​

{
  "@odata.context": "/odata/$metadata#Robots",
  "@odata.count": 2,
  "value": [
    {
      "LicenseKey": null,
      "MachineName": "DESKTOP-ASBD",
      "MachineId": 129,
      "Name": "Stan",
      "Username": "Alex",
      "Description": null,
      "Version": null,
      "Type": "Unattended",
      "HostingType": "Standard",
      "Password": null,
      "RobotEnvironments": "doc_env,a_invoke_env,Group1",
      "Id": 759,
      "ExecutionSettings": null
    },
    {
      "LicenseKey": null,
      "MachineName": "Doc",
      "MachineId": 1066,
      "Name": "DocBot",
      "Username": "uipath\\documentation",
      "Description": null,
      "Version": "18.3.0.558",
      "Type": "NonProduction",
      "HostingType": "Standard",
      "Password": null,
      "RobotEnvironments": "doc_env",
      "Id": 1684,
      "ExecutionSettings": null
    }
  ]
}
{
  "@odata.context": "/odata/$metadata#Robots",
  "@odata.count": 2,
  "value": [
    {
      "LicenseKey": null,
      "MachineName": "DESKTOP-ASBD",
      "MachineId": 129,
      "Name": "Stan",
      "Username": "Alex",
      "Description": null,
      "Version": null,
      "Type": "Unattended",
      "HostingType": "Standard",
      "Password": null,
      "RobotEnvironments": "doc_env,a_invoke_env,Group1",
      "Id": 759,
      "ExecutionSettings": null
    },
    {
      "LicenseKey": null,
      "MachineName": "Doc",
      "MachineId": 1066,
      "Name": "DocBot",
      "Username": "uipath\\documentation",
      "Description": null,
      "Version": "18.3.0.558",
      "Type": "NonProduction",
      "HostingType": "Standard",
      "Password": null,
      "RobotEnvironments": "doc_env",
      "Id": 1684,
      "ExecutionSettings": null
    }
  ]
}

Récupération des journaux du robot en fonction du nom du robot​

L'exemple suivant vous permet d'afficher les journaux du Robot nommé DocBot.

Obtenir

/odata/RobotLogs?$top=100&$skip=200&$filter=RobotName eq 'DocBot'

En-têtes de requête.​

Clé (Key)Valeur (Value)
AutorisationPorteur

Codes de réponse​

200 OK

Corps de la réponse​

{
    "@odata.context": "/odata/$metadata#RobotLogs",
    "@odata.count": 202,
    "value": [
        {
            "Level": "Info",
            "WindowsIdentity": "UIPATH\\john.smith",
            "ProcessName": "TestingSequence_DOC",
            "TimeStamp": "2019-10-14T13:55:18.2473626Z",
            "Message": "TestingSequence_DOC execution started",
            "JobKey": "e49c0012-ee01-45e4-884c-0ce1f2aa6fbb",
            "RawMessage": "{\r\n  \"message\": \"TestingSequence_DOC execution started\",\r\n  \"level\": \"Information\",\r\n  \"logType\": \"Default\",\r\n  \"timeStamp\": \"2019-10-14T13:55:18.2473626+00:00\",\r\n  \"fingerprint\": \"972a32c3-95d9-4264-ae5d-af589bf4f0b5\",\r\n  \"windowsIdentity\": \"UIPATH\\\\petrina.calota\",\r\n  \"machineName\": \"LAPTOP-IN7198N3\",\r\n  \"processName\": \"TestingSequence_DOC\",\r\n  \"processVersion\": \"1.1.7024.37929\",\r\n  \"jobId\": \"e49c0012-ee01-45e4-884c-0ce1f2aa6fbb\",\r\n  \"robotName\": \"G\",\r\n  \"machineId\": 229978,\r\n  \"organizationUnitId\": 67543,\r\n  \"fileName\": \"Main\"\r\n}",
            "RobotName": "DocBot",
            "MachineId": 229978,
            "Id": 0
        },
        {
            "Level": "Info",
            "WindowsIdentity": "UIPATH\\john.smith",
            "ProcessName": "TestingSequence_DOC",
            "TimeStamp": "2019-10-14T13:57:21.4985672Z",
            "Message": "TestingSequence_DOC execution ended",
            "JobKey": "e49c0012-ee01-45e4-884c-0ce1f2aa6fbb",
            "RawMessage": "{\r\n  \"message\": \"TestingSequence_DOC execution ended\",\r\n  \"level\": \"Information\",\r\n  \"logType\": \"Default\",\r\n  \"timeStamp\": \"2019-10-14T13:57:21.4985672+00:00\",\r\n  \"fingerprint\": \"e973b4f2-deec-4290-978b-3a8af0769b35\",\r\n  \"windowsIdentity\": \"UIPATH\\\\petrina.calota\",\r\n  \"machineName\": \"LAPTOP-IN7198N3\",\r\n  \"processName\": \"TestingSequence_DOC\",\r\n  \"processVersion\": \"1.1.7024.37929\",\r\n  \"jobId\": \"e49c0012-ee01-45e4-884c-0ce1f2aa6fbb\",\r\n  \"robotName\": \"G\",\r\n  \"machineId\": 229978,\r\n  \"organizationUnitId\": 67543,\r\n  \"totalExecutionTimeInSeconds\": 123,\r\n  \"totalExecutionTime\": \"00:02:03\",\r\n  \"fileName\": \"Main\"\r\n}",
            "RobotName": "DocBot",
            "MachineId": 229978,
            "Id": 0
        }
  ]
}
{
    "@odata.context": "/odata/$metadata#RobotLogs",
    "@odata.count": 202,
    "value": [
        {
            "Level": "Info",
            "WindowsIdentity": "UIPATH\\john.smith",
            "ProcessName": "TestingSequence_DOC",
            "TimeStamp": "2019-10-14T13:55:18.2473626Z",
            "Message": "TestingSequence_DOC execution started",
            "JobKey": "e49c0012-ee01-45e4-884c-0ce1f2aa6fbb",
            "RawMessage": "{\r\n  \"message\": \"TestingSequence_DOC execution started\",\r\n  \"level\": \"Information\",\r\n  \"logType\": \"Default\",\r\n  \"timeStamp\": \"2019-10-14T13:55:18.2473626+00:00\",\r\n  \"fingerprint\": \"972a32c3-95d9-4264-ae5d-af589bf4f0b5\",\r\n  \"windowsIdentity\": \"UIPATH\\\\petrina.calota\",\r\n  \"machineName\": \"LAPTOP-IN7198N3\",\r\n  \"processName\": \"TestingSequence_DOC\",\r\n  \"processVersion\": \"1.1.7024.37929\",\r\n  \"jobId\": \"e49c0012-ee01-45e4-884c-0ce1f2aa6fbb\",\r\n  \"robotName\": \"G\",\r\n  \"machineId\": 229978,\r\n  \"organizationUnitId\": 67543,\r\n  \"fileName\": \"Main\"\r\n}",
            "RobotName": "DocBot",
            "MachineId": 229978,
            "Id": 0
        },
        {
            "Level": "Info",
            "WindowsIdentity": "UIPATH\\john.smith",
            "ProcessName": "TestingSequence_DOC",
            "TimeStamp": "2019-10-14T13:57:21.4985672Z",
            "Message": "TestingSequence_DOC execution ended",
            "JobKey": "e49c0012-ee01-45e4-884c-0ce1f2aa6fbb",
            "RawMessage": "{\r\n  \"message\": \"TestingSequence_DOC execution ended\",\r\n  \"level\": \"Information\",\r\n  \"logType\": \"Default\",\r\n  \"timeStamp\": \"2019-10-14T13:57:21.4985672+00:00\",\r\n  \"fingerprint\": \"e973b4f2-deec-4290-978b-3a8af0769b35\",\r\n  \"windowsIdentity\": \"UIPATH\\\\petrina.calota\",\r\n  \"machineName\": \"LAPTOP-IN7198N3\",\r\n  \"processName\": \"TestingSequence_DOC\",\r\n  \"processVersion\": \"1.1.7024.37929\",\r\n  \"jobId\": \"e49c0012-ee01-45e4-884c-0ce1f2aa6fbb\",\r\n  \"robotName\": \"G\",\r\n  \"machineId\": 229978,\r\n  \"organizationUnitId\": 67543,\r\n  \"totalExecutionTimeInSeconds\": 123,\r\n  \"totalExecutionTime\": \"00:02:03\",\r\n  \"fileName\": \"Main\"\r\n}",
            "RobotName": "DocBot",
            "MachineId": 229978,
            "Id": 0
        }
  ]
}
Remarque :

Les requêtes GET pour les journaux du Robot stockés à l'aide d'Elasticsearch ne récupèrent que les 10 000 premières entrées. Cela est dû à une limitation Elasticsearch et ne se produit pas si vous utilisez SQL.

L'utilisation des paramètres $top et $skip qui vont au-delà de la limite de 10 000 renvoie le message d'erreur suivant : « La profondeur de pagination est limitée dans Elasticsearch par le paramètre d'index max_result_window. Assurez-vous que la valeur de la valeur "Ignorer + prendre" est inférieure à 10000".

Seules les combinaisons condition-verbe suivantes sont prises en charge lors du paramétrage des requêtes de journaux du Robot stockées à l'aide d'Elasticsearch : RobotName eq, JobKey eq, MachineId eq, Level ge, TimeStamp gt.

Modification des informations du Robot​

L'exemple suivant modifie le type et le nom du Robot avec l'ID 749 et modifie la configuration de ses paramètres d'exécution. N'oubliez pas de mettre X-UIPATH-OrganizationUnitId dans l'en-tête de la demande, ainsi que l'ID du robot et le nom de la machine dans le corps de la demande.

Remarque :

Lorsque vous effectuez des requêtes PUT au point de terminaison des Robots, tenez compte des points suivants :

  • le nom d'utilisateur et le mot de passe du Robot ne sont pas mis à jour lorsque vous envoyez le même nom d'utilisateur et un mot de passe null ou vide.
  • Si un nouveau nom d'utilisateur est envoyé avec un mot de passe null ou vide, les identifiants du Robot sont mis à jour et le nouveau nom d'utilisateur est utilisé.

METTRE

/odata/Robots(749)

En-têtes de requête.​

Clé (Key)Valeur (Value)
AutorisationPorteur
X-UIPATH-OrganizationUnitIdID du dossier du conteneur.

Par exemple : 36886.

Corps de la requête​

{
  "LicenseKey": "8ec4t984-b2d7-44f2-b5be-0a64ee9a487b",
  "MachineName": "MBOBOC",
  "Name": "DocBot",
  "Type": "Development",
  "Id": 749,
  "Username": "UIPATH\\JustAnotherRobot",
  "ExecutionSettings":{
        "TracingLevel":"Information",
        "StudioNotifyServer":true,
        "LoginToConsole":false,
        "ResolutionWidth":0,
        "ResolutionHeight":0,
        "ResolutionDepth":0,
        "FontSmoothing":false,
        "AutoDownloadProcess":false
    }
}
{
  "LicenseKey": "8ec4t984-b2d7-44f2-b5be-0a64ee9a487b",
  "MachineName": "MBOBOC",
  "Name": "DocBot",
  "Type": "Development",
  "Id": 749,
  "Username": "UIPATH\\JustAnotherRobot",
  "ExecutionSettings":{
        "TracingLevel":"Information",
        "StudioNotifyServer":true,
        "LoginToConsole":false,
        "ResolutionWidth":0,
        "ResolutionHeight":0,
        "ResolutionDepth":0,
        "FontSmoothing":false,
        "AutoDownloadProcess":false
    }
}

Codes de réponse​

200 OK

Suppression d'un Robot​

Suppression d'un Robot unique​

Pour supprimer un robot spécifique, effectuez une demande DELETE au point de terminaison odata/Robots({robot_id}).

Supprimer (Delete)

/odata/Robots(79)

En-têtes de requête.​
Clé (Key)Valeur (Value)
AutorisationPorteur
Codes de réponse​

204 Aucun contenu

Suppression de plusieurs Robots​

Pour supprimer plusieurs Robots simultanément, effectuez une requête POST au point de terminaison /Robots/UiPath.Server.Configuration.OData.DeleteBulk.

Publier

/odata/Robots/UiPath.Server.Configuration.OData.DeleteBulk

En-têtes de requête.​
Clé (Key)Valeur (Value)
AutorisationPorteur
Corps de la requête​
{
    "robotIds": [119, 120]
}
{
    "robotIds": [119, 120]
}
Codes de réponse​

204 Aucun contenu

Récupération des informations du robot​

Récupérez les robots des dossiers classiques et leurs détails en effectuant une requête GET au point de terminaison /odata/Robots . Notez que ce point de terminaison renvoie la valeur null pour le paramètre ExecutionSettings . Utilisez le point de terminaison /odata/Robots(Id) comme solution de contournement pour récupérer les paramètres d'exécution d'un robot particulier.

Obtenir

{OrchestratorURL}/odata/RobotLogs?$top=100&$skip=200&$filter=RobotName eq 'DocBot'

En-têtes de requête.​

Clé (Key)Valeur (Value)
AutorisationPorteur

Codes de réponse​

200 OK

Corps de la réponse​

{
    "@odata.context": "{OrchestratorURL}/odata/$metadata#Robots",
    "@odata.count": 1,
    "value": [
        {
            "LicenseKey": null,
            "MachineName": "CAPETRINA",
            "MachineId": 15,
            "Name": "Gustave",
            "Username": "uipath\\john.smith",
            "ExternalName": null,
            "Description": null,
            "Type": "Development",
            "HostingType": "Standard",
            "ProvisionType": "Manual",
            "Password": null,
            "CredentialStoreId": null,
            "UserId": 45,
            "Enabled": true,
            "CredentialType": null,
            "RobotEnvironments": "",
            "IsExternalLicensed": false,
            "LimitConcurrentExecution": false,
            "Id": 8,
            "ExecutionSettings": null
        }
    ]
}
{
    "@odata.context": "{OrchestratorURL}/odata/$metadata#Robots",
    "@odata.count": 1,
    "value": [
        {
            "LicenseKey": null,
            "MachineName": "CAPETRINA",
            "MachineId": 15,
            "Name": "Gustave",
            "Username": "uipath\\john.smith",
            "ExternalName": null,
            "Description": null,
            "Type": "Development",
            "HostingType": "Standard",
            "ProvisionType": "Manual",
            "Password": null,
            "CredentialStoreId": null,
            "UserId": 45,
            "Enabled": true,
            "CredentialType": null,
            "RobotEnvironments": "",
            "IsExternalLicensed": false,
            "LimitConcurrentExecution": false,
            "Id": 8,
            "ExecutionSettings": null
        }
    ]
}

Cette page vous a-t-elle été utile ?

Connecter

Besoin d'aide ? Assistance

Vous souhaitez apprendre ? UiPath Academy

Vous avez des questions ? UiPath Forum

Rester à jour