There are several ways to realize a survey with multiple cycles of which I would like to present two, one for anonymous and one for personalized surveys.
1. anonymous survey
First you will need two URL-parameters, which will be used to pass on the participant's consecutive number or LFDN between different cycles and to register, which cycle the participant is currently trying to access. The LFDN will then be used to match datasets that belong to a specific participants from the separate cycles.
At the end of the survey, a mailtrigger will be used to invite the participant to the new cycle.
Assuming there are no URL-parameters in use so far, the related variable will be named p_0001 and p_0002.
The link when first accessing the survey would look like this:
Parameter a, which is set to =1 here, will be used to number the cycles. If you are planning to use different pages/questions for each cycle, p_0001 can thus be used for the filter-conditions.
In order for this to function as intended, the value of p_0001 has to be increased by 1 with a recoding trigger on a page prior to the ending page. All you need to do is have the recoding trigger recode p_0001 with the value #p_0001# + 1
This parameter can equally be used, to control mail distribution by a mail trigger on the ending page. If you are e.g. aiming for three cycles, you can set the mail trigger's execution condition to p_0001 <= 3
The mail trigger now needs to send the mail containing the invitation link (directly or time-dependent), including the content of the URL-parameter-variables. The respective link would look like this:
From the export you can use the content of p_0002 to match it with the LFDN of the previous cycle.
2. personalized survey
Diary studies can also be realized in personalized surveys.
For this, each cycle would have to placed under a separate filter, or the questions have to be set up with corresponding hiding conditions.
Filters or hiding conditions would check for the variable c_0001, so first of all you will have to set up this user defined-variable.
You will also be needing a recoding trigger on the first page, that recodes c_0001 with 1. Execution condition for this trigger would be either c_0001 = (empty value) for short text variables or -77 for integer variables.
Just like with anonymous survey we will be using a variable to track the cycle number, just in this case it will be a user defined one. To that effect, a recoding trigger will increment the value of c_0001 by recoding it with #c_0001# + 1 on the pseudo-ending pages (see below).
At the end of each filter path, you will be needing a pseudo-ending page, which is a regular page for which the submit-button is permanently suppresed in the page properties. Also the participant can be notified here, that the survey is completed for now and the browser window can be closed.
Last it is essential to set Behavior on resumption to Display first page in the project properties.
Optionally you can also implement a control that ensures, that a certain cycle can only be accessed after a certain date.
For this you will be needing:
-another user-defined variable (integer) - for the explanation we will call this one c_0002
-a page at the very beginning of the survey that's being automatically submitted after 0 seconds
-a recoding trigger on the same page, which recodes c_0002 with the value CURDATE(); execution position: directly
-a filter below this page (first horizontal layer, i.e. not indented) with the following condition:
Assuming the second cycle should not be possible earlier than 06/01/2014 and the third cycle no earlier than 07/01/2014 the filter would check for
(c_0001 = 2 AND c_0002 < 20140601) OR (c_0001 = 3 AND c_0002 < 20140701)
The numbers which c_0002 has to be checked against is simply the desired date in the format YYYMMDD, because CURDATE() store the current date in just this pattern when using a digit type variable.