Pour éviter que plusieurs utilisateurs ne modifient le même fichier en même temps, l’utilisateur doit extraire ou verrouiller un fichier avant de le mettre à jour. (Les opérations d’extraction et d’entrée sont respectivement équivalentes au verrouillage et au déverrouillage).
L’extraction d’un fichier confère des droits de mise à jour exclusifs à l’utilisateur qui a extrait l’élément. Lorsqu’un utilisateur extrait un fichier, il détient un verrou d’écriture permanent sur ce fichier.
Nous disposons de trois types de verrou :
- Verrouillage permanent
Un verrou persistant est persistant et lié à un nom d’utilisateur, et non à une session connectée. Un verrou persistant reste en vigueur jusqu’à ce qu’un utilisateur disposant du privilège SuperCheckIn déverrouille votre article. En outre, le même utilisateur est autorisé à effectuer des modifications dans n’importe quelle session authentifiée. Si vous vous connectez à plusieurs sessions en utilisant le même nom d’utilisateur, chaque session est autorisée à mettre à jour le verrou en écriture.
- Verrouillage transitoire
Le verrou transitoire est volatil (il expire au bout de 30 minutes à moins d’être actualisé – voir RefreshLock), un verrou transitoire, comme un verrou persistant, empêche toute personne qui n’a pas d’identifiant de verrou valide d’apporter des modifications à un fichier.
- Et verrou en lecture seule
La lecture seule est un verrou spécial qui empêche quiconque de modifier un fichier.
Vous trouverez ci-dessous les actions possibles en fonction du type de serrure.
| Action | Verrouillage: Permanent ou transitoire | Lecture seule |
| Télécharger une nouvelle version | Oui si propriétaire | Non |
| Renommer un fichier | Non | Non |
| Déplacer un fichier | Oui | Oui |
| Supprimer un fichier | Non | Non |


Vérouiller
L’opération de verrouillage verrouille un fichier afin qu’il puisse être modifié par l’instance d’application cliente qui a demandé le verrouillage. Lorsqu’il est verrouillé, un fichier ne doit pas être accessible en écriture par d’autres applications.
Paramètres :
- projectId (chaîne) Une chaîne représentant l’identifiant unique du projet, en utilisant 32 caractères hexadécimaux.
- inodeId (string) Une chaîne représentant l’identifiant unique du fichier, en utilisant 32 caractères hexadécimaux.
Réponse
Si le fichier est actuellement déverrouillé, le serveur doit verrouiller le fichier et renvoyer un code d’état HTTP 200 OK.
Si le fichier est actuellement verrouillé, le serveur renvoie un statut HTTP 401 Non autorisé avec un code d’erreur 22.
Dans tous les autres cas, le serveur doit renvoyer une réponse « conflit de verrouillage » (500).
Déverrouiller
L’opération de déverrouillage libère le verrou d’un fichier.
Les clients font généralement une demande de verrouillage pour verrouiller un fichier avant d’appeler cette opération. Le client transmet l’ID de l’Inode précédemment verrouillé dans la demande de verrouillage.
Paramètres :
- projectId (chaîne) Une chaîne qui représente l’identifiant unique du projet, en utilisant 32 caractères hexadécimaux.
- inodeId (chaîne) Une chaîne représentant l’identifiant unique du fichier, en utilisant 32 caractères hexadécimaux.
Réponse :
Si le fichier est actuellement verrouillé par l’utilisateur demandeur, le serveur doit déverrouiller le fichier et renvoyer un code d’état HTTP 200.
Si le fichier est verrouillé par un autre utilisateur, le serveur renvoie un statut HTTP 401 Un authorized avec un code d’erreur 22.
Dans tous les autres cas, le serveur doit renvoyer une réponse « conflit de verrouillage » (statut HTTP 500).
Voler le verrouillage
L’opération de vol du verrouillage force le déverrouillage d’un fichier et le reverrouille pour l’utilisateur connecté. Cette opération ne peut être demandée que sur un verrou PERSISTANT.
Paramètres:
- projectId (chaîne) Une chaîne qui représente l’identifiant unique du projet, en utilisant 32 caractères hexadécimaux.
- inodeId (chaîne) Une chaîne représentant l’identifiant unique du fichier, en utilisant 32 caractères hexadécimaux.
Réponse:
Exemple API C#
// Login to the server
BimfmApi bimfmapi = new BimfmApi();
bimfmapi.mHttpRqs.BimFmUrl = "https://dev.edifycad.com/api";
Tokens myToken = bimfmapi.token(
new Login() {
username = id,
password = password,
grant_type = "password"
}).Result;
...
// Lock a file
try
{
ResponseApi<ProjectInodeLockDto> lock = bimfmapi.project.Checkout(projectId, inodeId);
if (folders.Status != 200)
{
switch (folders.ErrorCode)
{
case ERROR_CODE.FILE_ALREADY_LOCK:
logger.Error("File already lock by another user.");
break;
case ERROR_CODE.LOCK_CONFLICT:
logger.Error("File can be lock.");
break;
default:
logger.Error("Un-managed exception.");
}
}
}
}
catch (Exception ex)
{
...
}
...
// Upload a new version
bimfmapi.project.UploadNewVersionRequest("myfile.qsp", filecontent, projectId, folderId, inodeId);
...
// Unlock file
try
{
ResponseApi<ProjectInodeLockDto> lock = bimfmapi.project.Checkin(projectId, inodeId);
if (folders.Status != 200)
{
switch (folders.ErrorCode)
{
case ERROR_CODE.FILE_NOT_LOCK:
logger.Error("File not lock. Please checkout file before checkin.");
break;
case ERROR_CODE.LOCK_CONFLICT:
logger.Error("File can be lock.");
break;
default:
logger.Error("Un-managed exception.");
}
}
}
}
catch (Exception ex)
{
...
}