Force a field to be mandatory by lifecycle
Prerequisite: You must be familiar with the Syntax used in Tutorials and have already created an extension.
- learning:
- Force a field to be filled on some state/transition
- level:
- Intermediate
- domains:
- XML, PHP, Constrain, Lifecycle
- min version:
- 2.1.0
This use case is just one way of forcing a field to be provided.
For those use cases, we will use UserRequest class, because it has a lifecycle. When an object has a lifecycle, iTop datamodel allow to specify on a Transition and on a State which fields must be required.
with the Designer
Prerequisite: You must be a Combodo's customer
Mandatory on transition
Let's impose that a Service must be documented when a User
Request is moved from state New to state
Assigned.
That move is called a transition and is uniquely identified by the
initial state and the stimulus applied.
Mandatory on a state
In this usecase we want to be sure that all UserRequest
in state Assigned have a Service defined.
Again this is only a few clicks with no code writing
with an iTop Extension
Prerequisite: You must have already created an iTop extension.
Mandatory on transition
Let's impose that a Service must be documented when a User
Request is moved from state New to state
Assigned.
Here is the XML code you must write for this:
- itop_design / classes
-
<class id="UserRequest"> <lifecycle> <states> <!-- For User Request in State New... --> <state id="new"> <transitions> <!-- On the transition, trigger by ev_assign stimulus... --> <transition id="ev_assign" _delta="must_exist"> <flags> <!-- We want to force the Service... --> <attribute id="service_id" _delta="define" > <!-- to be provided --> <mandatory/> </attribute> </flags> </transition> </transitions> </state> </states> </lifecycle> </class>
Mandatory on a state
In this usecase we want to be sure that all UserRequest
in state Assigned have a Service defined.
- itop_design / classes
-
<class id="UserRequest" _created_in="itop-request-mgmt-itil" _delta="must_exist"> <lifecycle> <states> <state id="assigned" _delta="must_exist"> <!-- setting no _delta is equivalent to _delta="merge" --> <flags> <!-- Here we assume that no other extension nor the default datamodel... --> <!-- has set flags on field 'service-id' for state 'assigned' already --> <attribute id="service_id" _delta="define> <mandatory/> </attribute> </flags> </state> </states> </lifecycle> </class>
Migration: No visible effect on setup, but objects not compliant can no more be modified in the Console or Portal, until a Service is provided. Create an audit rule to retrieve objects not compliant to this new constrain and fix them.