Реферат: MIDAS. Практическое применение
with DocList.LockList do
try
if IndexOf(Pointer(DocID)) < 0 then
begin
Add(Pointer(DocID));
Result := True;
end;
finally
DocList.UnlockList;
end;
end;
function UnregisterDoc(DocID: integer): boolean;
begin
Result := False;
if DocID = 0 then Exit;
with DocList.LockList do
try
if IndexOf(Pointer(DocID)) >= 0 then
begin
Remove(Pointer(DocID));
Result := True;
end;
finally
DocList.UnlockList;
end;
end;
В списке хранятся идентификаторы документов. Но TThreadList предназначен для хранения указателей. Поэтому для хранения в этом списке идентификатора, имеющего тип Integer, придется привести его к типу pointer. Конечно, если потребуется хранить дополнительную информацию о документе, например, его номер, придется организовать в списке ссылки на записи, с выделением памяти под эту запись и уничтожением ненужных записей. При этом внешний вид функций не изменится, просто усложнится работа со списком, и может понадобиться обращение к БД для получения дополнительной информации.
Теперь все просто: все модули данных, которые работают с документами, используют эти две функции, и если RegisterDoc возвращает false (а это произойдет только в том случае, если номер уже есть в списке), то пользователю выдается сообщение, что с документом уже работают. Функция UnregisterDoc просто удаляет номер из списка.
На клиенте понадобится, кроме доступа к двум провайдерам, еще пара функций – получение нового значения CLIENT_ID для справочника клиентов и получение полного имени клиента. Для этого необходимо создать описание этих функций в библиотеке типов.