This is an old revision of the document!
Table of Contents
Mergefields | Placeholders
The following mergefileds are supported:
"%0": PatID Patient ID e.g.: 08/15 "%1": PatID Patient ID modified for use as file name e.g.: 08~615 (invalid character "/" replaced by "~6") The following invalid characters are replaced as described: "\" -> "~0" "*" -> "~1" "?" -> "~2" "@" -> "~3" ":" -> "~4" """ -> "~5" "/" -> "~6" "<" -> "~7" ">" -> "~8" "|" -> "~9" "%2": Name "%3": First Name "%4": Birthday Format: JJJJMMTT e.g.: 19960313 for 13.3.1996 "%5": Sex possible values: "X": unknown "M": Male "F": Female "MC": Male Converted "FC": Female Converted "%8": Name w/o empty spaces "%9": First name w/o empty spaces "%A": Cast number "%B": Birthday - Mediadent required format: TTMMJJJJ e.g.: 13031996 for 13.3.1996 "%C": Additional patient ID "%D": Social insurance number "%F": Number of the current client Can be extended to the format 0015 with <FL|%F|4|0> "%M" or "%{pat:notes}": Comment on the patient (!! Can be multiline !!) With <VAL|%M|TagName> A value can be read from the comment This value must be in the form "TagName=Value" in the comment "%{pat:attributes}": Attributes separated with semicolon ; "%{pat:caseid}": Case ID of the patient. If several case IDs are known, a selection dialog is displayed. "%U": Username: Will be replaced with the short name of the current OnyxCeph login "%W": Workstation: Replaced with the current Windows login: Username [Computer name] "%X“ or "%{time:ansi}": Timestamp: current date as well as time (server) in format: JJJJMMTTHHMMSS (yyyymmddhhnnss) e.g.: The current year can be output with <SS|%X|1|4> "%%": Percent sign "%" (in case the percent sign is needed in the text)
Placeholder when an image is selected
"%6": Image file name starting from the image directory on the server: z.B.: 08~615\08~615SBIX.jpg "%7": Image Code z.B.: 08~615SBIX "%E": Image date in format JJJJMMTT "%I": Image type "%G": Name of the session e.g.: Final-01.11.2016 "%T" or "%{img:notes}": Comment on the image (!! Can be multiline !!) With <VAL|%M|TagName> a value can be read from the comment This value must be in the form "TagName=Value" in the comment "%{img:attributes}": Attributes of the image separated with semicolon ;
Recursive search with * in image acquisition
If a "*" character is appended to the path, the subdirectories of the path are also searched.
Optionally, the depth of the search can be specified after the "*" character and the "<" marker.
Examples:
Search subdirectories in the patient directory: "D:\Images\%1\*" For the patient 123456 to become all images from the directory "D:\Images\123456\" and all subdirectories are returned. Possible results: "D:\Images\123456\Img1.jpg" "D:\Images\123456\2010\Img2.jpg" "D:\Images\123456\2011\Retension\Img3.jpg" ... With the path: "D:\Images\%1\*<1" Only the following file will be found: "D:\Images\123456\Img1.jpg" "D:\Images\123456\2010\Img2.jpg" This file is not found: "D:\Images\123456\2011\Retension\Img3.jpg" Also allowed: Search all images on the D: drive: "D:\*" Please avoid, may take a very long time.
Wildcards
Wildcards "*" and "?" are also possible in all directory names.
Wildcards are used according to the normal Windows conventions:
? stands for a character * stands for any number of characters
OnyxCeph³ searches for all matching paths and returns the files they contain.
For the patient Müller,Jan, for example, at the import path:
D:\Scans\Day????????\%8,%9\*<1
searches the following directories (if available):
D:\Scans\Day20160301\Müller,Jan\ D:\Scans\Day20160301\Müller,Jan\Head\ D:\Scans\Day20170313\Müller,Jan\ D:\Scans\Day20170313\Müller,Jan\Teeth\
Module-specific placeholders
%{module:id} also %V Code of the triggering module
%{module:name} Name of the triggering module
%E Image date in all modules derived from TfrmTreat3DBase. Image date in ThirdPartyToolStart (if started from image)
%J Jaw in export 3D, if only objects of the upper or lower are exported
%N Filename container in EventContainerImportDone Filename container in EventContainerExportDone File name container in EventContainerUploadDone File name Report in EventReportUploadDone File name of the report EXE in EventReportExportDone Filename in EventToothMovementExportDone Filename of the 3D file in Event3DExportDone WebAddress in EventWebExportDone File names separated with spaces in Event3DSeriesExportDone When exporting multiple files, the wildchar * stands for the step number
%O FTPCode in EventContainerUploadDone FormName in SaveCarbonCopy and in PDF-Export ProjectName in EventProjectSaved
%P Passwort in EventReportUploadDone
%Q Download- Address in EventReportUploadDone ProjectCode in EventProjectSaved
%S Step-Number in Export3D ot Aligner Number of files in Event3DSeriesExportDone "New" for new or "Upd" for updated records in EventEvaluationDone
%V ID of the module in EventModulOpened und EventModulClosed as well as in PDF-export (also %{module:id}) Name of the anaysis in EventEvaluationDone
%Z Placeholders for image data type (2D|3D) for events EventEvaluationDone, EventImageImportDone
Macros for special interfaces
Only for image acquisition the following macros are supported:
"<FDK_D>": The name of the data path according to KFO Office conventions with date of birth is used. "<FDK_I>": The name of the data path according to the KFO Office conventions with patient ID is used. Example: C:\PatientData\ is the path configured in KFO Office for patient images. In Onyx, the path C:\PatientData\<FDK_I> would then have to be configured for the third-party programs. ( Assuming FDK uses the patient number, if birthday instead of <FDK_I> then use the macro <FDK_D>).
"<TNTand>": SurnameFirstName is inserted without spaces (for TNTand). Example: Hans Peter Müller-Herbig becomes "Müller-HerbigHansPeter".
Macros for string manipulation
The following macros start with "<" and end with ">". They use multiple parameters separated by "|". Syntax::
<C|T|P0|P1|P2|...> C: Macro command e.g. "SS" for SubString T: Text, may contain placeholders like %1, the placeholders are always replaced first and only then the macro is executed. P0, P1: Parameters, depending on command different number and usage
In general, macros may be nested. That means T, P0, P1, … can contain macros. The macros are resolved from the inside to the outside.
SubString (SS)
"<SS|T|Pos|Count>" A substring of length Count is returned from the text T, starting from Pos. If Pos + Count exceed the length of the string, the string is returned starting from Pos. Example: "This is a <SS|new MacroXX|5|5> in text" turns into: "This is a Macro in text"
Replace String (RS)
"<RS|T|SearchString|ReplaceString>" In text T substring SearchString is searched and replaced with ReplaceString. Example:: "This is <RS|a old macro|old|new> in text" turns into: "This is a new macro in text"
Fill Left (FL)
"<FL|T|Size|Char>" In the text T is filled on the left side with the character Char that T has the length Size. Example:: Fill patient number to 8 characters with zeros: "ID<FL|%1|8|0>" becomes for patient 123456 to: "ID00123456"
Fill Right (FR)
"<FR|T|Size|Char>" In the text T is filled on the right side with the character Char that T has the length Size Example: Fill patient number to 6 characters with zeros: "ID<FR|%1|8|0>" becomes for patient 123456 to: "ID12345600"
Trim Left (TL)
"<TL|T|Size|Char>" Im Text T werden auf der linken Seite so viele Zeichen Char gelöscht, dass T die Länge Size hat If the last character on the left side is not Char, the T remains unchanged Example: Delete leading zeros in patient number up to 8 characters: "ID<TL|%1|8|0>" becomes for patient 0000123456 to: "ID00123456"
Trim Right (TR)
"<TR|T|Size|Char>" In the text T on the right side so many characters Char are deleted that T has the length Size If the last character on the right side is not Char, the T remains unchanged Example: Delete appended X in patient number up to 8 characters: "ID<TR|%1|8|X>" becomes for patient 123456XXXX to: "ID123456XX" "ID<TR|%1|8|X>" becomes for patient 1234567890XXXX to: "ID12345667890"
Crop Left (CL)
"<CL|T|Count>" In the text T on the left side Count characters are deleted. If T is shorter than Count, an empty string is returned. Example: Delete leading text "ID" in patient id: "<CL|%1|2>" becomes for patient ID123456: "123456"
Crop Right (CR)
"<CR|T|Count>" In the text T, Count characters are deleted on the right side. If T is shorter than Count, an empty string is returned. Example: Delete year number in a patient ID: "ID<CR|%1|5>" becomes for patient 123456-2021 to: "ID123456"
Contains Text (CTX)
"<CTX|T|Tag|Found Text|Not Found Text>" In the text T the text Tag is searched. If it is found, the "Found text" is returned, if not the "Not found text" is returned. Example: Check if a tag is included in the attributes: "<CTC|%{pat:attributes}|;CLP;|cleft palate|>" becomes for a patient with the attribute ;ORTHO;CLP;CHIR; to: "cleft palate"
Position (POS)
"<POS|T|Tag>" In the text T the text Tag is searched. If it is found, the position of the first character is returned, if it is not found, an empty text. Example: Find out at which position a tag is included in the comment: "<POS|%{pat:notes}|station:>" becomes for a patient with the comment "Dr. Meier station:B5" to: "11"
Conversion to UTF-7 (U7)
"<U7|T>" The text T converted to UTF-7 encoding Example: "Name: <U7|%3 %2>" becomes for the patient with the name "Björn Müller" to: "Name: Bj+APY-rn M+APw-ller"
Encoding for URL (URLE)
"<URLE|T>" The text T is converted to UTF-8 and then escaped for transmission as a URL. See also: https://en.wikipedia.org/wiki/URL-Encoding Example: "<URLE|Name: %3 %2>" becomes for the patient with the name "Björn Müller" to: "Name%3A%20Bj%C3%B6rn%20M%C3%BCller"
Conversion to a valid file name (FILE)
"<FILE|T>" In the T text, all characters that are not allowed for file or directory names are replaced. Invalid characters are replaced (as already for the placeholder "%1") during correction as follows: "*" -> "~1" "?" -> "~2" "@" -> "~3" ":" -> "~4" """ -> "~5" "/" -> "~6" "<" -> "~7" ">" -> "~8" "|" -> "~9" Example: "Model<FILE|%A>.PDF" becomes the valid file name for the patient with the model number "123\A": "Model123~0A.PDF"
Increment (INC)
The integer T is increased by INCVAL. The result is also an integer. The texts in T and INCVAL must be convertible to an integer. Negative numbers are permissible. Example: Increase step number %S by 8: "Step: <INC|%S|8>" becomes for Step 4: "Step: 12"
Value (VAL)
"<VAL|T|Tag>" The text T should be a multiline (e.g.: %M Notes). A search is made for a line that starts with the tag followed by "=", the text after the "=" is returned Example: Read out order number "Order" from the patient comment: "Order #<VA|%M|ORDER>" If there is a line "Order=0-8-15" in Notes (merge command %M), the result is: "Order #0-8-15"
DateTimeFormat (DTF)
"<DTF|T|FS>" The text T should be a date or time in one of the following formats: yyyymmdd, yyyymmddhhnnss or yyyymmddhhnn In FS a format string must be passed, according to which date (and time) are formatted. The syntax is described here: http://docwiki.embarcadero.com/Libraries/Sydney/en/System.TDateTime.FormatString Example: <DTF|%4|dd.m.yyyy> -> "19.9.1990" <DTF|%X|dddd mmmm d, yyyy hh:mm:ss AM/PM> -> "Tuesday June 15, 2021 10:39:00 AM"
Overview of placeholders whose validity
Description | Platzhalter | Short | Comment | 3D Export Done | 3D Series Export Done | Container Export Done | Container Import Done | Container Upload Done | Evaluation Done | Image Import Done | Module Closed | Module Opened | Project Saved | Report Export Done | Report Upload Done | Tooth Movement Export Done | Treated Image Saved | User Login | User Logout | Web Export Done | Drittprogramme | Export 3D (Dateien, Beschriftung) | Export Aligner-Protokoll |
Events | |||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Patient: Values are available when a patient is active. | |||||||||||||||||||||||
ID | %0 | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | |||
ID, for filenames | %1 | Patient ID corrected for file names | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ||
Last name | %2 | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | |||
First name | %3 | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | |||
Birthday | %4 | Format: JJJJMMTT | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ||
Gender | %5 | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | |||
Last name (without space) | %8 | von Schulz → vonSchulz | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ||
First name (without spaces) | %9 | Anna Lena → AnnaLena | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ||
Model number | %A | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | |||
Birthday | %B | Format: TTMMJJJJ | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ||
Additional Patient ID | %C | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | |||
Insurance number | %D | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | |||
Initial Contact Date | %{pat:initialcontact} | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | |||
Start of Treatment | %{pat:starttreatment} | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | |||
Assessment Date | %{pat:assessmentdate} | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | |||
Comment | %{pat:notes} | %M | can be multiline | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | |
Attributes | %{pat:attributes} | Attributes separated with semicolon ; | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ||
Case ID | %{pat:caseid} | Patients Case ID, if needed with selection dialogue | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ||
Image / Findings: Values are available if a finding is active. | |||||||||||||||||||||||
Date of recording | %E | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ||||
File name | %6 | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ||||
Code | %7 | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ||||
Comment | %{img:notes} | %T | may be multiline | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ||
Attributes | %{img:attributes} | Attributes separated with semicolon ; | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | |||
Image type name | %I | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ||||
Image type code | %Y | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ||||
2D or 3D finding | %Z | „2D“ or „3D“ | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | |||
Name of the session | %{img:seriesname} | %G | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | |||
Date of the session | %{img:seriesdate} | Format: DDMMYYYY | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | |||
Comment of the session | %{img:seriesnote} | may be multiline | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | |||
System | |||||||||||||||||||||||
Percent sign | %% | Percent sign in the text | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | |
Timestamp | %{time:ansi} | %X | Server time in format: JJJJMMTTHHMMSS | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● |
Timestamp | %{time:stamp} | Server time in format: JJJJ-MM-TT HH:MM:SS | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | |
Name of workstation | %W | Username [Computername] | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | |
Tool- or Event-name | %{event:name} | Name of the triggered tool or event | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | |||
Tool- or Event-ID | %{event:id} | ID of the triggered tool or event | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | |||
Modul-Code | %{module:id} | %V | Code of the triggering module | ● | ● | ● | ● | ● | ● | ||||||||||||||
Modul-Name | %{module:name} | Name of the triggering module | ● | ● | ● | ● | ● | ● | |||||||||||||||
User: Values are available when user management and a user are active | |||||||||||||||||||||||
Username (long) | %{user:name} | Name of the current OnyxCeph login | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | |
Username (short) | %{user:short} | %U | Short name of the current OnyxCeph login | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● | ● |
Special placeholders | |||||||||||||||||||||||
Analysis name | %V | Name of the analysis done | ● | ||||||||||||||||||||
Evaluation: New or update | %S | "New" or "UPD" | ● | ||||||||||||||||||||
CSV-Datei | %N | Name of the export CSV file | ● | ● | |||||||||||||||||||
Download address | %Q | ● | |||||||||||||||||||||
FTP-Code | %O | ● | |||||||||||||||||||||
Name of the exported table | %T | ● | |||||||||||||||||||||
Name of the report file | %N | ● | ● | ||||||||||||||||||||
Name of the aligner project | %P | ● | |||||||||||||||||||||
Name of the container | %N | ● | ● | ● | |||||||||||||||||||
Names of the exported files | %N | separated with with space | ● | ||||||||||||||||||||
Passwort | %P | assigned password | ● | ||||||||||||||||||||
ProjectCode | %{project:id} | %Q | ● | ||||||||||||||||||||
ProjectName | %{project:name} | %O | ● | ||||||||||||||||||||
Number of steps | %S | Number of steps exported | ● | ● | |||||||||||||||||||
Step number | %S | Number of the exported step | ● | ● | ● | ||||||||||||||||||
Webadress | %N | ● |