Survey library *

The entire survey library is deprecated. Do not use it for new projects - use a customisation of the Relay product instead.

Metrici Survey is a library which supports survey-like applications within Metrici. It can be used for conventional surveys, in which relatively simple questions are sent to a large number of people. It can also support more expert assessments, in which complicated questions are completed by a small number of people.

This is all still under development.


The basic structrure across all survey applications is the same. Each instance is known as a "project", and follows the structure below.Names in bold are standard, and must have fixed local references. Names in Italic are derived from other nodes. Other names can be anything.

  • Project
    • Content
      • Questionnaire A
      • Questionnaire B
      • Question 1
      • Question 2
      • Question Group 3
      • Result Type R
      • Result Type S
      • Wizard, Questionnaire Type, etc.
      • ...
    • Subjects
      • Subject 1
      • Subject 2
      • Subject Group A
      • ...
    • People
      • Person 1
      • Person 2
      • Team X
      • ...
    • Surveys
      • Survey X
        • Definitions
          • Definition 1
        • Requests
          • Subject 1 -Person 1- Questionnaire A
          • ...
        • Outbox
          • Subject 1
          • Subject 1
          • Subject 1
          • Subject 2
          • ...
        • Completed
          • Subject 1
          • Subject 1
          • Subject 2
          • ...
      • Survey Y
        • ...
      • ...
    • In Progress
      • Project - Person 1
        • Subject 1
        • Subject 2
      • Project - Person 2
        • ...
      • ...
    • Results
      • Result node 1
      • Result node 2
      • ...


A survey project is set of one or more related data collection activities, the results of which should be combined for reporting purposes. Projects are of type Survey Project. They act as a package for content, subjects, people, surveys, work in progress, and results.

The content, subjects and people packages are libraries. They act as packages, and automatically index their contents. Other nodes can be linked to a library, and the library can inherit from other libraries. This means that a survey project can be set up very quickly, simply by inheriting the content, subjects and people from elsewhere.


Content is a library that contains questions, question groups, questionnaires and other materials such as help pages.

Content also contains types:

  • To create content. These are tagged using ContentTypeTag.
  • To create result nodes. These are tagged using ResultTypeTag.
  • To create subjects. These are tagged using SubjectTypeTag.
  • To create survey definitions. These are tagged using SurveyDefinitionTag.


Subjects is a library that contains nodes that identify the things to be surveyed.

The subject nodes can be of any type, i.e. anything within the all index of subjects can be surveyed. In the case of an employee review, the subjects can simply be inherited from the people library.

The Subjects node may also contains a link to one or more subjects which represents logical high-levels of the subject hierarchy. This is for the convenience of result nodes.

Subjects that are groups should have com.metrici.survey.GroupTag in their tag list, and return their members in member type com.metrici.survey.Members. These are typically derived from more specific member types.


People is a library containing all the individuals and teams that will respond to the review.

The individual people are of type Survey Person, and the teams of type Survey Team. Teams list their members and their managers (who are not otherwise considered members).

Individual people are tagged using the tag Survey Person. If people are Metrici users, the people may link to the node that represents the user.

The People node may also contain a link to one or more people or teams which represent the logical high levels of the organisational hierarchy.


Surveys is a package that contains one or more surveys that make up the project. It lists the surveys, and contains links to create a new survey.

All the surveys within the Surveys package should be related, i.e. they should all be contributing to the same set of results.

However, it may be useful to split the survey project into a number of separate surveys, for example by team, or for different subjects, or different phases of data collection.


A survey represents a set of subjects, people, questionnaires and responses that are processed together, for example the responses from one team.

Each survey maintains a status, and the status dictates what actions can be carried out on the survey.

  • Draft - Survey is being defined. Actions: prepare.
  • Preparing - Survey is being prepared. Actions: reset.
  • Ready to send - survey has been prepared, and is ready to send. Actions: reset, send.
  • In progress - survey has been sent. Actions: inform, chase, close.
  • Complete - survey is complete.

The survey maintains a count of the number of individual survey requests that are required, and the number that are actually present. This is used to detect when survey preparation is complete.


Definitions is a package that contains survey definitions. Each definition specifies how part of the survey should be built, for example specifying a questionnaire, a subject, and a list of respondents.


Requests is a package that contains survey request nodes. A survey request is the lowest-level record of what data collection is required, i.e. one subject, one person, one questionnaire. It is not the data collection node itself, but links to it (and may be linked-to by it).

Requests are generated from definitions.

Requests are automatically indexed at the survey and Surveys level, and automatically tagged with a status.

Data collection nodes are automatically generated from requests using a create process.


Outbox contains the data collection nodes that have been created but not yet sent to the respondents.

Data collection nodes

Data collection nodes are automatically generated into the outbox area.

They are moved to the appropriate user packages in the In progress area when they are published.

They are moved to the completed package when they are completed.

Data collection nodes use the questionnaire from the request that generated them as their type.

Data collection nodes may maintain a reciprocal link back to the request. This is an original (non-derived) link, but which is validated to ensure that it is not ever changed. (It is non-derived because Metrici does not support reverse link navigation because this breaks data decoupling rules. The validation is required because the survey respondent has update authority over all members of the data collection node, and could otherwise potentially modify the link.)


Completed contains the data collection nodes that have been completed.

In progress

In progress contains the data collection nodes that have been published for individuals to complete.

The nodes are split into a series of user packages, each one of which takes the name of the survey project and person.

The user packages also record details of temporary users, such as their password.

The individuals are granted package-update-all-members on their own user package. This means that they can update any data collection nodes that are in the package.

When data collection nodes are submitted, they are moved from the user package back to the completed package of the appropriate survey.


The Results package contains result nodes. These can be anything. Typically they involve charts, aggregators, summaries, etc. (Once we have attachments, they would also contain file nodes with downloadable reports.) They may also contain, for example, human-written summaries or indexes.

Commonly result nodes link to a set of request nodes and/or data collection nodes, and show the results from those request nodes. They might also link to nodes within the subject and person hierarchies to show the scope of the results.

There may be links between result nodes to allow drill-down to more detail.

The Results node automatically offers a "Create ... " link for the node types in the content library tagged with the ResultTypeTag tag, i.e. the content library defines an appropriate set of output reports.


Content, Subjects, People and Results are maintained manually using normal Metrici functions. They make use of tagging to offer the user appropriate choices. Maintenance of the In Progress package is entirely automatic.

The Surveys package is used to create new surveys, and requires a number of functions.

Within each survey, request and data collection node there are a variety of functions which allow the survey process to be managed. These are implemented as scripts on the respective types.

Survey processing (implemented on Survey Type)

Each survey node provides a set of methods for managing the requests within the survey.

Prepare The prepare step creates survey requests and data collection nodes, creates user packages, and creates temporary users.
Reset The clear step reverses the prepare step (though it does not reverse the creation of temporary users).
Send The send process publishes the data collection nodes to the individuals who will respond to them. This involves moving the data collection nodes to the user packages.
Inform The inform process sends email messages to the survey respondents, inviting them to respond. Different email messages are sent to named users and temporary users.
Chase The chase process identifies individuals who have not responded to all their surveys, and provides options to email some or all of them.
Close The close process closes the survey. This involves moving data collection nodes from the user packages. Empty data collection nodes are deleted, and non-empty ones moved to the Completed package.

Request processing (implemented on Survey Request Type)

Each survey request provides methods which implement the survey processes, but just for that request. The methods are:

  • Prepare package - create user package if it does not exist
  • Send - move the data collection node to the appropriate user package
  • Complete - close the request, removing it from the user package and either deleting it or moving it to the Completed package.

Data Collection Node processing (implemented on Questionnaires)

Any type can be used as a questionnaire. However, for many surveys, it is useful to provide a Submit method (and associated action button) for the user to submit the questionnaire.

The Submit Questionnaire script implements a suitable method. It requires that questionnaire type supports a reciprocal link back to the survey request, using the Survey Request Reciprocal member type.