Do you want to avoid users accidentally modifying a particular 4D Write Pro document (fully or partially)? Are you interested in keeping some parts of a document untouched (e.g., giving users the ability to fill in fields in a non-disclosure agreement while ensuring that none of the information in the document is altered or changed in any way)? If you’re nodding your head, then keep reading! 4D v18 R3 lets you keep parts of your documents protected, or in other words: “non-editable“.
In the example below, we’ve created a form using a 4D Pro document where the protected and unprotected areas are clearly identifiable (enterable areas shown in white, unchangeable areas shown in gray):
Two steps are used to define protection in a document:
- First step- Define which part of the document will be protected or not (by default all parts will be protected).
- Second step – Activate the document protection flag so that the first settings are taken into account.
New attributes
How to proceed? A new command isn’t needed, because two new attributes have been created to be used with the well-known command, WP SET ATTRIBUTES: wk protected and wk protection enabled. The first attribute (wk protected) can be set to almost any kind of target belonging to a document (e.g., paragraph, table, section, rows in a table, anchored pictures, etc.). Inheritance will be managed, so if you protect a section, there’s no need to protect paragraphs of this section because they’ll be protected by default. However, it’s worth noting that you can also unprotect a single paragraph inside of a protected section.
Keep in mind
The only thing you need to pay attention to is the order of the targets … which makes perfect sense. For example, if you protect a section, you can always unprotect a paragraph within that section. But the opposite is not true. If you protect a paragraph and then unprotect the section to which it belongs, the protection of the paragraph will be lost.
Code sample
You have a document that must be fully protected except for a couple of areas that must be filled in by the end user. Here’s how to set up this document:
// set full parts of document protected
WP SET ATTRIBUTES(WParea;wk protected;wk true)
// then remove protection on three ranges based on bookmarks
$range:=WP Bookmark range(WParea;"Name")
WP SET ATTRIBUTES($range;wk protected;wk false)
$range:=WP Bookmark range(WParea;"Firstname")
WP SET ATTRIBUTES($range;wk protected;wk false)
$range:=WP Bookmark range(WParea;"City")
WP SET ATTRIBUTES($range;wk protected;wk false)
// Finally activate the document protection
WP SET ATTRIBUTES(WParea;wk protection enabled;wk true)
In order to see a demonstration of this feature, check out the HDI above and the documentation.