Diciamo che ho una pagina, accessibile da più persone contemporaneamente, che elenca le informazioni che devono essere elaborate in qualche modo dall'utente, dopo di che è contrassegnato come "completato" ed effettivamente scompare, o viene lasciato non elaborato e quindi lasciato nell'elenco per essere riprovato più tardi. Qual è il modo migliore per garantire che solo una persona gestisca un dato elemento nell'elenco alla volta, supponendo che io debba mostrare l'elenco (cioè nessun requisito utente / articolo, che è quello che preferirei), e che un determinato utente può fare clic su qualsiasi elemento nell'elenco in qualsiasi momento?
Questo è un problema che è emerso più volte in cui lavoro, e non sono davvero soddisfatto della soluzione che ho implementato fino ad ora. Speravo che qualcuno avesse un'idea migliore.
Fondamentalmente la mia soluzione prevedeva la creazione di una tabella in un database per tenere traccia di chi ha accesso a quale elemento e quando, e quindi abilitare / disabilitare funzionalità basate su tale (per esempio non consentire a un utente di modificare informazioni se è stato ritirato da qualcun altro). Assomiglia a quanto segue (usando Oracle 11g ... questi sono abbreviati per brevità qui, con le colonne INFO che fungono da supporto per tutte le altre colonne che sono irrilevanti qui).
CREATE TABLE "SOME_INFO" ( "INFO_ID" NUMBER(19,0) NOT NULL ENABLE, "INFO" VARCHAR2(20 BYTE) NOT NULL ENABLE, "IS_PROCESSED" CHAR(1) NOT NULL ENABLE, CHECK ("IS_PROCESSED" IN ('Y', 'N')) ENABLE, CONSTRAINT "PK_SOME_INFO" PRIMARY KEY ("INFO_ID") USING INDEX ); / CREATE TABLE "SOME_PERSON" ( "PERSON_ID" NUMBER(19,0) NOT NULL ENABLE, "INFO" VARCHAR2(20 BYTE) NOT NULL ENABLE, CONSTRAINT "PK_SOME_PERSON" PRIMARY KEY ("PERSON_ID") USING INDEX ); / CREATE TABLE "PROCESS_HISTORY" ( "INFO_ID" NUMBER(19,0) NOT NULL ENABLE, "PROCESSOR_ID" NUMBER(19,0) NOT NULL ENABLE, "CHECKED_OUT" DATE NOT NULL ENABLE, "CHECKED_IN" DATE ); /
"Verificando" un record da SOME_INFO per un determinato utente si ottiene INSERENDO un nuovo record in PROCESS_HISTORY con INFO_ID = il record selezionato INFO_ID, PROCESSOR_ID = gli utenti PERSON_ID e CHECKED_OUT = l'ora corrente (CHECKED_IN è lasciato NULL) .
"Check In" si ottiene semplicemente impostando CHECKED_IN sull'ora corrente. Un processo automatizzato viene utilizzato per verificare periodicamente i record che sono stati estratti per più di una quantità massima di tempo predefinita (il tempo varia da una pagina all'altra in base a ciò che è coinvolto nell'elaborazione delle informazioni).
Da questo posso sapere se un dato record è attualmente controllato o meno, e quindi modificare di conseguenza il comportamento della pagina. Detto questo, non posso fare a meno di pensare che ci deve essere un modo migliore per farlo. Spero che sia un problema abbastanza comune che ci sia un metodo standard o semi-standard per fare ciò che semplicemente non sono stato in grado di trovare.