Attention! Macro language syntax changed since MultiMaps v6.1!
Previously, the colon was used to separate both operators and parameters. With this syntax, the macro language cannot be further developed. Now operators are separated from each other by line feed or ">>" characters, and parameters - by colon.
Previously: week:0:complete:100:resource:Coleman
Now: week:0 >> complete:100 >> resource:Coleman
In addition, the syntax of some operators has also been changed. For example, previously: requirestartdate, now: require:startdate. Operators with modified syntax are marked in red in the table below. In theory, almost all of them will continue to work, but after a while they will stop.
If your maps use keywords with macro language operators, be sure to check them against new version!
Also quite a few new operators added.
Data collection Engine has its own programming language (Data Collection Macro Language) to describe what to collect from source maps and what to copy to collection maps. The program resides either in Keywords notes in Configuration Map or in topics notes in the Data collection keywords branch.
By default, Data Collection Configuration map is located in:
My Documents\Palmaross\MultiMaps\Resources\Data collection\dashboards_config.mmap
The structure of Data Collection Configuration Map is discussed here.
Data Collection Macro Language consists of the operators and their parameters.
You may use any number of operators, defining a cascade of filters. Topic will be collected if ALL of operators match the given source topic.
With this macro language, you can customize the collection criteria extremely flexibly.
Operators are separated from each other by line feed (each operator on a new line), or by ">>" characters. Parameters are separated by colons.
When preparing the Template to collect data into it (and when processing Configuration Map), Data Collection engine scans all topics and looks into its notes. When some known operators found, it tries to parse them until end or until the:
; (semicolon)
"comment" word
Below is a typical example of programming the keyword using notes:
or:
the previous block also can be written like:
More examples can be found in data collection cofiguration map.
How the data collection engine works exactly? See here.
To better understand the actions of operators, you need to understand the difference between the standard map topic and the task topic.
A task is a topic that has at least one of the following attributes: progress (0 - 100%), start date, due date, effort, or resources. If none of these attributes are present on the topic it is not a task.
Below is a table that describes Data Collection Macro Language operators.
Operator | Description |
---|---|
Date ranges | ! All operators in this section are mutually exclusive. If more than one is specified, the last one "wins". |
day:N | sets a Day. N is an offset from current (0) day. So day:0 = today, day:1 = tomorrow, day:-1 = yesterday and so on. Result: filters tasks that are active in given day. Example: keyword Today (day:0) |
days:N | sets the range of days from current (0). So days:2 = next 3 days (0,1,2), days:6 = nearest 6 days, days:-3 = past 3
days. Result: filters tasks that are active in given range of days. Example: keyword Next 3 days (days:2) |
week:N | the same for weeks |
weeks:N | |
month:N | the same for months |
months:N | |
today | synonim for day:0 |
tomorrow | synonim for day:1 |
yesterday | synonim for day:-1 |
Tasks | Tasks are topics that have at least one of the task attributes: progress, start date, due date, effort, or resources. |
task task:nodates |
collects tasks task:nodates - collects tasks, that have not both dates (start date and due date) |
nodates | depecated! do not apply! Use task:nodates |
requiere:progress require:priority require:startdate require:duedate require:bothdates
require:anydate |
You can require that on the tasks must be present: progress : any Progress icon priority: any Priority icon (can be applied not only to tasks) ! All operators below are mutually exclusive. If more than one is specified, the last one "wins". startdate: start date duedate: due date bothdates: both dates anydate: one of dates |
requirestartdate requireduedate |
depecated! do not apply! Use require:startdate and require:duedate |
match:startdate match:duedate match:bothdates match:anydate |
! All operators hare are mutually exclusive. If more than one is specified, the last one "wins". collects tasks that have the specified dates in the range. For example, the keyword is This week, and this operator in it's notes. In this case, will be collected tasks that: startdate: start this week duedate: end this week bothdates: start AND end this week anydate: either start or end this week. This parameter is used by default (if there is no match operator in a keyword topic notes). |
startdate, duedate bothdates, anydate |
depecated! do not apply! Use the above syntax |
overdue |
Progress is less than 100% (or no Progress at all) AND Due date is earlier than today. Example: keyword Overdue in the config map. |
duration:min:N duration:hours:N duration:days:N duration:months:N |
collects tasks that have specified task duration. N - number of time units (or time range). duration:hours:4 - collects tasks whose duration is 15 minutes duration:days:1 - collects tasks whose duration is 1 work day duration:days:1-3 - collects tasks whose duration is from 1 to 3 days |
effort:min:N effort:hours:N effort:days:N effort:months:N |
collects tasks that have specified task effort. N - number of time units (or time range). Examples: effort:min:15 - collects tasks whose effort is exactly 15 minutes. effort:min:15-30 - collects tasks whose effort is from 15 to 30 minutes effort:hours:1-4 - collects tasks whose effort is from 1 to 4 hours effort:days:1 - collects tasks whose effort is exactly 1 day |
complete:N complete:N-M |
collects topics with specified Progress. Examples: complete:50 --- collects topics with Progress 50%. complete:0-50 --- collects topics with Progress from 0 to 50% complete:0-99 --- collects topics with Progress 100% |
deadline | collects tasks that have a due date AND a deadline icon. The collection topic must have a deadline icon, this is usually an icon with exclamation mark. See keyword Deadlines in the config map. |
rollup | collects topics for which the checkbox "Roll-up task info" (in the Task Info pane) is enabled |
asap (as soon as possible) |
collects tasks with only one date or no dates. These tasks arecalled Possibles. The target dates is not precisely defined (since one date or no dates). Therefore, they should be performed either from the start date or before the end date, at any suitable time. Example: collection topic has a period This week, and topic notes have this operator. While collecting: 1) if a task only has a start date and it is earlier than or within the this week, it might already be tackled. The task gets into the collection; (2) if a task only has a due date and is later or within the current week, it might need to be tackled. The task gets into the collection; (3) if the task has no dates, the task also gets into the collection. This operator is in the keyword Possible in the config map. |
advance | collects topics (together with their subtopics) that have icons ![]() This operator collects all tasks that starts before given date range, or with no dates at all. Also it requires both icons above to be set. |
Other operators |
|
nocheckdates |
ignore date filters Example: You want to collect topics that have a question icon, regardless of whether or not they fall under the filter set by the previous keyword (for example, This week). This operator will do it. Used in the configuration map in many keywords with icons. |
inherit |
collects topics matches by previous filters |
formula |
collects topics with formulas |
matches topics whose text is the same as text on the collection topic. Example: keyword In-Tray (Inbox) in the config map | |
topictext:contains topictext:startswith topictext:endswith topictext:equals |
TEXT - collection topic name. This operator collects topics, which text: contains - contains TEXT startswith - starts with TEXT endswith - ends with TEXT equals - equals TEXT There is also an optional wholeword parameter. If it is added, then the TEXT is searched as a whole word (that is, the word "text", not the words "contextual", "texture", etc.). topictext:startswith:wholeword there may be one more parameter - the search text. In this case, the name of the collection topic can be whichever: topictext:contains:text - collects topics whose text contains "text" ("text", "contextual", "texture",etc.) topictext:startswith:wholeword:text - collects topics whose text starts with the whole word "text" |
casesensitive:resources casesensitive:properties casesensitive:tags casesensitive:all |
In MindManager, resources, tags, and properties names are case sensitive. Those, resource "Ross" and resource "ross" are different resources. The "Done" tag and the "done" tag are different tags. Property "Expenses" and property "expenses" are different Properties. By default, when collecting data, case is not taken into account: if the resource "Ross" is specified on the collection topic, then topics with the resource "Ross" and topics with the resource "ross" will be collected. This operator makes case sensitive for: casesensitive:all - makes case sensitive for all the above criteria. |
------------------------------- resource:condition:TEXT ------------------------------- resource:me |
collects topics with specified resources resource:Coleman collects topics with resource "Coleman" resource:Coleman, Olivia Smith, J.Harris collects topics with specified resources resource:condition:TEXT Operators with condition collect topics that have resource whose name matches the condition: contains - contains TEXT startswith - starts with TEXT endswith - ends with TEXT equals - equals TEXT resource:contains:son collects topics, that have resource: Davidson or Dawson or Atkinson resource:me collects topics where you are assigned as a resource. Before using this operator, you must define your name in the Data Collection options (MultiMaps Settings on the Ribbon), in the "resource:me" field. Construction is allowed : resource:Coleman, me, Olivia Smith This operator is used by the "My tasks" keyword in the configuration map. |
resources:all resources:any resources:yes resources:no |
all - collects topics that have all resources present on the collection topic and/or specified by resource operators. any - collects topics that have any of the resources present on the collection topic and/or specified by resource operators.This operator is used by default. yes - collects topics with resources no - collects tasks with no resources |
depecated! do not apply! Use resources:yes. | |
|
depecated! do not apply! Use resource:me. |
depecated! do not apply! Use resources:no. | |
ignoreresource:res1, res2... ignoreresource:me |
topics with specified resources are ignored when collecting data ignoreresource:me when collecting, topics which have resource with a name that matches the one you have in MindManager Options (File > Options > User Information > Username) are ignored Note : ignoreresource operator does not collect anything by itself! It simply ignores topics with resources specified in it's parameters. |
ignoreresorces:all ignoreresorces:any |
all - topics that have all resources specified in the ignoreresource operator parameters are ignored. any - topics that have any of the resources specified in in the ignoreresource operator parameters, are ignored. This operator is used by default. |
tag:tagGroup:tagName tag:tagGroup tag:?:tagName
tag:name:condition:TEXT tag:groupname:condition: |
collects topics that have the specified tags tag:Contexts collects topics with any of the tags of "Contexts" tag group. tag:?:done collects topics with tag "done" from any tag group. Operators with condition collect topics whose tag name (tag:name ) or tag group name (tag:groupname) match condition: contains - contains TEXT startswith - starts with TEXT endswith - ends with TEXT equals - equals TEXT tag:name:contains:process - collects topics that have a tag "Processed" or "Processing" or "In process". Tag group (in this case) no matter. Possible designs: tag:groupname:equals:TEXT1:name:contains:TEXT2 tag:name:startswith:TEXT1:groupname:equals:TEXT2 in this case must be matched BOTH tag group name AND tag name . |
depecated! do not apply! Use tag:tagName | |
tags:all tags:any tags:yes tags:no |
all - collects topics that have all the tags present on the collection topic and/or specified in operators tag. any - collects topics that have any tag present on the collection topic and/or specified in operators tag. This operator is used by default. yes - collects topics that have tags. no - collects topics that have no tags. |
ignoretag:tagGroup:Tag ignoretag:tagGroup ignoretag:?:Tag |
Topics that have the specified tag from the specified tag group will be ignored when collected. Multiple operators are possible: Operator syntax is the same as the tag operator (see above). Note: ignoreretag operator does not collect anything by itself! It simply ignores topics with tags specified in it's parameters . |
ignoretags:all ignoretags:any |
all - topics that have all tags specified in the ignoretag operator parameters are ignored. |
icons:all icons:any |
all - collects topics with all icons set to template or keyword topic any - collects topics with any icon set to template or keyword topic. This is the default. |
ignoreIcons:all ignoreIcons:any |
all - topics with all the icons present in the collection topic are ignored. any - topics with any icon present in the collection topic are ignored. Important! If ignoreIcons is used, icons on the collection topic are not to collect topics that have these icons, but to ignore topics that have these icons! |
property:propertyName: property:propertyName: property:propertyName
property:name: property:groupname: |
collects topics that have the specified properties If value is numeric, it can be either a number or a range of numbers, for example:property:Costs:0-2000:cur , collects topics which have property value from 0 up to 20,000. Variants: property:City:Belfast - collects topics that have a Property named "City", the Property value is "Belfast", property type is unimportant. property:City - collects topics that have a Property named "City", property type and value are unimportant. property:?:Belfast - collects topics that have a Property value "Belfast", Property any property name and any property type. property:?:number - collects topics that have a property type - Number. property name and value ;are unimportant. etc... - a question mark means that this field can be anything. Multiple operators allowed:
Operators with condition collect topics whose property name (property:name) or property value (property:value): These operators work with text Properties only. property:name:contains:expen - collects topics that have Property named "Expense" or "Expend" or "Expenditure". Possible designs: property:name:equals:TEXT1:value:contains:TEXT2 in this case must be matched
BOTH
property name
|
Type:Value |
depecated! do not apply! Use format described above. |
properties:all properties:any properties:yes properties:no |
all - collects topics that have all the properties present on the collection topic and/or specified in operators property. any - collects topics that have any property present on the collection topic and/or specified in operators property. This operator is used by default. yes - collects topics that have properties. no - collects topics that have no properties. |
ignoreproperty: |
Topics that have the specified Property with the specified value and specified Property type will be ignored when collected. Multiple operators allowed: Operator syntax is the same as the property operator (see above). Note: ignoreproperty operator does not collect anything by itself! It simply ignores topics with the properties specified in it's parameters! |
ignoreproperties:all ignoreproperties:any |
all - topics that have all properties specified in the
ignorepropertyoperator parameters are ignored. |
Copy control | |
branch | copies the whole branch of matched topic |
subtopicsonly | all subtopics of the found topic are copied without the topic itself. |
hassubtopics | copying branches, if the parent topic has subtopics, this branch is copied to collection map. If there are no subtopics, the branch will not be copied |
centraltopictext | adds a topic with the text of Central topic of the source map (usually Project name). Added topic gets a hyperlink to Central topic of corresponding map |
maintopictext | adds a topic with the text from Main topic of the matched topic's branch. Added topic gets a hyperlink to corresponding Main topic. |
parenttopictext | adds a topic with the text from Parent topic of matched topic. Added topic gets a hyperlink to corresponding parent topic. |
filterdoubles_map | after the data collection is completed, from the sub-branch of the topic with this operator will be removed all subtopics, which duplicates are present somewhere else in the whole map |
fd_map | synonim for filterdoubles_map |
filterdoubles_branch | after the data collection is completed, from the sub-branch of the topic with this operator will be removed all subtopics, which duplicates are present somewhere above in the branch of this topic (but no in the whole map) |
fd_branch | synonim for filterdoubles_branch |
Combining macro language operators you can create a new collection criteria.
Create a topic with appropriate keyword/phrase and place the necessary operators in its notes, for example:
Possible keyword/phrase | Operators | What will be collected |
My tasks for today | today resource:me |
my tasks (resource:me) for today |
Oversee the programmers | overdue recource:Coleman recource:Smith recource:Raskin |
overdue tasks under the responsibility of Coleman, Smith and Raskin |
My quick tasks | day:0 resource:me effort:min:5-30 |
I have about half hour and I want to see my tasks (resource:me) for today (day: 0) which performance takes** from 5 to 30 minutes (effort:min:5-30) |