A SharePoint list can have a field type lookup which is a
reference to another list. As an example, we have a client and project lists.
The project list has a client lookup field which as reference uses the client
list. As in any application, we need referential integrity, and we need to
prevent the deletion of a reference/parent record by adding a constraint on the
lookup field. (see sample project download at the end)
Add a Constraint to a
List
In order to add a constraint to a lookup field, we need to
open the schema.xml file under the list definition. Unfortunately for us,
Visual Studio does not provide all the possible attributes for a list
definition, so a manual change to the xml file is required. The schema.xml
contains the metadata that defines the list and all the fields. We need to find
the field that we need (in our case client) and add the following attributes:
RelationshipDeleteBehavior="Restrict"
|
Prevent deletes of the reference or parent record when a dependency
exists.
|
Indexed="TRUE"
|
This field needs to be indexed in order to support a constraint. This
field can also be updated from the properties tab.
|
Features Deployment
Note*: When building
SharePoint JavaScript apps using Visual Studio, we need to be familiar of how
the features deployment works and how it can affect a list field lookup or
relationship constraint.
Now that we have our lists definition and constraint, we
need to make sure that dependencies are deployed first. During the deployment
of the application, the deployment does not fail if a dependency is not defined
first. In our example, the project list depends on the client list to be
deployed first. If we deploy the project list first, the client relationship
constraint will not be applied to the list, and the parent records could be
deleted leaving orphan records.
In order to prevent this deployment problem, we need to make
sure that the features are deployed in the correct order. In our example (see
image below), the Application feature (contains the web application artifacts)
is defined before our lists. We then define the client and project lists.
By defining the client feature lists (with the client list definition
and instance) before the project feature, we make sure that our constraint will
be deployed properly. This helps us make sure that on the server data integrity
is enforced. The order of the features can be rearranged by opening the package
file under the package folder. This
opens an interface that allows us to move features up or down.
Now that we have our list definitions, we could
move forward with building a SharePoint AngularJS
SPA that shows how this constraint is actually working. We will do this in another blog entry.
A sample of this project can be found here: Github
A sample of this project can be found here: Github
Thanks
0 comments :
Post a Comment
What do you think?