Undeleting Data
Previous Topic  Next Topic 

Although FF&EZ includes the Ctrl-Z function that "undoes" changes to text, it does not have a general "undo" function that reverses the last change after saving data. This is primarily due to the complicated relationships between the data tables that involve both "referential integrity" (the validity of the database itself) and, for purchasing, the ability to audit changes when legal documents are involved. 

Nevertheless, the Design side of the system includes a number of "undelete" functions that can restore almost any element of a design project that has been deleted. However, the rules of data integrity affect how automatic this may be. 

If you are immediately undeleting something that was deleted by mistake, none of the complications described below will apply. The possible complications become more likely after a lot of subsequent project activity has deleted other related parts of the project. The specifications (and entire projects) have the least restrictions on what can be undeleted on that screen.

There is more information about the logic for this at the end of this section. However, there are three simple rules that keeps undeleting simple: 

  1. Do it as soon as you realize you need to restore something that was deleted.
  2. If there is an "Integrity Check" button on the screen, you must use it to double-check that the related pieces needed to restore the item are still there. 
  3. You can only undelete something that was deleted from its own editing screen (that is, you can't undelete a room that was automatically deleted as part of deleting its area. The area must be restored instead).

In all cases, the Undelete command is called by right-clicking on the Delete command of the parent you want to restore. That is, if you want to restore a room, display the Room List screen and right-click on its Delete command. You will see a list of rooms you can restore (rooms that were deleted using that screen's Delete command).

The following sections contain full explanations for how to restore specific types of data. We list the basic limitations or prerequisites for restoring them, but the separate sections have more details:

Data Type

Limitations / Prerequisites

Undelete Project

Deleted with version 4.1.011 or later. Deleted vendors associated with the project specifications will be restored, but need to be checked, especially if their Vendor ID conflicts with another vendor added later.

Undelete Area

Deleted with version 4.3.030 or later. Will not restore Worksheet room entries for objects that no longer exist (these must be undeleted first, using a list the command will generate. Otherwise, they will be left out).

Undelete Room

Deleted with version 4.3.030 or later. Will not restore Worksheet entries for objects that no longer exist (these must be undeleted first or they will be left out). You cannot restore a room that was deleted by the deletion of an area (the area must be restored first). 

Undelete Worksheet Usage

Deleted with version 4.3.030 or later. Can only restore room/object entries for which the original room and object still exist. These must be undeleted first, based on their limitations above.

Undelete Object

Deleted with version 4.3.030 or later. You can restore an object when its original specification(s) no longer exist, but it will be empty. Restore the associated specifications first.

Undelete Specification

Deleted with any version. Deleted vendors associated with the project specifications will be restored, but need to be checked, especially if their Vendor ID conflicts with another vendor added later.

The undelete function will not display any items that cannot be undeleted, so the above simply explains why something may not appear on the list of eligible items for the screen you are using. For instance, a room deleted by the deletion of an area will not appear on the Rooms List screen's list of eligible deleted rooms. The room would be restored automatically when the area was restored. 

Why undeleting gets more complex the longer you wait

Databases like FF&EZ use a hidden "key" (a unique numeric ID) to tie the pieces of the data together. The related parts of a project database (areas, rooms, object usages, etc.) are connected to each other by these keys, not by the visible IDs. This is what allows you to change an ID any time you need to. For instance, the "key" that points to a vendor never changes unless you select a different vendor. If you simply change the Vendor ID on the vendor screen, all the specifications that pointed to it are updated with the new spelling.

Although restoring an entire project has been available since version 4.1.011, the restoring of areas, rooms or objects requires a deliberate approach, which was implemented as of version 4.3.030: When one of these items is deleted, FF&EZ creates a "deletion set" that identifies all the related content that existed at the time of the deletion. Only these records will be restored when the "parent" item is undeleted. 

  • When a "parent" (e.g., a room) is restored., the undelete process uses both the connecting keys and the deletion set code to locate "child" records (e.g., object usages in rooms) that were deleted at the same time. So, undeleting an area can restore both its rooms and their contents. 
  • When an undeletion will restore usages in the FF&EZ Worksheet, an integrity check must be performed to identify objects that were deleted after Worksheet usages were deleted. This function will give you a report showing which objects will be missing. 
  • To fully restore a room's contents, you must undelete any missing objects first (a process that has its own set of integrity rules, including a check for missing specifications). 
  • When you undelete an object, its usages in the FF&E Worksheet will be restored only if the original room exists (or has been undeleted). However, if you undelete the object and then undelete the room, the latter process will restore the usages of the restored object.
  • new version of a deleted room that uses the same ID isn't the same as the original—the connecting key is different. 
  • If an object's component specifications, don't exist, they must also be restored first. 

When data integrity issues might be involved, the undelete utility will give you information about this. 

Two types of undelete operations are quite simple (we only need to verify the existence of the original vendors): 

  • Undeleting an entire project (because no changes could have occurred later to the project records that existed at the time of the deletion).
  • Undeleting a specification (because they only need the original vendor to exist).