Version: 2020.3.3

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.

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

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.

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
)

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