So here we already have 1 table which shows the data of the manufacturer list right , so what new implementation we need is to add new table below that table , initially it should be blank, and when we click on the manufacturer in the above table , list of all the devices related to that manufacturer should populate in below table
Hi Miguel, so basically earlier for dashboard we use static method , here we are trying to implement same using dynamic method meaning , we will be taking the data of the devices from the endpoint, so for your reference can I send the QAction method for the same, I am also aware that we can implement the same using Visio as well, but we are trying to do it dynamically
Hi Sanket,
Please note that this table data is identical for all users, so if multiple users would be using this at the same time, they would overwrite each others "selection".
<QAction id="1" name="Deserialize and Store Data" encoding="csharp" triggers="200"
dllImport="newtonsoft.json11.0.2libnet45Newtonsoft.Json.dll;sharpziplib.86.0lib20ICSharpCode.SharpZipLib.dll;protobuf-net.dll;SLProtoBufLibrary.dll">
<![CDATA[
using System;
using System.Collections.Generic;
using Newtonsoft.Json;
using Skyline.DataMiner.Scripting;
public static class QAction
{
public static void Run(SLProtocolExt protocol)
{
try
{
protocol.Log("entered 1");
var content = protocol.GetParameter(200).ToString();
protocol.Log("entered 2");
var data = JsonConvert.DeserializeObject<Rootobject>(content);
protocol.Log("entered 3");
var groupedDevices = data.Results.GroupBy(d => d.device_type.manufacturer.name);
protocol.Log($"{groupedDevices}");
var rows = new List<ProducttableQActionRow>();
foreach (var product in data.Results)
{
var row = new ProducttableQActionRow
{
Productid_1001 = product.Id.ToString(),
Producttitle_1002 = product.Name.ToString(),
Productdescription_1003 = product.Url.ToString(),
Productstatus_1004 = product.status.Value.ToString(),
Productsite_1005 = product.site.Name.ToString(),
};
rows.Add(row);
}
protocol.Log("entered 4");
protocol.producttable.FillArray(rows.ToArray());
}
catch (Exception ex)
{
protocol.Log($"QA{protocol.QActionID}|Run|Exception thrown:{Environment.NewLine}{ex}", LogType.Error, LogLevel.NoLogging);
}
}
}
Hi Sanket,
Instead of executing queries to the device based on the group selection, I would try to query all devices available using the QAction. You could add an extra column in your device table that contains the type.
In that way you can still use a dashboard/LCA.
Hi Sanket,
An initial though I have is to have an additional column of type button in the first table,
and clicking on that button it would trigger a QAction (Important to have row="true").
Then you can take the row on which you clicked the button as:
FirstTableQActionRow row = FirstTableQActionRow((object[])protocol.GetRow(Parameter.FirstTable.tablePid, protocol.RowKey()))
and then based on that data fetch the list of devices and populate the second table.
Hi Alen, thanks for the help
Hi Sanket,
I believe you already asked a similar use case, however it was related to dashboards. Is there a specific reason why you need to implement a similar behavior in a connector/driver?