Verrous de document
Pour demander un verrou de document pour les applications basées sur ACP, le gestionnaire TSF appelle ITextStoreACP::RequestLock. Pour les applications basées sur des ancres, le gestionnaire TSF appelle ITextStoreAnchor::RequestLock. L’application accorde le verrou de document en appelant ITextStoreACPSink::OnLockGranted (applications acp) ou ITextStoreAnchorSink::OnLockGranted (applications basées sur des ancres) à l’intérieur de RequestLock. Le verrou est valide uniquement pendant l’appel OnLockGranted . Quand OnLockGranted est retourné, le document est considéré comme déverrouillé.
Il existe deux types de verrous de document : en lecture seule et en lecture-écriture. Un verrou en lecture seule permet au gestionnaire de lire le texte, mais il ne peut pas modifier ou insérer du texte. Un verrou en lecture/écriture permet au gestionnaire de lire, de modifier et d’insérer du texte. Un verrou en lecture seule est demandé en spécifiant TS_LF_READ dans dwFlags. Un verrou en lecture/écriture est demandé en spécifiant TS_LF_READWRITE dans dwFlags.
Une demande de verrouillage peut être synchrone ou asynchrone. Le responsable demande un verrou synchrone à l’aide de l’indicateur TS_LF_SYNC dans dwFlags. Si cet indicateur n’est pas présent, la requête est asynchrone.
Lorsque RequestLock est appelé, l’application doit déterminer si le document est actuellement verrouillé. Si le document n’est pas verrouillé et qu’il n’existe aucune autre raison de refuser le verrou, l’application doit définir phrSession sur S_OK et retourner S_OK.
Si le document est verrouillé et que la demande de verrouillage est synchrone, l’application doit définir phrSession sur TS_E_SYNCHRONOUS et retourner S_OK. Cela indique qu’une demande synchrone ne peut pas être accordée.
Si le document est verrouillé et que la demande de verrouillage est asynchrone, l’application doit mettre la demande en file d’attente, définir phrSession sur TS_S_ASYNC et retourner S_OK. Lorsque le document devient disponible, l’application doit supprimer la demande de la file d’attente et appeler OnLockGranted. Cette mise en file d’attente des demandes de verrouillage est facultative ; il existe un scénario qu’une application doit prendre en charge. Si le document a un verrou en lecture seule, la nouvelle demande de verrouillage est en lecture/écriture et la demande est asynchrone, l’application a appelé dans OnLockGranted , ce qui a provoqué un appel entrant à RequestLock. L’application doit définir phrSession sur TS_S_ASYNC et retourner S_OK. Une fois l’appel à OnLockGranted retourné, l’application doit traiter la demande de mise à niveau en appelant à nouveau OnLockGranted avec TS_LF_READWRITE.
L’application doit s’assurer que le type de verrou approprié existe avant d’autoriser l’accès au document. Par exemple, l’application doit vérifier qu’un document a au moins un verrou en lecture seule avant d’autoriser ITextStoreACP::GetText ou ITextStoreAnchor::GetText à continuer. Si le verrou approprié n’existe pas, l’application doit retourner TF_E_NOLOCK.