Blocchi documenti
Per richiedere un blocco documento per applicazioni basate su ACP, il manager TSF chiama ITextStoreACP::RequestLock. Per le applicazioni basate su ancoraggio, il manager TSF chiama ITextStoreAnchor::RequestLock. L'applicazione concede il blocco del documento chiamando ITextStoreACPSink::OnLockGranted (applicazioni basate su ACP) o ITextStoreAnchorSink::OnLockGranted (applicazioni basate su ancoraggio) all'interno di RequestLock. Il blocco è valido solo durante la chiamata OnLockGranted . Quando OnLockGranted restituisce, il documento viene considerato sbloccato.
Esistono due tipi di blocchi di documento, di sola lettura e di sola lettura/scrittura. Un blocco di sola lettura consente al gestore di leggere il testo, ma non può modificare o inserire testo. Un blocco di lettura/scrittura consente al gestore di leggere, modificare e inserire testo. Viene richiesto un blocco di sola lettura specificando TS_LF_READ in dwFlags. Viene richiesto un blocco di lettura/scrittura specificando TS_LF_READWRITE in dwFlags.
Una richiesta di blocco può essere sincrona o asincrona. Il gestore richiede un blocco sincrono usando il flag TS_LF_SYNC in dwFlags. Se questo flag non è presente, la richiesta è asincrona.
Quando RequestLock viene chiamato, l'applicazione deve determinare se il documento è attualmente bloccato. Se il documento non è bloccato e non esiste alcun altro motivo per negare l'esistenza del blocco, l'applicazione deve impostare phrSession su S_OK e restituire S_OK.
Se il documento è bloccato e la richiesta di blocco è sincrona, l'applicazione deve impostare phrSession su TS_E_SYNCHRONOUS e restituire S_OK. Ciò indica che non è possibile concedere una richiesta sincrona.
Se il documento è bloccato e la richiesta di blocco è asincrona, l'applicazione deve accodare la richiesta, impostare phrSession su TS_S_ASYNC e restituire S_OK. Quando il documento diventa disponibile, l'applicazione deve rimuovere la richiesta dalla coda e chiamare OnLockGranted. Questa accodamento delle richieste di blocco è facoltativo; esiste uno scenario che un'applicazione deve supportare. Se il documento ha un blocco di sola lettura, la nuova richiesta di blocco è di lettura/scrittura e la richiesta è asincrona, l'applicazione ha chiamato in OnLockGranted , che ha causato una chiamata reentrant a RequestLock. L'applicazione deve impostare phrSession su TS_S_ASYNC e restituire S_OK. Dopo aver restituito la chiamata a OnLockGranted , l'applicazione deve elaborare la richiesta di aggiornamento chiamando di nuovo OnLockGranted con TS_LF_READWRITE.
L'applicazione deve assicurarsi che il tipo appropriato di blocco esista prima di consentire l'accesso al documento. Ad esempio, l'applicazione deve verificare che un documento abbia almeno un blocco di sola lettura prima di consentire a ITextStoreACP::GetText o ITextStoreAnchor::GetText di procedere. Se il blocco appropriato non esiste, l'applicazione deve restituire TF_E_NOLOCK.