This is a detailed list of changes in CSPro 7.4. For a more general overview, see the readme.txt file located in the CSPro installation folder.
- A new special value, refused, allows for processing refusals differently from other numeric responses. Refusals are defined in a dictionary value set, referenced in logic using refused, and are conditionally shown to operators. The entry of refusals can be overridden using the OnRefused function.
- A CSPro Settings dialog, accessible in the CSPro Designer as well as in CSEntry, allows users to clear saved synchronization and data source credentials.
- Licenses for open-source software that CSPro uses have been included and can be accessed using the Help -> About menu in the CSPro Designer.
- Enhancements to the logic editor, including parentheses matching and improvements to the find and replace dialogs.
- The synchronization options have been updated. Synchronization can be removed from an application by unchecking the Enable Synchronization box. The options for downloading application files has been removed in favor of the new Update Installed Applications.
- Question text occurrence values can be harmonized with dictionary records using a new question text macro.
- When starting a new case, fields can be prefilled from values specified in a PFF's Parameters section.
- The compiler no longer issues an error when reentering a protected field.
- The Combo Box capture type can now be used on discrete numeric fields and alphanumeric fields.
- On Windows, the search bar on capture type popup windows is now hidden by default.
- Inserting a case now only allows for the addition of a single case at a time (regardless of the PFF's AutoAdd value).
- The tool has been rewritten with additional features including multiple language support and additional ways to view case data.
- A case's notes can be extracted as another CSPro data file, which can then be used for exporting or other data operations.
- Ability to download or synchronize data from the local Dropbox folder or a local FTP server folder which can be faster than downloading data over the Internet.
- A new function, ischecked, returns whether a code is checked as part of a check box field's selections.
- A new function, protect, simplifies changing the protected property of a field.
- A new function, filetime, returns the last modification date/time of a file or a directory.
- A new function, hash, returns the hash value of a string.
- A new statement, when, executes a statement based on the value of one or more other variables.
- A new version of recode, sharing the syntax of when, with additional options for what the recoded value can be assigned to.
- A new function, startswith, that returns if a string begins with a specified prefix.
- A new function, syncapp, for downloading new versions of an application from a deployment server.
- A new function, syncmessage, sends and receives string messages from a Bluetooth server.
- A new function, Barcode.read, reads a barcode using an Android device's camera.
- A new object, SystemApp, that simplifies interacting with external applications. It has the functions: clear, exec, getResult, and setArgument.
- Using ValueSet.add it is possible to add a single value or a range of values from an existing value set.
- New options for the syncconnect function to connect to a local Dropbox or FTP folder.
- A range of occurrences can be supplied to insert for mass insertions or delete for mass deletions.
- The tolower and toupper functions work properly with accented characters.
- The view function, on Windows, now displays webpages in an embedded browser.
- The field name of the last location of a partial save can now be retrieved in any procedure or function.
- The loadcase and delcase functions can now load or delete cases based on a full key string argument.
- The countcases and keylist functions can now be called, in certain circumstances, on the input dictionary.
- The find and locate functions have a new relational operator option, uuid, that allows loading cases by a case's UUID.
- The set access function, or optional arguments to the dictionary argument of countcases, forcase, keylist, or selcase, allows permanent or temporary modification of the dictionary access parameters, which control the order and what kinds of cases are processed.
- The set first and set last functions now use the dictionary access parameters when determining what is the first or last case.
- The sysparm function can be used to determine the presence of command line arguments on Windows.
- Messages can be defined for multiple languages by including multiple language names in the Language directive.
- Translations of some runtime messages added for Vietnamese. You can help translate additional messages or add messages in another language.
- An operator (or respondent) can sign the Android screen using the execsystem function and have the signature saved as an image file.
- A new menu option, Update Installed Applications, to automatically check for and install new versions of an application that has been updated on a deployment server.
- Applications can be added to the device by scanning a QR code.
- A new Settings screen, accessed via the menu on the Entry Applications screen, allows user to clear saved credentials.
- The option for selecting that hidden applications are shown has been moved to the Settings screen.
- The default setting for whether or not the case tree shows on phones and tablets can be modified via logic.
- The Concatenate Data, Index Data, and Reformat Data tools now allow the saving of PFFs with the specified settings and the loading of the settings of previous runs.
- The Reformat Data tool has been completely rewritten. If using a data source with an embedded dictionary, such as a CSPro DB file, you do not need to specify the input dictionary. The dictionary differences are displayed with more detailed information, including information on destructive changes that would occur during a reformat.
- The Index Data tool has also been completely rewritten. It has a new interface that simplifies running the program on multiple input files; it now works with non-text data files; and there is a more modern interface for viewing cases while selecting which duplicate cases to keep.
- The Sort Data tool allows case sorts on non-text data files that have duplicates.
- When the Sort Data tool processes a sorting key item that does not exist, it treats it as the lowest possible value, sorting it first when sorting in ascending order. In the past, such values were sorted as 0 (so they would be sorted after negative values when sorting in ascending order).
- The Deploy Application tool supports setting files to only be updated when an application is first installed and not on subsequent updates.
- The Deploy Application tool can generate a QR code that can be used to install applications on mobile devices.
- Items not defined in the dictionary are not written out when a case is saved. In the past, when using absolute positioning, contents of a record that were not defined in the dictionary were still written out when the case was saved.
- Items that are not valid for the item type are not written as they initially appeared in the input data. For example, if the value for a numeric item was "XX," previously, as long as it was not modified, it would be written as "XX." Now, because it cannot be represented as a valid numeric value, it will be written as default.
- CSPro processes items using the item type specified in the dictionary. Previously, some tools processed items by using the text representation of the item. For example, the Compare Data tool would indicate that "05" and " 5" were different values because of the differing zero fill setting, but now the tool treats those values as equal.
- When values are saved, special values are converted only based on linkages defined in the item's primary value set. Any special value specifications defined in non-primary or dynamic value sets are ignored.
- Case construction is more forgiving of errors, allowing level 2+ records to appear before their parent level's records. Additionally, level 2+ nodes are joined (by ID) even if some records from a different node separate the nodes. For example, if there is a case with a first level ID of 1 and second level IDs of A and B, in the past, 1/1A/1B/1A would be processed as three second-level nodes, but now they will be handled as two second-level nodes (1/1A+1A/1B).
- The notes and status files, used when processing text data files, are now created only when necessary. (For example, if there are no notes to save, the file is not created.) The information in those files can now be accessed in non-entry applications using functions like getnote. Case labels are also now supported for text data files, with the labels saved to the status file.
- A Sync Report summarizes the total number of cases uploaded to CSWeb.
- Create custom roles that specify dashboard and dictionary permissions.
- Downloading data from a CSWeb server is now faster.