This Advanced Techniques post demonstrates how you can prevent certain values,
e.g. email addresses or titles, from being recorded doubly before they are
saved.
Click on OK and save the application with
the keyboard combination CTRL + S.
Assign the application to a position in the portal menu structure
and then open it in the browser.
On the edit page, record the following titles:
Title 1
Title 2
Title 2
2. Modify custom.js
To modify the custom.js file, please proceed
as follows:
Open internal/system/vm/html/misc in the
Portal directory
and paste the copied VM file. If the file is already here, please
replace it.
Please note that existing modifications in
getconflictBySysidentAndObject.vm
in your Portal directory
may be lost upon replacing.
4. Create sysident
The database field Title, that is to be checked
in our example, will now be provided with a sysident
that is unique in the data group. To do that, select the option to
show the data group's data fields from the
context menu in the application structure.
Open the properties dialog of the Title database field by double-clicking on it.
Then switch to the Expert tab. If this tab
is not available, please activate the
Expert options.
Here, click on
Add attribute. In the Attribute
column, insert the attribute sysident
and in the Value column, insert a name which is unique
in the data group (e.g. my_title).
Please note the attribute sysident should
be written in lower case.
Click on OK.
5. Write JavaScript
Now switch to the edit page and open the properties dialog of the
OK button, which saves the data record, by
double-clicking on it.
Switch to the Script tab and click on
Edit JavaScript for desktop.
Copy the script shown below into the script editor.
function checkTitle()
{
var l_oCheckUpResult = checkUpForDatabaseConflictBySysidentAndObject("sysident name", getElement("Edit field GUID"), false);
if(l_oCheckUpResult.bError)
{
alert("An error occurred!\n"+l_oCheckUpResult.iErrorId+": " + l_oCheckUpResult.strErrorDesc)
}
else
{
if(l_oCheckUpResult.bConflict)
{
// a conflict was found
// Option 1: Inform the user that the data record cannot be saved and cancel the saving process with return false;
//alert("This title has already been recorded!")
//return false;
// Option 2: Ask user if they'd like to save anyway
Check = confirm("This title has already been recorded!\nWould you like to save anyway?");
if(Check)
return true;
else
return false;
}
else
{
// No conflicts were found
return true;
}
}
return false;
}
In the row
var l_oCheckUpResult = checkUpForDatabaseConflictBySysidentAndObject("sysident name", getElement("Edit field GUID"), false);
you need to add the sysident name (my_title in our example) and the
Edit field GUID.
The GUID of the Title edit can easily be identified
by switching to the Application structure tab on
the right-hand side of the editor. The levels of the structure beneath the
edit page can be shown by double-clicking on them. You'll find the
Title edit field in the
Form group. In the bottom-right area, the GUID of the edit field
will be shown alongside other properties. By clicking on
Insert GUID,
the GUID will be inserted at the position highlighted in the editor.
Click on OK.
Here, the JavaScript function can be assigned to the button event
onclick. This is done by clicking
on
Add script. After the assignment
has been made, click on OK.
Click on OK and save the application.
If a title is entered for a second time in the browser, the user is
informed accordingly.
Please note that this conflict check only works if the corresponding
data records are not created in the same millisecond range.