Delete Forever (GDPR)
Overview
This tool will delete documents and folder in compliance with the regulations of the GDPR (General Data Protection Regulation). A list of folder and documents will be purged from inPoint while logging all information into an audit log which is then archived.
The feature is implemented as a predefined Job called "inPoint.PurgeJob" running in the background.
The job will process a list of purge requests generated by a user or by a third party systems. The state of the job can be managed with inPoint.Admin. The deletion of any item will generate an audit log in a configured location.
Important
The job "inPoint.PurgeJob" is disabled by default! Use inPoint.Admin to enable it and also define the scheduling required.
Generate a purge request
Purge requests are saved in the table which exists for each tenant. The name is T1_PURGE (where 1 is the id of the tenant).
PID
varchar(50): The id of the purge request, using a GUID is recommended
ID
int: The internal id, generated automatically.
NAME
nvarchar(100): The short name of the purge request (less than 100 characters)
DESCRIPTION
nvarchar(2000): The description of the purge request (less than 2000 characters)
CREATOR_ID
int: The user who has created the request.
CREATION_DATE
datetime: The date when the request was created (UTC). If documents are encountered that where created or changed after this date they will not be deleted!
WORKORDER
varchar(900): The workflow report or similar document which created the request.
AUDIT_LOCATION
varchar(900): The folder where the audit should be stored or if the audit log was already created the document itself.
ISRECURSIVE
bit(1): If '1', the folders will be deleted recursively.
START_DATE
datetime: The date and time the processing was started.
FINISHED_DATE
datetime: The date and time the processing was finished.
PRIORITY
int: The priority of this request compared to other request. (higher number means more important)
STATUS
varchar(50): The current status of the purge request. See here for possible states.
MACHINE
varchar(150): The machine which is processing the request.
Insert purge request
Here is a sample how to create a purge request directly in the database.
- SQL-Server
- Oracle
DECLARE @ID int;
INSERT INTO ip.T1_PURGE(PID,NAME,DESCRIPTION,CREATOR_ID,CREATION_DATE,AUDIT_LOCATION,ISRECURSIVE,START_DATE,PRIORITY,STATUS) VALUES
(newid() -- auto generated Id
,'Mailbox John Doe - (GDPR)' -- Name
,'This is the Description' -- Description
,19 -- Id of the creating User
,GETUTCDATE() -- creation-date (utc)
,'pam-item://hierarchy=50@path=76$94' -- place where log is saved
,1 -- 1: recursive, 0: flat list
,GETUTCDATE() -- start date (utc)
,100 -- Priority (the higher, the more important)
,'ConfirmationOk' -- Status (read to be processed)
)
SET @ID=SCOPE_IDENTITY();
select @ID
VARIABLE vID NUMBER
/
INSERT INTO ip.T1_PURGE(PID,NAME,DESCRIPTION,CREATOR_ID,CREATION_DATE,AUDIT_LOCATION,ISRECURSIVE,START_DATE,PRIORITY,STATUS) VALUES
(sys_guid() -- auto generated Id
,'Mailbox John Doe - (GDPR)' -- Name
,'This is the Description' -- Description
,19 -- Id of the creating User
,sys_extract_utc(systimestamp) -- creation-date (utc)
,'pam-item://hierarchy=50@path=76$94' -- place where log is saved
,1 -- 1: recursive, 0: flat list
,sys_extract_utc(systimestamp) -- start date (utc)
,100 -- Priority (the higher, the more important)
,'ConfirmationOk' -- Status (read to be processed)
)
returning ID INTO :vID;
/
PRINT :vID;
Add items to a purge request
The items (documents or folder) of a purge request are saved in the table which exists for each tenant. The name is T1_PURGE_ITEMS and T1_PURGE_ITEMS_EXTRA (where 1 is the id of the tenant).
The user inserts the row filling out the id of the purge request and the ItemUri of the document or folder. During processing the request the server will log it's data into the same table.
PURGE_ID
int: The id of the purge request.
ID
bigint: The internal id, generated automatically.
ITEMURI
varchar(900): The uri of the document or folder
LEVELCOUNT
smallint: The depth of the itemUri if known. Is used to delete the child objects before deleting the parent.
STATUS
smallint: The current status of the item. When inserting rows, leave it empty. See here for possible states.
DEL_DB
bit(1): internal field
DEL_FT:
bit(1): internal field
AUDIT_LOG
nvarchar(2000): The audit log from purging the item.
ERROR_LOG
nvarchar(2000): The error log from purging the item.
RETENTIONDATE
datetime: In case the item cannot be deleted because of a active retention time this is the date the item is protected.
Insert Items for purge request
Here is a sample how to add items for a purge request directly in the database. Use the id of the purge request created earlier.
- SQL-Server
- Oracle
INSERT INTO ip.T1_PURGE_ITEMS (PURGE_ID,ITEMURI,LEVELCOUNT) VALUES
( @ID -- id of the parent purge request, which was created before
, 'pam-item://hierarchy=12@path=4$1238861\,10$1238864\,20$1238866@eid=0000000000100220200116144433710680003' -- full itemUri of an item to be deleted.
, 4 -- number of hierarchy levels plus one extra if a document
)
INSERT INTO ip.T1_PURGE_ITEMS (PURGE_ID,ITEMURI,LEVELCOUNT) VALUES
( :vID -- id of the parent purge request, which was created before
, 'pam-item://hierarchy=12@path=4$1238861\,10$1238864\,20$1238866@eid=0000000000100220200116144433710680003' -- full itemUri of an item to be deleted.
, 4 -- number of hierarchy levels plus one extra if a document
)
Managing the purge requests
All requests are processed by a single job called 'inPoint.PurgeJob', the job itself can be managed with inPoint.Admin. The purge requests can be managed with inPoint.Admin, it's not possible or intended to change the list of items which will be removed. The purpose is to pause and start purge request and in case of errors to request a cancellation.
Purge request states
These states are saved as text in the database to make them more human readable.
New
A new purge request, can change to ConfirmationPending can be deleted.
ConfirmationPending
Workflow is active, currently only the workflow can change it.
ConfirmationOk
The list was confirmed, it is ready to be processed (read-only except Priority, Status can be changed Paused or RequestCancel. (The job will change it to Running when processing starts)!
Running
Processing the items (read-only except Priority, Status can be changed to Paused or RequestCancel.
Paused
Pause processing items (read-only except Priority, Status can be changed to Running or RequestCancel.
RequestCancel
The administrator asked to cancel the process (read-only, wait until cancelled by the job).
Done
The purge request was successfully done, audit log was archived (read-only, can be deleted).
DoneWithError
The purge request is finished, but there where some errors the audit log was archived (read-only, can be deleted).
Cancelled
The request was cancelled by the administrator the job created the audit log and archive it (read-only, can be deleted).
Purge request item states
For performance and space reasons the states are saved as number in the database.
NotSet
0 or null: The item is new and not processed.
OK
1: The item was purged successfully.
NotFound
2: The item was not found.
RecursiveOK
3: It's a recursive purge request and this folder item was expanded into sub items.
GenericError
10: Generic or unknown error.
RetentionError
11: The retention-time is not over yet. The detected retention date is saved in the column RetentionDate.
ItemModifiedError
12: The folder or document was modified after the purge request was created.
ItemHasChilds
13: The item cannot be deleted, because it has child items