Facility Control

 View Only
Expand all | Collapse all

Triggering Actions from Dashboard Tally Service

  • 1.  Triggering Actions from Dashboard Tally Service

    Posted 04-30-2017 11:19
    Hi,

    I have got Dashboard setup to receive the Tally data from a Carbonite, and I can see the data updating in the Tally Page.

    What I would like to try and do it set it so that for each tally being turned on or off I can configure an action. In this case I want to send a rosstalk message to trigger the tally on a BMD Smartview Duo monitor.

    I have the rosstalk part working ( rosstalk.sendMessage("$IP", $PORT, "MONITOR $AB:\nBorder: red\n\n", null); ), and I can turn the monitor tallies ON and OFF. I've managed to make a key that will turn a monitor tally on, and wait for the mixer tally to be released, and then turn the monitor tally off, but I can't figure out how to get it to loop (Visual logic deletes any content that loops), and to watch for multiple tally states without making loads of keys.

    If anyone has ideas of a simple method that can do this that'd be really great.

    Ideally I would get it to read the commands to perform from a table on the page, which I would update as sources are changed (and in future I would finish a script to follow the router crosspoints), but for the moment just getting the triggers to run when the tallies are active would be enough.

    Cheers
    James


  • 2.  RE: Triggering Actions from Dashboard Tally Service

    Posted 05-09-2017 21:48
    Hi James.
    Sorry for the delayed response - I can try to help you out with this.

    Perhaps we should start with posting an example of what you're trying to do with the tally service? I'm not sure what you mean when you say you want to watch multiple tally states without making loads of keys? You can listen for all tally changes or attach a function to be called when specific tally IDs change state.

    J

    #DashBoard


  • 3.  RE: Triggering Actions from Dashboard Tally Service

    Posted 05-19-2017 20:55
    Hi James, Thank you for replying.

    What I want to do it watch for specific tallies turning on and off, and when those tallies change state, I want to issue a rosstalk string.

    What I meant by 'loads of keys' is that at the moment, I have a single key, that will wait for a tally to be triggered, issue the 'tally-on' command, wait for the tally to clear, and then issue the 'tally-off' command, so I have a proof of concept, but it's not something I can nicely expand.

    So as an example of what i want to achieve:

    Tally 1 Red On: rosstalk.sendMessage("$IP1", $PORT1, "MONITOR $AB:\nBorder: red\n\n", null);
    Tally 1 Red Off: rosstalk.sendMessage("$IP1", $PORT1, "MONITOR $AB:\nBorder: none\n\n", null);
    Tally 2 Red On: rosstalk.sendMessage("$IP2", $PORT2, "MONITOR $AB:\nBorder: red\n\n", null);
    Tally 2 Red Off: rosstalk.sendMessage("$IP2", $PORT2, "MONITOR $AB:\nBorder: none\n\n", null);
    Tally 3 Red On: rosstalk.sendMessage("$IP3", $PORT3, "MONITOR $AB:\nBorder: red\n\n", null);
    Tally 3 Red Off: rosstalk.sendMessage("$IP3", $PORT3, "MONITOR $AB:\nBorder: none\n\n", null);

    I hope that makes sense.

    Cheers
    James

    #DashBoard


  • 4.  RE: Triggering Actions from Dashboard Tally Service

    Posted 05-23-2017 18:57

    Hey James.
    I think what you're basically looking for is tallyservice.addAllTallyListener. This will trigger your code whenever ANY tally ID is updated and you can execute your appropriate command based on whatever code you put inside of your tally listener function:

    <ogscript handles="onload">
    var tallyListenerFunction = function(tallyEvent)
    {
        //tallyEvent.getId();
        //tallyEvent.getText();
        //tallyEvent.isRedLeft();
        //tallyEvent.isGreenLeft();
        //tallyEvent.isRedRight();
        //tallyEvent.isGreenRight();
        //tallyEvent.getBrightness();
        switch (tallyEvent.getId())
        {
          case 1:
          {
             if (tallyEvent.isRedLeft())
             {
                //DO ON CODE FOR 1
             }
             else
             {
                //DO OFF CODE FOR 1
             }
             break;
          }
          case 2:
          {
             if (tallyEvent.isRedLeft())
             {
                //DO ON CODE FOR 2
             }
             else
             {
                //DO OFF CODE FOR 2
             }
             break;
          }
          case 3:
          {
             if (tallyEvent.isRedLeft())
             {
                //DO ON CODE FOR 3
             }
             else
             {
                //DO OFF CODE FOR 3
             }
             break;
          }
        }
    }
    var tallyListener = tallyservice.addAllTallyListener(this, tallyListenerFunction);
    </ogscript>

    #DashBoard


  • 5.  RE: Triggering Actions from Dashboard Tally Service

    Posted 05-27-2017 20:55

    Hi James,

    That's absolutely spot on, exactly what I was looking for. I've now got that working, and outputting Red and Green tallies to the monitors now. Thank you very much.


    Following on from this, is there anything similar I can do to listen for crosspoint changes on an NK router? (NK-3G72)

    I've been trying to find anything that might apply in the ogScript Reference Guide (if there is a better place for me to look for this, then please send me a link and I'll get on with some reading), but the best I can see is that I can possible challenge the Router to discover the current crosspoint states by doing something like this, and then working through every output.

    nk.setActiveDest(0);
    var Router.OutputSource.1 = nk.getActiveSrc;

    Ideally I would like to do 2 further things here:
    The first is to monitor a couple of router destinations, and turn tallies on and off if they are fed from selected sources.

    The second is to examine what all the Carbonite Inputs are fed from, then examine what all the monitors with Tally capability are fed from, and then apply the tally listener function using a lookup table between the 2. This would basically be an improvement on what you have guided me to be able to do so far, as when either mixer sources or monitor sources are changed, I wouldn't have to reprogram the code manually.

    Many Thanks
    James


    #DashBoard


  • 6.  RE: Triggering Actions from Dashboard Tally Service

    Posted 05-29-2017 00:23
    Hi James,

    I have been doing a little more work on this today, and the first issue I have found is that ogscript.debug doesn't function inside an nk-router abs context. Is there any way to work round this?

    I can now successfully read the source for a crosspoint using nk.getStatus inside an nk-router abs context, and I can then look up the name for that source by chaining the a nk.setActiveSrc with nk.getActiveSrcName, but this seems a very inefficient way of performing this task. Is there a better way that I can achieve this?

    Is it possible to make a listener for router crosspoint changes, to save having to run the lookup commands manually whenever I become aware of a change? (I know this should probably be straight forward, but I'm not a javascript person)

    Lastly, can you think of a nice way of performing a lookup between my 2 tables (one with mixer router sources, and the other with monitor router sorces), to then slot a trigger into the TallyEvent Listener? I can send a copy of my current code over if that is of any use?

    Many Thanks
    James
    #DashBoard


  • 7.  RE: Triggering Actions from Dashboard Tally Service

    Posted 05-29-2017 19:30

    Hi James.
    You are correct - ogscript.debug does not currently work with the NK plug-in... Due to the way the plug-ins are structured, the NK plug-in can't see the openGear debug information view (though we are looking to change this).

    For now, I can offer you this somewhat odd workaround:

    1. Create a regular self-contained data source Custom Panel,
    2. In an tag, create a function called "debug" and have it call ogscript.debug
    3. Create another and have it fill top/left/bottom/right
    4. Point this internal at the NK Router
    5. Inside of this internal , call "debug" instead of "ogscript.debug"

    <abs contexttype="opengear">
       <meta>
          <api>function debug(str)
    {
          ogscript.debug(str);
    }</api>
       </meta>
       <abs bottom="0" contexttype="nk-router" left="0" right="0" top="0">
          <button buttontype="push" height="177" left="208" top="195" width="384">
             <task tasktype="ogscript">debug("Hello world");</task>
          </button>
       </abs>
    </abs>
    

    #DashBoard


  • 8.  RE: Triggering Actions from Dashboard Tally Service

    Posted 05-29-2017 19:58

    Speaking of workarounds, there is another one you can use to get the name of the source returned by getStatus...

    var sourceNum = nk.getStatus("Out 8", "An Aud 1");
    var sourceName = null;
    
    var nkSystem = nk.getActiveSystem();
    if (nkSystem != null)
    {
       var settings = nkSystem.getSettings();
       if (settings != null)
       {
          var srcs = settings.getInputs();
          sourceName = srcs.getLabelForValue(sourceNum - 1); //yes, you need to subtract one because, internally, source numbers start at 0 instead of 1
       }
    }
    debug("Source: " + sourceName);

    #DashBoard


  • 9.  RE: Triggering Actions from Dashboard Tally Service

    Posted 05-29-2017 20:01
    Running your script whenever a source/destination changes (or when a new status value comes in):

    debug(event.getChangedLevels() + " " + event.getChangedOutput() + " " + event.getSrcAddress());
    #DashBoard


  • 10.  RE: Triggering Actions from Dashboard Tally Service

    Posted 05-29-2017 20:02
    Not too sure about that last one. Might need to see your code to fully understand.
    #DashBoard


  • 11.  RE: Triggering Actions from Dashboard Tally Service

    Posted 05-30-2017 16:19
    Hi James,

    nkstatchange is a godsend, this makes so much of this panel more autonomous. The method for extracting the sources names becomes lot easier using settings.labels as well. I've now taken the approach of dumping the source names to an array at the start of the session, and then just reading them from there as required.

    I've not tried the alternative debug approach yet, as I managed to get by by dumping the messages I would send to debug to a string array that I could see. I'll bear it in mind for later and see if it comes in handy.

    As for the lookups I've now got most of them running using nested for loops. when it's looking a little more complete I'll post some of the code back.

    Thank you very much for your help so far.


    #DashBoard


  • 12.  RE: Triggering Actions from Dashboard Tally Service

    Posted 06-05-2017 20:39
    Hi James,

    I think I've managed to get just about everything up and running now, my (hopefully!) [COLOR=#555555][FONT=&quot][SIZE=13px]last few issues with the panel are:

    Each time I click on one of my tables, it increases the row height, and means some of the text disappears off the bottom of the screen. This doesn't reset when I deselect the entry, I have to close and load the panel again to achieve this. Is there a way of stopping the row height expansion when I click on it?

    and:

    Is there a way to UNset a parameter? eg the reverse of params.setValue(0x1,1,1)? I need to use it to clear out unneeded data rows after configs have been resized. (The Equivilent of clicking the X in the Edit parameter window)
    I have tried setting them to null, but they come back as 0, and still appear.

    Cheers
    James[/SIZE][/FONT][/COLOR]

    #DashBoard


  • 13.  RE: Triggering Actions from Dashboard Tally Service

    Posted 06-05-2017 21:05

    You need to always make sure you've got at least one value in each parameter but you can do:

    var newStringArray = ["Hello World"];
    params.setAllValues('STRING_ARRAY_OID', newStringArray);

    (similar concept with numeric arrays)


    We have a configuration option you can add to tables called w.rowheight to specify the default row height for your table... the table should only be tweaking the row height if your rows are too small to properly display the editor... we may want to look at the code behind the panel you're working on for this one...

    James


    #DashBoard


  • 14.  RE: Triggering Actions from Dashboard Tally Service

    Posted 06-06-2017 13:20

    Hi James,

    Here is the code for the sections where I have the issues.

    This includes both one of the tables which increases in size when you go to edit it, and shows the parameter arrays that I need to shorten.

    I have tried adding the w.rowheight="10" into the parameter which is the table widget, but it doesn't seem to have any effect. Even if I cannot stop the row increasing slightly while you edit it, I would like it to return to normal once the edit is complete.

    [SOLVED] I have a button already which can increase the size of arrays 0x2, 0x3, 0x4, 0x5 and 0x6 and prepopulates the data with something safe for processing. I am trying to get the same button to shorten the arrays if they are too long. I've tried adding a temporary array using the var method suggested above, but everytime I try to read data from the temporary array it comes back as undefined.
    [SOLOUTION] I have used a while loop to find the index of the last populated value in the array, and then used params.getParam(OID,Index).remove(); to delete all the values above the ones that I want to exist.

    <abs contexttype="opengear">
       <meta>
          <api>function debug(str)
    {
          ogscript.debug(str);
    }</api>
          <params>
             <param access="1" constraint="1.0;144.0;1.0;144.0;1" constrainttype="INT_STEP_RANGE" name="0x02 Mixer_Input" oid="0x2" precision="0" type="INT16_ARRAY" value="1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;19;20;21;22;23;24;25;26;27" widget="default"/>
             <param access="1" constraint="-1.0;144.0;-1.0;144.0;1" constrainttype="INT_STEP_RANGE" name="0x03 Mixer_Source" oid="0x3" precision="0" type="INT16_ARRAY" value="6;7;8;9;10;11;12;13;1;2;3;4;5;14;15;16;17;41;39;40;21;71;43;24;-1;-1;-1" widget="default"/>
             <param access="1" maxlength="0" name="0x04 Mixer_Router_Destination" oid="0x4" precision="0" type="STRING_ARRAY" value="Static;Static;Static;Static;Static;Static;Static;Static;9;10;11;12;13;14;15;16;17;18;19;20;21;22;23;24;Static;Static;Static" widget="default">
                <value>Static</value>
                <value>Static</value>
                <value>Static</value>
                <value>Static</value>
                <value>Static</value>
                <value>Static</value>
                <value>Static</value>
                <value>Static</value>
                <value>9</value>
                <value>10</value>
                <value>11</value>
                <value>12</value>
                <value>13</value>
                <value>14</value>
                <value>15</value>
                <value>16</value>
                <value>17</value>
                <value>18</value>
                <value>19</value>
                <value>20</value>
                <value>21</value>
                <value>22</value>
                <value>23</value>
                <value>24</value>
                <value>Static</value>
                <value>Static</value>
                <value>Static</value>
             </param>
             <param access="1" maxlength="0" name="0x05 Mixer_Source_Name" oid="0x5" precision="0" type="STRING_ARRAY" value="HOST 1;HOST 2;HOST 3;HOST 4;HOST 5;HOST 6;HOST 7;HOST 8;CAM 1;CAM 2;CAM 3;CAM 4;CAM RF;RED;BLUE;GFX 1F;GFX 1K;GFX 1 PV;Twitter;Conf Rtn Laptop;IPTV;IPTV MonA;Mac Pro;BARS;;;" widget="default">
                <value>HOST 1</value>
                <value>HOST 2</value>
                <value>HOST 3</value>
                <value>HOST 4</value>
                <value>HOST 5</value>
                <value>HOST 6</value>
                <value>HOST 7</value>
                <value>HOST 8</value>
                <value>CAM 1</value>
                <value>CAM 2</value>
                <value>CAM 3</value>
                <value>CAM 4</value>
                <value>CAM RF</value>
                <value>RED</value>
                <value>BLUE</value>
                <value>GFX 1F</value>
                <value>GFX 1K</value>
                <value>GFX 1 PV</value>
                <value>Twitter</value>
                <value>Conf Rtn Laptop</value>
                <value>IPTV</value>
                <value>IPTV MonA</value>
                <value>Mac Pro</value>
                <value>BARS</value>
                <value>
                </value>
                <value>
                </value>
                <value>
                </value>
             </param>
             <param access="1" constrainttype="STRING_CHOICE" maxlength="0" name="0x06 Mixer_TALLY_STATE" oid="0x6" precision="0" type="STRING_ARRAY" value="none;none;none;none;none;none;none;none;none;none;Green;Red;none;none;none;none;none;none;none;none;none;none;Red;none;none;none;none" widget="combo">
                <value>none</value>
                <value>none</value>
                <value>none</value>
                <value>none</value>
                <value>none</value>
                <value>none</value>
                <value>none</value>
                <value>none</value>
                <value>none</value>
                <value>none</value>
                <value>Green</value>
                <value>Red</value>
                <value>none</value>
                <value>none</value>
                <value>none</value>
                <value>none</value>
                <value>none</value>
                <value>none</value>
                <value>none</value>
                <value>none</value>
                <value>none</value>
                <value>none</value>
                <value>Red</value>
                <value>none</value>
                <value>none</value>
                <value>none</value>
                <value>none</value>
                <constraint>none</constraint>
                <constraint>Red</constraint>
                <constraint>Green</constraint>
             </param>
             <param access="1" constrainttype="INT_CHOICE" name="0x09 Mixer_Current_Table" oid="0x9" precision="0" type="INT16" value="6" widget="default">
                <constraint key="2">Mixer Input</constraint>
                <constraint key="4">Matrix DST</constraint>
                <constraint key="3">Current SRC</constraint>
                <constraint key="5">SRC Name</constraint>
                <constraint key="6">Tally</constraint>
             </param>
             <param access="1" maxlength="0" name="0x60 Router Source Names" oid="0x60" precision="0" type="STRING_ARRAY" value="CAM 1;CAM 2;CAM 3;CAM 4;CAM RF;HOST 1;HOST 2;HOST 3;HOST 4;HOST 5;HOST 6;HOST 7;HOST 8;RED;BLUE;GFX 1F;GFX 1K;GFX 2F;GFX 2K;VTR;IPTV;PGM TX (EMB);BLACK;BARS;VM PGM (8);VM PVW;VM MV1 (1);VM MV2 (2);VM A1 (3);VM A2 (4);VM A3 (5);VM A4 (6);VM PGM;VM Mini4;DAK IPTV OP;VTR1 BITC;EVS MV 1;EVS MV 2;Twitter;Conf Rtn Laptop;GFX 1 PV;GFX 2 PV;Mac Pro;IN 44;IN 45;IN 46;IN 47;IN 48;IN 49;IN 50;IN 51;IN 52;IN 53;IN 54;IN 55;IN 56;IN 57;IN 58;IN 59;IN 60;IN 61;IN 62;IN 63;IN 64;IN 65;IN 66;IN 67;FRX 9;FRX 10;NULL!!!;IPTV MonA;IPTV MonB" widget="default">
                <value>CAM 1</value>
                <value>CAM 2</value>
                <value>CAM 3</value>
                <value>CAM 4</value>
                <value>CAM RF</value>
                <value>HOST 1</value>
                <value>HOST 2</value>
                <value>HOST 3</value>
                <value>HOST 4</value>
                <value>HOST 5</value>
                <value>HOST 6</value>
                <value>HOST 7</value>
                <value>HOST 8</value>
                <value>RED</value>
                <value>BLUE</value>
                <value>GFX 1F</value>
                <value>GFX 1K</value>
                <value>GFX 2F</value>
                <value>GFX 2K</value>
                <value>VTR</value>
                <value>IPTV</value>
                <value>PGM TX (EMB)</value>
                <value>BLACK</value>
                <value>BARS</value>
                <value>VM PGM (8)</value>
                <value>VM PVW</value>
                <value>VM MV1 (1)</value>
                <value>VM MV2 (2)</value>
                <value>VM A1 (3)</value>
                <value>VM A2 (4)</value>
                <value>VM A3 (5)</value>
                <value>VM A4 (6)</value>
                <value>VM PGM</value>
                <value>VM Mini4</value>
                <value>DAK IPTV OP</value>
                <value>VTR1 BITC</value>
                <value>EVS MV 1</value>
                <value>EVS MV 2</value>
                <value>Twitter</value>
                <value>Conf Rtn Laptop</value>
                <value>GFX 1 PV</value>
                <value>GFX 2 PV</value>
                <value>Mac Pro</value>
                <value>IN 44</value>
                <value>IN 45</value>
                <value>IN 46</value>
                <value>IN 47</value>
                <value>IN 48</value>
                <value>IN 49</value>
                <value>IN 50</value>
                <value>IN 51</value>
                <value>IN 52</value>
                <value>IN 53</value>
                <value>IN 54</value>
                <value>IN 55</value>
                <value>IN 56</value>
                <value>IN 57</value>
                <value>IN 58</value>
                <value>IN 59</value>
                <value>IN 60</value>
                <value>IN 61</value>
                <value>IN 62</value>
                <value>IN 63</value>
                <value>IN 64</value>
                <value>IN 65</value>
                <value>IN 66</value>
                <value>IN 67</value>
                <value>FRX 9</value>
                <value>FRX 10</value>
                <value>NULL!!!</value>
                <value>IPTV MonA</value>
                <value>IPTV MonB</value>
             </param>
             <param access="1" constraint="0.0;144.0;0.0;144.0;1" constrainttype="INT_STEP_RANGE" name="0x64 Monitor_How_Many" oid="0x64" precision="0" type="INT16" value="8" widget="default"/>
             <param access="1" constrainttype="INT_CHOICE" name="0x67 Matrix Size" oid="0x67" precision="0" type="INT16" value="72" widget="default">
                <constraint key="4">4</constraint>
                <constraint key="16">16</constraint>
                <constraint key="32">32</constraint>
                <constraint key="34">34</constraint>
                <constraint key="64">64</constraint>
                <constraint key="72">72</constraint>
                <constraint key="144">144</constraint>
             </param>
             <param access="1" constraint="0.0;144.0;0.0;144.0;1" constrainttype="INT_STEP_RANGE" name="0x68 RTR_Tallies" oid="0x68" precision="0" type="INT16" value="1" widget="default"/>
             <param access="1" constrainttype="INT_CHOICE" name="0x99 Config_Table" oid="0x99" precision="0" type="INT16" value="0" widget="default">
                <constraint key="105">Mixer Total Inputs</constraint>
                <constraint key="103">Matix Size</constraint>
                <constraint key="100">Matrix fed Monitor Tallies</constraint>
                <constraint key="104">Matrix Direct Tallies</constraint>
             </param>
             <param access="1" constrainttype="INT_CHOICE" name="0x100 OnLoad_Lockout" oid="0x100" precision="0" type="INT16_ARRAY" value="1;0;0" widget="default">
                <constraint key="0">Unlocked</constraint>
                <constraint key="1">Locked</constraint>
             </param>
             <param access="1" constrainttype="INT_NULL" name="0x69 Mixer_Total_Inputs" oid="0x69" precision="0" type="INT16" value="24" widget="default"/>
          </params>
       </meta>
       <abs bottom="0" contexttype="nk-router" left="0" objectid="0084174008" right="0" scroll="true" top="0">
          <api>function BuildMixerInputs() //Make the number of Mixer Inputs equal the settings
      {
      for (count_mixer_inputs = 0; count_mixer_inputs &lt; params.getValue(0x69,0); count_mixer_inputs = count_mixer_inputs +1)
        {
        if (params.getValue(0x2,count_mixer_inputs) == "" )
          {
          params.setValue(0x2,count_mixer_inputs,count_mixer_inputs+1);
          params.setValue(0x3,count_mixer_inputs,"-1");
          params.setValue(0x4,count_mixer_inputs,"Static");
          params.setValue(0x5,count_mixer_inputs," ");
          params.setValue(0x6,count_mixer_inputs,"none");
          debug("BuildMixerInputs: "+(count_mixer_inputs+1));
          }
        }
      debug("Fuction BuildMixerInputs Complete");
      }</api>
          <simplegrid bottom="10" height="60" left="10" style="bg#dark;bdr:etched;" width="300">
             <ipslist style="t:bg#timerfg;f:bg#FF0000;"/>
          </simplegrid>
          <param bottom="10" editable="false" evenstyle="f:txt-align:center;f:font:default;f:size:Normal;t:txt-align:center;t:font:default;t:size:Normal;" expand="true" oddstyle="f:txt-align:center;f:font:default;f:size:Normal;t:txt-align:center;t:font:default;t:size:Normal;" oid="0x9" right="10" showlabel="false" style="txt-align:center;size:Normal;font:default;f:txt-align:center;f:font:default;f:size:Normal;t:txt-align:center;t:font:default;t:size:Normal;" top="220" w.rowheight="10" widget="table" width="400"/>
          <param evenstyle="f:txt-align:center;t:txt-align:center;" expand="true" height="50" left="10" oddstyle="f:txt-align:center;t:txt-align:center;" oid="0x99" right="420" showlabel="false" style="txt-align:center;f:txt-align:center;t:txt-align:center;" top="540" w.rowheight="10" widget="table"/>
          <button bottom="80" buttontype="push" height="60" name="Resize Config" right="420" width="150">
             <task tasktype="ogscript">BuildMixerInputs();</task>
          </button>
       </abs>
    </abs>

    #DashBoard


  • 15.  RE: Triggering Actions from Dashboard Tally Service

    Posted 06-06-2017 20:26

    Unfortunately, this is a case of DashBoard trying to be a little 'too helpful'...
    One workaround is to use a row height parameter where there is an element in the array to specify the height of each row:

    New Parameter:

    <param access="1" constraint="1.0;144.0;1.0;144.0;1" constrainttype="INT_STEP_RANGE" name="Row Heights" oid="params.rowheights" precision="0" type="INT16_ARRAY" value="20;20;20;20;20;20;20;20;20;20;20;20;20;20;20;20;20;20;20;20;20;20;20;20;20;20;20;20;" widget="default"/>

    New OGLML:

    <param bottom="10" editable="false" evenstyle="f:txt-align:center;f:font:default;t:txt-align:center;t:font:default;" expand="true" oddstyle="f:txt-align:center;f:font:default;t:txt-align:center;t:font:default;" oid="0x9" right="10" showlabel="false" style="txt-align:center;size:Smallest;font:default;f:txt-align:center;f:font:default;t:txt-align:center;t:font:default;" top="220" w.rowheight="10" widget="table" width="400">
       <config key="w.rowheightparam">params.rowheights</config>
    </param>

    #DashBoard


  • 16.  RE: Triggering Actions from Dashboard Tally Service

    Posted 06-08-2017 11:04
    Hi James,

    That seems to have got it sussed, Thank you very much.

    Cheers
    James
    #DashBoard