For reliability reasons it would be better to wait until the system accepts entered data before giving away identification numbers. This prevents situations where entered data cannot be the saved, for example because of broken connection etc.
A solution to this is to create the instance in the beginning of the process, rather than waiting for the user to click Create button, i.e. instead of a process step:
ENTER NEW Call ...
have a couple of steps:
CREATE Call ...
EDIT Call
This will (a) create an instance with auto-assigned unique number and (b) will allow the user to save the entered data in portions if desirable. The object should have an additional attribute to indicate the current state. For example, the default value for State can be 'New' and will be assigned when the object is created. Once the user has finished entering all the necessary details he can change the state to 'Submitted'. The 'Value must be provided' and other validation rules should be made conditional to the State attribute. For example, instead of marking an attribute as mandatory, you could add the following rule:
If Call.State='Submitted' AND Call.ClientName IS UNDEFINED
Then REPORT ERROR 'Client name must be provided'
This will allow creating the instance without the client name, but will prevent the user from moving the object to 'Submitted' state.
Alternatively, you can use a combination of the two approaches:
ENTER NEW Call ...
EDIT Call
where you would collect the required minimum information before issuing an identification number (the first step) and then continue on to enter other details (the second step) before changing the state and performing necessary validation.