Comment ajouter des événements d'horaire (tels que les congés) via le CommunityWebAPI à partir d'un système externe. L'utilisation des fonctions de l'API RESTful nécessite que le lecteur comprenne comment créer des requêtes HTTP et comment consommer des données au format JSON.
Intégration des événements communautaires
Community prend en charge une fonction API exposée par le service RESTful CommunityWebAPI. Les informations ci-dessous devraient vous permettre d'ajouter avec succès des événements via le service RESTful de manière programmatique.
Cette interface décrit la création d'"événements récurrents", qui peuvent être des événements d'une seule journée (vacances, maladie, etc.) ou des événements qui se répètent sur une longue période, mais seulement certains jours spécifiques (par exemple, entre le 1er janvier et le 31 mars, j'ai un rendez-vous médical récurrent tous les vendredis entre 9h00 et 11h00).
Dans les cas où l'événement est un événement d'une seule journée, il suffit de fournir les mêmes dates et heures de et à, mais assurez-vous que les indicateurs d? sont tous réglés sur vrai.
Dans l'exemple plus complexe, la valeur de la date de début serait "2017/01/01"; la valeur de la date de fin serait "2017/03/31"; la valeur de l'heure de début serait "09:00:00"; la valeur de l'heure de fin serait "11:00:00"; et les indicateurs d? seraient (en supposant que le lundi soit le premier jour de la semaine) d1=false d2=false d3=false d4=false d5=true d6=false d7=false.
Interface API
Le verbe est POST et le point d'entrée est http://<servername>/CommunityWebApi/api/SingleRecurringEvent
L'exécution de l'appel renvoie un objet WebApiResult standard WFMSG (au format JSON) qui inclut les membres suivants :
Succès – booléen indiquant que l'opération a réussi.
Données – si réussi, contient l'objet RecurringEvent nouvellement créé (décrit ci-dessous). Si non réussi, ce membre est NULL.
Message – si non réussi, contient l'exception levée ; sinon, ce membre est vide.
RésultatException – si une exception est levée, c'est le corps complet de l'exception ; sinon, ce membre est NULL.
*Notez que Community prend en charge l'utilisation de déploiements CommunityWebAPI simultanés pour l'intégration dans une architecture sécurisée ainsi que le déploiement d'une DMZ ou d'un appareil dédié pour les interfaces externes.
En-tête d'authentification requis
La version 4.3 et supérieure de Community Web API nécessite un jeton d'authentification pour chaque point d'entrée passé en tant que valeur d'en-tête personnalisé. Les applications clientes peuvent récupérer le jeton d'authentification initial à partir de l'appel POST AuthenticateEx (décrit dans un autre document) dans une variable membre nommée “authToken.” Les applications clientes passent ensuite cette valeur dans l'en-tête personnalisé “WFMSGAPIKEY” lors des appels suivants. Notez que le jeton d'authentification expirera après 20 minutes.
De plus, les applications clientes peuvent récupérer la version “rafraîchie” du jeton à chaque appel en lisant la valeur de l'en-tête personnalisé du même nom (“WFMSGAPIKEY”).
Paires Nom/Valeur
Le tableau suivant contient les paires nom/valeur qui doivent être incluses dans la soumission du formulaire pour l'appel RESTful. Notez que pour insérer de nouveaux agents dans la base de données, la valeur transactionFlagId doit être réglée sur 1.
| Membre de la classe | Type | Req? | Description |
| transactionFlagId | Int | Oui |
Indique le type de transaction POST à effectuer. Les valeurs valides sont : 1 : Insérer |
| agentId | Int | Oui | Sa_agent_id à attribuer au(x) nouvel(s) événement(s) créé(s). |
| eventTypeId | Int | Oui | Sa_exception_type_id des événements. |
| startTime | DateTime | Oui |
Une paire date/heure au format AAAA/MM/JJ HH:MM (horloge de 24 heures) qui indique l'heure de début de l'événement. Notez que, pour ce membre, l'application ignore la partie date. Exemple : commencer un événement à 8h00 1900-01-01 08:00:00 |
| endTime | DateTime | Oui |
Une paire date/heure au format AAAA/MM/JJ HH:MM (horloge de 24 heures) qui indique l'heure de fin de l'événement. Notez que, pour ce membre, l'application ignore la partie date.
Exemple : terminer un événement à 17h00 1900-01-01 17:00:00 |
| description | String | Non | Fournit le champ de description de l'événement |
| location | String | Non | Fournit le champ de localisation de l'événement |
| scheduleId | Int | Non | Si NULL, alors cet événement est placé sur l'horaire publié. Si non NULL, alors cet événement est placé sur l'horaire de travail où sa_schedule_id = cette valeur. |
| startDate | DateTime | Oui |
Une valeur de date au format AAAA/MM/JJ qui indique la date de début de l'événement. Notez que, pour ce membre, l'application ignore la partie heure (si fournie). Exemple : commencer l'événement le 1er mai 2017 2017/05/01 |
| endDate | DateTime | Oui |
Une valeur de date au format AAAA/MM/JJ qui indique la date de fin de l'événement. Notez que, pour ce membre, l'application ignore la partie heure (si fournie). Exemple : terminer l'événement le 4 mai 2017 2017/05/04 |
| d1 | Bool | Oui | Une valeur booléenne qui indique si cet événement doit se produire le premier jour de la semaine (généralement le lundi). |
| d2 | Bool | Oui | Une valeur booléenne qui indique si cet événement doit se produire le deuxième jour de la semaine. |
| d3 | Bool | Oui | Une valeur booléenne qui indique si cet événement doit se produire le troisième jour de la semaine. |
| d4 | Bool | Oui | Une valeur booléenne qui indique si cet événement doit se produire le quatrième jour de la semaine. |
| d5 | Bool | Oui | Une valeur booléenne qui indique si cet événement doit se produire le cinquième jour de la semaine. |
| d6 | Bool | Oui | Une valeur booléenne qui indique si cet événement doit se produire le sixième jour de la semaine. |
| d7 | Bool | Oui | Une valeur booléenne qui indique si cet événement doit se produire le septième jour de la semaine. |
| timeZoneId | Int | Non | Le fuseau horaire de l'événement; généralement, ce sera l'heure locale de l'agent, mais si NULL, l'application utilise par défaut le fuseau horaire de l'entreprise. |
| responsibleUserId | Int | Oui | Le sa_agent_id de l'utilisateur ayant suffisamment de privilèges pour apporter des modifications à l'horaire de cet agent. |
Exemple de déclaration de classe pour les paires nom/valeur
(comme décrit dans le tableau ci-dessus)
public class SingleRecurringEventPostParams
{
/// <summary>
/// transactionFlagId détermine comment l'événement sera modifié.
/// </summary>
public int transactionFlagId { get; set; }
/// <summary>
/// agentId
/// </summary>
public int agentId { get; set; }
/// <summary>
/// eventTypeId
/// </summary>
public int eventTypeId { get; set; }
/// <summary>
/// startTime
/// </summary>
public DateTime startTime { get; set; }
/// <summary>
/// endTime
/// </summary>
public DateTime endTime { get; set; }
/// <summary>
/// description
/// </summary>
public string description { get; set; }
/// <summary>
/// location
/// </summary>
public string location { get; set; }
/// <summary>
/// scheduleId
/// </summary>
public int? scheduleId { get; set; }
/// <summary>
/// startDate
/// </summary>
public DateTime startDate { get; set; }
/// <summary>
/// endDate
/// </summary>
public DateTime endDate { get; set; }
/// <summary>
/// d1
/// </summary>
public bool d1 { get; set; }
/// <summary>
/// d2
/// </summary>
public bool d2 { get; set; }
/// <summary>
/// d3
/// </summary>
public bool d3 { get; set; }
/// <summary>
/// d4
/// </summary>
public bool d4 { get; set; }
/// <summary>
/// d5
/// </summary>
public bool d5 { get; set; }
/// <summary>
/// d6
/// </summary>
public bool d6 { get; set; }
/// <summary>
/// d7
/// </summary>
public bool d7 { get; set; }
/// <summary>
/// timeZoneId
/// </summary>
public int? timeZoneId { get; set; }
/// <summary>
/// ID de l'utilisateur responsable - utilisé à des fins d'audit.
/// </summary>
public int? responsibleUserId { get; set; }
}
Définition de la classe RecurringEvent
(membre WebApiResult.Data du verbe POST avec les paramètres ci-dessus)
#region Membres de la classe
[DataMember]
/// <summary>
/// De la procédure Get, paramètre @StartTime [6] [Pas une clé]
/// </summary>
public DateTime? StartTime { get; set; }
[DataMember]
/// <summary>
/// De la procédure Get, paramètre @CreateDate [18] [Pas une clé]
/// </summary>
public DateTime? CreateDate { get; set; }
[DataMember]
/// <summary>
/// De la procédure Get, paramètre @AssignmentType [20] [Pas une clé]
/// </summary>
public RecurringEventAssignmentTypes AssignmentType { get; set; }
[DataMember]
/// <summary>
/// De la procédure Get, paramètre @RecurringEventId [0] [Pas une clé]
/// </summary>
public int? RecurringEventId { get; set; }
[DataMember]
/// <summary>
/// De la procédure Get, paramètre @EndDate [8] [Pas une clé]
/// </summary>
public DateTime? EndDate { get; set; }
[DataMember]
/// <summary>
/// De la procédure Get, paramètre @AllDay [9] [Pas une clé]
/// </summary>
public bool? AllDay { get; set; }
[DataMember]
/// <summary>
/// De la procédure Get, paramètre @TimeZoneId [0] [Pas une clé]
/// </summary>
public int? TimeZoneId { get; set; }
[DataMember]
/// <summary>
/// De la procédure Get, paramètre @ScheduleId [1] [Pas une clé]
/// </summary>
public int? ScheduleId { get; set; }
[DataMember]
/// <summary>
/// De la procédure Get, paramètre @ProcessAgentId [23] [Pas une clé]
/// </summary>
public int? ProcessAgentId { get; set; }
[DataMember]
/// <summary>
/// De la procédure Get, paramètre @ProcessDate [22] [Pas une clé]
/// </summary>
public DateTime? ProcessDate { get; set; }
[DataMember]
/// <summary>
/// De la procédure Get, paramètre @Description [5] [Pas une clé]
/// </summary>
public string Description { get; set; }
[DataMember]
/// <summary>
/// De la procédure Get, paramètre @StartDate [7] [Pas une clé]
/// </summary>
public DateTime? StartDate { get; set; }
[DataMember]
/// <summary>
/// De la procédure Get, paramètre @ExceptionTypeId [2] [Pas une clé]
/// </summary>
public int? ExceptionTypeId { get; set; }
[DataMember]
/// <summary>
/// De la procédure Get, paramètre @BaseDate [17] [Pas une clé]
/// </summary>
public DateTime? BaseDate { get; set; }
[DataMember]
/// <summary>
/// De la procédure Get, paramètre @IncludeDayOfWeek4 [13] [Pas une clé]
/// </summary>
public bool? IncludeDayOfWeek4 { get; set; }
[DataMember]
/// <summary>
/// De la procédure Get, paramètre @IncludeDayOfWeek5 [14] [Pas une clé]
/// </summary>
public bool? IncludeDayOfWeek5 { get; set; }
[DataMember]
/// <summary>
/// De la procédure Get, paramètre @IncludeDayOfWeek6 [15] [Pas une clé]
/// </summary>
public bool? IncludeDayOfWeek6 { get; set; }
[DataMember]
/// <summary>
/// De la procédure Get, paramètre @IncludeDayOfWeek7 [16] [Pas une clé]
/// </summary>
public bool? IncludeDayOfWeek7 { get; set; }
[DataMember]
/// <summary>
/// De la procédure Get, paramètre @Location [4] [Pas une clé]
/// </summary>
public string Location { get; set; }
[DataMember]
/// <summary>
/// Du Get Procedure, paramètre @IncludeDayOfWeek1 [10] [Pas une clé]
/// </summary>
public bool? IncludeDayOfWeek1 { get; set; }
[DataMember]
/// <summary>
/// Du Get Procedure, paramètre @IncludeDayOfWeek2 [11] [Pas une clé]
/// </summary>
public bool? IncludeDayOfWeek2 { get; set; }
[DataMember]
/// <summary>
/// Du Get Procedure, paramètre @IncludeDayOfWeek3 [12] [Pas une clé]
/// </summary>
public bool? IncludeDayOfWeek3 { get; set; }
[DataMember]
/// <summary>
/// Du Get Procedure, paramètre @LastUpdate [19] [Pas une clé]
/// </summary>
public DateTime? LastUpdate { get; set; }
[DataMember]
/// <summary>
/// Du Get Procedure, paramètre @Duration [3] [Pas une clé]
/// </summary>
public double? Duration { get; set; }
[DataMember]
/// <summary>
/// Du Get Procedure, paramètre @ProcessAgentName [24] [Pas une clé]
/// </summary>
public string ProcessAgentName { get; set; }
[DataMember]
/// <summary>
/// Du Get Procedure, paramètre @Processed [21] [Pas une clé]
/// </summary>
public bool? Processed { get; set; }
public DataTable ValidationResults { get; set; }
public DataTable AdjustedEvents { get; set; }
public DataTable CreatedEvents { get; set; }
/// <summary>
/// Créer une clé dynamique pour utilisation dans les services d'audit.
/// </summary>
private dynamic key = new System.Dynamic.ExpandoObject();
#endregion