Dump Connector States
Howdy!
Wondered what's lurking in your connector's state in inRiver PMC? If not, now's the time!
Using the .NET API we can write a simple console application to query and display it. Unfortunately, retrieving all connectors using UtilityService is not available, that support was dropped for iPMC while it's working for on-prem still. Something along the lines of the below would do the trick (the pretty table is optional):
public class Program
{
private const string DateFormat = "yyyy-MM-dd HH:mm:ss";
public static void Main(string[] args)
{
var url = ConfigurationManager.AppSettings["ipmc:url"];
var apiKey = ConfigurationManager.AppSettings["ipmc:apiKey"];
var remoteManager = RemoteManager.CreateInstance(url, apiKey);
Console.Write("Enter connector id: ");
var connectorId = Console.ReadLine();
var connectorStates = remoteManager.UtilityService.GetAllConnectorStatesForConnector(connectorId);
Console.WriteLine();
var maxDataLength = connectorStates.Max(s => s.Data.Length);
var dateFormatLength = DateFormat.Length;
var hLine = new string('-', 10 + dateFormatLength * 2 + maxDataLength);
Console.WriteLine(hLine);
Console.WriteLine($"| {AlignCentre("Created", dateFormatLength)} | {AlignCentre("Modified", dateFormatLength)} | {AlignCentre("State", maxDataLength)} |");
foreach (var state in connectorStates)
{
PrintRow(state, maxDataLength);
}
Console.WriteLine(hLine);
Console.WriteLine("Press any key...");
Console.ReadKey();
}
private static void PrintRow(ConnectorState state, int maxDataLength)
{
Console.Write($"| {state.Created.ToString(DateFormat)} | {state.Modified.ToString(DateFormat)} | {AlignCentre(state.Data, maxDataLength)} |");
Console.WriteLine();
}
private static string AlignCentre(string data, int width)
{
data = data.Length > width ? data.Substring(0, width - 3) + "..." : data;
if (string.IsNullOrEmpty(data))
{
return new string(' ', width);
}
return data.PadRight(width - (width - data.Length) / 2).PadLeft(width);
}
}
Cheers!