Types/Object/Handle ====== userNumber ====== Within Titan, each and every single item which you program has a number - simply an integer number, which you, within reason, can assign freely. In most cases, this is either not conciously used at all, or used in a user-specific system (e.g. group #1 might be the front truss or a specific group of fixtures...). The userNumber can be used to refer to a specific item. Unlike the [[macros:identifier:titanid]] which is unique in a global scope (i.e. per show there can only be one item with a specific titanId), the userNumber is unique only in its context (e.g. fixtures, groups, palettes, playbacks, macros etc.): there can only be one fixture with the number 1 - any subsequently patched fixture will be given another userNumber. But there may also exist group 1, palette 1, or playback 1. userNumber is a positive integer value. Usually the userNumber is passed like this: ''userNumber:2'' ''"chaseHandleUN=10555"'' ''"playbackHandleUN=10555"'' Internally there is some parsing/'educated guessing' performed, depending from the very function the usernumber is sent to. There is a nice explanation in the forum here http://forum.avolites.com/viewtopic.php?f=20&t=5576: >The text string should match the type of the handle you are wanting to access. So in theory you should use cueHandle, chaseHandle and cuelistHandle dependent on the type of playback you are using. In this case the user numbers are shared by all three types so will probably work however may have side effects in other cases. There is also a generic playbackHandle that can be used for all three types. > >Also note that for functions that explicitly require a parameter of type handle such as SetSourceHandleFromHandle you do not need to prefix the string with handle: as it will be automatically converted. See another example for the use of ''"workspaceHandleUN=5"'' here: http://forum.avolites.com/viewtopic.php?f=20&t=5768 And another hint: casting doesn't work inside code blocks, see http://forum.avolites.com/viewtopic.php?f=20&t=5783: >It appears that you cannot use the cast operator within a statement block. It tries to get the function being called but cannot find it inside the statement block. See [[macros:example:recordsetusernumber|]] for an example about recording a playback and then setting its usernumber. As an IEnumarable cannot be set in a macro it is not (as of Titan 11) possible to select multiple playbacks by their usernumber, see http://forum.avolites.com/viewtopic.php?f=20&t=5787 Technically, this syntax looks like https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/named-and-optional-arguments: you have to name the argument 'userNumber', and after a colon give the value. In **Titan v15** this has slightly changed so that there are a few ways to set an IEnumerable, for some examples see [[macros:example:playbackgroupcreateadd|]]. Another important thing there is when the string notation ("cueHandleUN=1") is required: when the invoking function lives in another namespace (here e.g. [[macros:function:playbackgroups.addplaybackstogroup|]]) it would assume any arguments being in this namespace too unless explicitely filtered, e.g. like this: ''Playbacks.FilterByPlaybackHandle(userNumber:2)'' -- or you use the string notation like this: "cueHandleUN=2". Gregory Haynes' email is attached as {{ :macros:email_07062021.pdf |}} for further details. [[:about_this_wiki|ASSUMPTION]] >>>It is a reasonable assumption that [[macros:type:object:acwusernumber]] also refers to userNumber, but in the context of the value being given in the appropriate menu. == used in == {{backlinks>.}} ~~DISCUSSION~~