Bloqueos de documento
Para solicitar un bloqueo de documento para aplicaciones basadas en ACP, el administrador de TSF llama a ITextStoreACP::RequestLock. En el caso de las aplicaciones basadas en anclajes, el administrador de TSF llama a ITextStoreAnchor::RequestLock. La aplicación concede el bloqueo de documento llamando a ITextStoreACPSink::OnLockGranted (aplicaciones basadas en ACP) o ITextStoreAnchorSink::OnLockGranted (aplicaciones basadas en anclajes) dentro de RequestLock. El bloqueo solo es válido durante la llamada a OnLockGranted . Cuando Se devuelve OnLockGranted , el documento se considera desbloqueado.
Hay dos tipos de bloqueos de documento, de solo lectura y de lectura y escritura. Un bloqueo de solo lectura permite al administrador leer el texto, pero no puede modificar ni insertar texto. Un bloqueo de lectura y escritura permite al administrador leer, modificar e insertar texto. Se solicita un bloqueo de solo lectura especificando TS_LF_READ en dwFlags. Se solicita un bloqueo de lectura y escritura especificando TS_LF_READWRITE en dwFlags.
Una solicitud de bloqueo puede ser sincrónica o asincrónica. El administrador solicita un bloqueo sincrónico mediante la marca TS_LF_SYNC en dwFlags. Si esta marca no está presente, la solicitud es asincrónica.
Cuando se llama a RequestLock , la aplicación debe determinar si el documento está bloqueado actualmente. Si el documento no está bloqueado y no existe ninguna otra razón para denegar el bloqueo, la aplicación debe establecer phrSession en S_OK y devolver S_OK.
Si el documento está bloqueado y la solicitud de bloqueo es sincrónica, la aplicación debe establecer phrSession en TS_E_SYNCHRONOUS y devolver S_OK. Esto indica que no se puede conceder una solicitud sincrónica.
Si el documento está bloqueado y la solicitud de bloqueo es asincrónica, la aplicación debe poner en cola la solicitud, establecer phrSession en TS_S_ASYNC y devolver S_OK. Cuando el documento esté disponible, la aplicación debe quitar la solicitud de la cola y llamar a OnLockGranted. Esta cola de solicitudes de bloqueo es opcional; hay un escenario que una aplicación debe admitir. Si el documento tiene un bloqueo de solo lectura, la nueva solicitud de bloqueo es de lectura y escritura y la solicitud es asincrónica, la aplicación ha llamado a OnLockGranted , lo que ha provocado una llamada reentrant a RequestLock. La aplicación debe establecer phrSession en TS_S_ASYNC y devolver S_OK. Una vez que se devuelve la llamada a OnLockGranted , la aplicación debe procesar la solicitud de actualización mediante una llamada a OnLockGranted de nuevo con TS_LF_READWRITE.
La aplicación debe asegurarse de que existe el tipo de bloqueo adecuado antes de permitir el acceso al documento. Por ejemplo, la aplicación debe comprobar que un documento tiene al menos un bloqueo de solo lectura antes de permitir que ITextStoreACP::GetText o ITextStoreAnchor::GetText continúen. Si el bloqueo adecuado no existe, la aplicación debe devolver TF_E_NOLOCK.