For HyperSync implementations, as with the Pending Report for Microsoft Identity Manager implementations, this report is natively built into Identity Panel.
What varies here is the comparatively trivial nature of generating reports. This is a distinct benefit of moving from HyperSync to MIM Sync when implementing Identity Panel:
- Built-in support defined at the grouping level for attributes in HyperSync rules;
- Focus is on the actual rule/attribute flow level (an improvement over MIM, whereby you can only see how many changes a MIM MA will make at the object level), for example allowing you to disregard any "white noise" when looking for how many accounts you're disabling or enabling;
- Inspecting output before performing any action is guaranteed by the Simulation Mode setting locally on the flow rule set (or globally if desired) for added flexibility and safety;
- If Simulation Mode is set globally, then it is possible to not only have sync changes committed selectively (as with MIM) but also applied selectively to the target system.
Pending Report Example
For HyperSync implementations, the Sync Actions Report is useful not only for inspecting historical changes, but by filtering on actions performed in Simulation Mode it provides a means for reporting on Pending Actions as well.
From the Time Traveler sync button for a selected user, this appears as follows:
The simulated actions can then be filtered in the report as follows (focus being on Export rules in this example):
As with the Pending Report for Microsoft Identity Manager, this report is natively built into Identity Panel. However, what varies is the comparatively trivial nature of generating reports. This is a distinct benefit of moving from HyperSync to MIM Sync when implementing Identity Panel:
- Built-in support defined at the grouping level for attributes in HyperSync rules;
- Focus is on the actual rule/attribute flow level (an improvement over MIM, whereby you can only see how many changes a MIM MA will make at the object level), for example allowing you to disregard any "white noise" when looking for how many accounts you're disabling or enabling;
- Inspecting output before performing any action is guaranteed by the Simulation Mode setting locally on the flow rule set (or globally if desired) for added flexibility and safety;
- If Simulation Mode is set globally, then it is possible to not only have sync changes committed selectively (as with MIM) but also applied selectively to the target system.
Report Definition (V7+)
The following is the original report for V6 adapted for V7.
{
"Data": [
{
"$type": "SoftwareIDM.PanelModel.Models.Reporting.Report, SoftwareIDM.PanelModel",
"Id": "abd64ec0-9cee-4167-b4ff-bc2bc999a30f",
"Name": "HyperSync Actions",
"UserId": "47d4df20-1c33-4a1b-8e09-ee0629613cbe",
"UserProfile": false,
"Tags": null,
"Roles": null,
"CacheExpiration": "01:00:00",
"Description": "",
"Parameters": [
{
"$type": "SoftwareIDM.PanelModel.Models.Reporting.TextReportParameter, SoftwareIDM.PanelModel",
"Name": "Rule Name",
"Description": "HyperSync Rule Name must contain this value",
"Required": true,
"Validation": "",
"DefaultValue": ""
},
{
"$type": "SoftwareIDM.PanelModel.Models.Reporting.TextReportParameter, SoftwareIDM.PanelModel",
"Name": "Since",
"Description": "",
"Required": true,
"Validation": "TimeSpan",
"DefaultValue": "1.00:00:00"
},
{
"$type": "SoftwareIDM.PanelModel.Models.Reporting.SelectReportParameter, SoftwareIDM.PanelModel",
"ValueChoices": [
"*",
"Pending",
"ReviewNeeded",
"Approved",
"Rejected",
"Triggered",
"Expired",
"Failed"
],
"Name": "Status",
"Description": "Filter on Action Status",
"Required": true,
"Validation": "",
"DefaultValue": "*"
},
{
"$type": "SoftwareIDM.PanelModel.Models.Reporting.SelectReportParameter, SoftwareIDM.PanelModel",
"ValueChoices": [
"*",
"Simulated",
"Committed"
],
"Name": "Simulated",
"Description": "",
"Required": true,
"Validation": "",
"DefaultValue": "*"
}
],
"Data": [
{
"$type": "SoftwareIDM.PanelModel.Models.Reporting.QueryData, SoftwareIDM.PanelModel",
"Clauses": [
{
"$type": "SoftwareIDM.PanelModel.Models.FilterClause, SoftwareIDM.PanelModel",
"Field": "Name",
"Operation": "Contains",
"Value": "Memo(\"Rule Name\")",
"ObjectValue": null
},
{
"$type": "SoftwareIDM.PanelModel.Models.FilterClause, SoftwareIDM.PanelModel",
"Field": "TimeStamp",
"Operation": "Gte",
"Value": "Ago(CoerceTimeSpan(Memo(\"Since\")))",
"ObjectValue": null
}
],
"SubQueries": [],
"MapRule": "//Map(FirstNotNull(AttributeChanges, Data), context)\nMap(FirstNotNull(AttributeChanges, If(And(Data, Data.Count>0), Data, null), Dict(Deleted=\"true\")), context)",
"MemoRules": [
{
"$type": "SoftwareIDM.PanelModel.Models.Reporting.MemoRule, SoftwareIDM.PanelModel",
"Name": "Trigger",
"Rule": "Parent.TriggerId"
},
{
"$type": "SoftwareIDM.PanelModel.Models.Reporting.MemoRule, SoftwareIDM.PanelModel",
"Name": "Workflow",
"Rule": "Parent.WorkflowId"
}
],
"Aliases": null,
"Name": "Actions",
"Type": "SoftwareIDM.PanelModel.Models.SyncAction, SoftwareIDM.PanelModel",
"Include": null,
"Limit": null
},
{
"$type": "SoftwareIDM.PanelModel.Models.Reporting.QueryData, SoftwareIDM.PanelModel",
"Clauses": [
{
"$type": "SoftwareIDM.PanelModel.Models.FilterClause, SoftwareIDM.PanelModel",
"Field": "Id",
"Operation": "In",
"Value": "Distinct(FirstNotNull(Memo(\"Trigger\"), List(GenerateGuid())), context)",
"ObjectValue": null
}
],
"SubQueries": [],
"MapRule": "",
"MemoRules": [],
"Aliases": null,
"Name": "Triggers",
"Type": "SoftwareIDM.PanelModel.Models.ObjectRecord, SoftwareIDM.PanelModel",
"Include": [
"Attributes",
"DN"
],
"Limit": null
},
{
"$type": "SoftwareIDM.PanelModel.Models.Reporting.QueryData, SoftwareIDM.PanelModel",
"Clauses": [
{
"$type": "SoftwareIDM.PanelModel.Models.FilterClause, SoftwareIDM.PanelModel",
"Field": "Id",
"Operation": "In",
"Value": "Distinct(FirstNotNull(Memo(\"Workflow\"), List(GenerateGuid())), context)",
"ObjectValue": null
}
],
"SubQueries": [],
"MapRule": "",
"MemoRules": [],
"Aliases": null,
"Name": "Workflows",
"Type": "SoftwareIDM.WorkflowModel.WorkflowRecord, SoftwareIDM.WorkflowModel",
"Include": null,
"Limit": null
}
],
"Relations": [
{
"$type": "SoftwareIDM.PanelModel.Models.Reporting.Relation, SoftwareIDM.PanelModel",
"Name": "Action - Trigger",
"LeftSet": "Actions",
"RightSet": "Triggers",
"LeftRule": "Parent.TriggerId",
"RightRule": "Id",
"AllowLeftOuter": false,
"AllowRightOuter": true
},
{
"$type": "SoftwareIDM.PanelModel.Models.Reporting.Relation, SoftwareIDM.PanelModel",
"Name": "Action - Workflow",
"LeftSet": "Actions",
"RightSet": "Workflows",
"LeftRule": "Parent.WorkflowId",
"RightRule": "Id",
"AllowLeftOuter": false,
"AllowRightOuter": true
}
],
"FieldProjections": [
{
"$type": "SoftwareIDM.PanelModel.Models.Reporting.Projection, SoftwareIDM.PanelModel",
"Name": "RuleSet Name",
"RelationName": "Action - Trigger",
"RelationSide": "Left",
"ValueRule": "Parent.RuleSetName"
},
{
"$type": "SoftwareIDM.PanelModel.Models.Reporting.Projection, SoftwareIDM.PanelModel",
"Name": "Rule Name",
"RelationName": "Action - Trigger",
"RelationSide": "Left",
"ValueRule": "Parent.Name"
},
{
"$type": "SoftwareIDM.PanelModel.Models.Reporting.Projection, SoftwareIDM.PanelModel",
"Name": "Status",
"RelationName": "Action - Trigger",
"RelationSide": "Left",
"ValueRule": "CoerceString(Parent.Status)"
},
{
"$type": "SoftwareIDM.PanelModel.Models.Reporting.Projection, SoftwareIDM.PanelModel",
"Name": "Simulated",
"RelationName": "Action - Trigger",
"RelationSide": "Left",
"ValueRule": "If(Parent.Simulated, \"Simulated\", \"Committed\")"
},
{
"$type": "SoftwareIDM.PanelModel.Models.Reporting.Projection, SoftwareIDM.PanelModel",
"Name": "Time Stamp",
"RelationName": "Action - Trigger",
"RelationSide": "Left",
"ValueRule": "DateTimeFormat(Parent.TimeStamp, \"yyyy-MM-dd hh:mm\")"
},
{
"$type": "SoftwareIDM.PanelModel.Models.Reporting.Projection, SoftwareIDM.PanelModel",
"Name": "Trigger",
"RelationName": "Action - Trigger",
"RelationSide": "Left",
"ValueRule": "TimeTraveler(Parent.TriggerId) + \"|\" + Parent.TriggerDN"
},
{
"$type": "SoftwareIDM.PanelModel.Models.Reporting.Projection, SoftwareIDM.PanelModel",
"Name": "ID",
"RelationName": "Action - Trigger",
"RelationSide": "Right",
"ValueRule": "FirstNotNull(\n CoerceString(Attributes.uniqueID),\n CoerceString(Attributes.displayName),\n CoerceString(DN)\n)"
},
{
"$type": "SoftwareIDM.PanelModel.Models.Reporting.Projection, SoftwareIDM.PanelModel",
"Name": "Attribute",
"RelationName": "Action - Trigger",
"RelationSide": "Left",
"ValueRule": "Child.Key"
},
{
"$type": "SoftwareIDM.PanelModel.Models.Reporting.Projection, SoftwareIDM.PanelModel",
"Name": "From",
"RelationName": "Action - Trigger",
"RelationSide": "Left",
"ValueRule": "If(\n CoerceString(If(Parent.AttributeChanges, Child.Value.Original, \"N/A\")).Length > 250,\n Left(CoerceString(If(Parent.AttributeChanges, Child.Value.Original, \"N/A\")), 250) + \"...\",\n CoerceString(If(Parent.AttributeChanges, Child.Value.Original, \"N/A\"))\n)"
},
{
"$type": "SoftwareIDM.PanelModel.Models.Reporting.Projection, SoftwareIDM.PanelModel",
"Name": "To",
"RelationName": "Action - Trigger",
"RelationSide": "Left",
"ValueRule": "If(\n And(Parent.AttributeChanges, Child.Key == \"proxyAddresses\"),\n If(\n Or(\n Except(Map(Child.Value.Original, LowerCase(context)), Map(Child.Value.Value, LowerCase(context))).Count,\n Except(Map(Child.Value.Value, LowerCase(context)), Map(Child.Value.Original, LowerCase(context))).Count\n ),\n CoerceString(Child.Value.Value),\n \"No Change\"\n ),\n If(\n CoerceString(If(Parent.AttributeChanges, Child.Value.Value, Child.Value)).Length > 250,\n Left(CoerceString(If(Parent.AttributeChanges, Child.Value.Value, Child.Value)), 250) + \"...\",\n CoerceString(If(Parent.AttributeChanges, Child.Value.Value, Child.Value))\n )\n)"
},
{
"$type": "SoftwareIDM.PanelModel.Models.Reporting.Projection, SoftwareIDM.PanelModel",
"Name": "Rule Id",
"RelationName": "Action - Trigger",
"RelationSide": "Left",
"ValueRule": "Id"
},
{
"$type": "SoftwareIDM.PanelModel.Models.Reporting.Projection, SoftwareIDM.PanelModel",
"Name": "WF Name",
"RelationName": "Action - Workflow",
"RelationSide": "Right",
"ValueRule": "CoerceString(Name)"
},
{
"$type": "SoftwareIDM.PanelModel.Models.Reporting.Projection, SoftwareIDM.PanelModel",
"Name": "WF Id",
"RelationName": "Action - Workflow",
"RelationSide": "Right",
"ValueRule": "Id"
},
{
"$type": "SoftwareIDM.PanelModel.Models.Reporting.Projection, SoftwareIDM.PanelModel",
"Name": "WF End",
"RelationName": "Action - Workflow",
"RelationSide": "Right",
"ValueRule": "DateTimeFormat(End, \"yyyy-MM-dd hh:mm\")"
},
{
"$type": "SoftwareIDM.PanelModel.Models.Reporting.Projection, SoftwareIDM.PanelModel",
"Name": "WF Result",
"RelationName": "Action - Workflow",
"RelationSide": "Right",
"ValueRule": "CoerceString(Result)"
},
{
"$type": "SoftwareIDM.PanelModel.Models.Reporting.Projection, SoftwareIDM.PanelModel",
"Name": "Step Actions",
"RelationName": "Action - Workflow",
"RelationSide": "Right",
"ValueRule": "Flatten(Map( Steps, Switch( TypeName(Data) == \"FixtureWorkflowStep\", $\"{TimeTraveler(Data.FixtureId)}|{Name}: {Result}\", TypeName(Data) == \"InlineFixtureWorkflowStep\", Map(Data.Results, $\"{TimeTraveler(Id)}|{Name}: {Result}\"), $\"{Name}: {Result}\" )))"
}
],
"Transformations": [
{
"$type": "SoftwareIDM.PanelModel.Models.Reporting.Transform, SoftwareIDM.PanelModel",
"FilterRule": "If(Memo(\"Status\") == \"*\", true, Data.Status == Memo(\"Status\"))",
"GroupingRule": "",
"TransformRules": []
},
{
"$type": "SoftwareIDM.PanelModel.Models.Reporting.Transform, SoftwareIDM.PanelModel",
"FilterRule": "If(Memo(\"Simulated\") == \"*\", true, Data.Simulated == Memo(\"Simulated\"))",
"GroupingRule": "",
"TransformRules": []
}
],
"Styles": [
{
"$type": "SoftwareIDM.PanelModel.Models.Reporting.RowStyle, SoftwareIDM.PanelModel",
"Fields": [
"WF Result"
],
"ConditionRule": "And(WF Result != \"success\", WF Result != null)",
"Bold": false,
"Italic": false,
"Hide": false,
"TextColor": "",
"CellColor": "r"
},
{
"$type": "SoftwareIDM.PanelModel.Models.Reporting.RowStyle, SoftwareIDM.PanelModel",
"Fields": [
"WF Result"
],
"ConditionRule": "WF Result == \"success\"",
"Bold": false,
"Italic": false,
"Hide": false,
"TextColor": "",
"CellColor": "g"
}
],
"Sort": {
"Field": "Time Stamp",
"Direction": "Ascending"
}
}
],
"Count": 1
}
Report Definition - Fast Version (V7+)
The following is a simplified report for V7 for faster (but less detailed) results.
{
"Data": [
{
"$type": "SoftwareIDM.PanelModel.Models.Reporting.Report, SoftwareIDM.PanelModel",
"Id": "f13d3941-1c7a-4224-a8e2-63c0dc8e4d9c",
"Name": "HyperSync Actions Fast",
"UserId": "47d4df20-1c33-4a1b-8e09-ee0629613cbe",
"UserProfile": false,
"Tags": null,
"Roles": null,
"CacheExpiration": "01:00:00",
"Description": "HyperSync Actions - simplified for performance",
"Parameters": [
{
"$type": "SoftwareIDM.PanelModel.Models.Reporting.TextReportParameter, SoftwareIDM.PanelModel",
"Name": "Rule Name",
"Description": "HyperSync Rule Name must contain this value",
"Required": true,
"Validation": "",
"DefaultValue": ""
},
{
"$type": "SoftwareIDM.PanelModel.Models.Reporting.TextReportParameter, SoftwareIDM.PanelModel",
"Name": "Since",
"Description": "",
"Required": true,
"Validation": "TimeSpan",
"DefaultValue": "1.00:00:00"
},
{
"$type": "SoftwareIDM.PanelModel.Models.Reporting.SelectReportParameter, SoftwareIDM.PanelModel",
"ValueChoices": [
"*",
"Pending",
"ReviewNeeded",
"Approved",
"Rejected",
"Triggered",
"Expired",
"Failed"
],
"Name": "Status",
"Description": "Filter on Action Status",
"Required": true,
"Validation": "",
"DefaultValue": "*"
},
{
"$type": "SoftwareIDM.PanelModel.Models.Reporting.SelectReportParameter, SoftwareIDM.PanelModel",
"ValueChoices": [
"*",
"Simulated",
"Committed"
],
"Name": "Simulated",
"Description": "",
"Required": true,
"Validation": "",
"DefaultValue": "*"
}
],
"Data": [
{
"$type": "SoftwareIDM.PanelModel.Models.Reporting.QueryData, SoftwareIDM.PanelModel",
"Clauses": [
{
"$type": "SoftwareIDM.PanelModel.Models.FilterClause, SoftwareIDM.PanelModel",
"Field": "Name",
"Operation": "Contains",
"Value": "Memo(\"Rule Name\")",
"ObjectValue": null
},
{
"$type": "SoftwareIDM.PanelModel.Models.FilterClause, SoftwareIDM.PanelModel",
"Field": "TimeStamp",
"Operation": "Gte",
"Value": "Ago(CoerceTimeSpan(Memo(\"Since\")))",
"ObjectValue": null
}
],
"SubQueries": [],
"MapRule": "Map(FirstNotNull(AttributeChanges, If(And(Data, Data.Count>0), Data, null), Dict(Deleted=\"true\")), context)",
"MemoRules": [
{
"$type": "SoftwareIDM.PanelModel.Models.Reporting.MemoRule, SoftwareIDM.PanelModel",
"Name": "Trigger",
"Rule": "Parent.TriggerId"
},
{
"$type": "SoftwareIDM.PanelModel.Models.Reporting.MemoRule, SoftwareIDM.PanelModel",
"Name": "Workflow",
"Rule": "Parent.WorkflowId"
}
],
"Aliases": null,
"Name": "Actions",
"Type": "SoftwareIDM.PanelModel.Models.SyncAction, SoftwareIDM.PanelModel",
"Include": null,
"Limit": null
}
],
"Relations": [],
"FieldProjections": [
{
"$type": "SoftwareIDM.PanelModel.Models.Reporting.Projection, SoftwareIDM.PanelModel",
"Name": "RuleSet Name",
"RelationName": "",
"RelationSide": null,
"ValueRule": "Parent.RuleSetName"
},
{
"$type": "SoftwareIDM.PanelModel.Models.Reporting.Projection, SoftwareIDM.PanelModel",
"Name": "Rule Name",
"RelationName": "",
"RelationSide": null,
"ValueRule": "Parent.Name"
},
{
"$type": "SoftwareIDM.PanelModel.Models.Reporting.Projection, SoftwareIDM.PanelModel",
"Name": "Status",
"RelationName": "",
"RelationSide": null,
"ValueRule": "CoerceString(Parent.Status)"
},
{
"$type": "SoftwareIDM.PanelModel.Models.Reporting.Projection, SoftwareIDM.PanelModel",
"Name": "Simulated",
"RelationName": "",
"RelationSide": null,
"ValueRule": "If(Parent.Simulated, \"Simulated\", \"Committed\")"
},
{
"$type": "SoftwareIDM.PanelModel.Models.Reporting.Projection, SoftwareIDM.PanelModel",
"Name": "Time Stamp",
"RelationName": "",
"RelationSide": null,
"ValueRule": "DateTimeFormat(Parent.TimeStamp, \"yyyy-MM-dd hh:mm\")"
},
{
"$type": "SoftwareIDM.PanelModel.Models.Reporting.Projection, SoftwareIDM.PanelModel",
"Name": "Trigger",
"RelationName": "",
"RelationSide": null,
"ValueRule": "If(And(Parent.TriggerId, Parent.TriggerDN), TimeTraveler(Parent.TriggerId) + \"|\" + Parent.TriggerDN)"
},
{
"$type": "SoftwareIDM.PanelModel.Models.Reporting.Projection, SoftwareIDM.PanelModel",
"Name": "Attribute",
"RelationName": "",
"RelationSide": null,
"ValueRule": "Child.Key"
},
{
"$type": "SoftwareIDM.PanelModel.Models.Reporting.Projection, SoftwareIDM.PanelModel",
"Name": "From",
"RelationName": "",
"RelationSide": null,
"ValueRule": "If(\n CoerceString(If(Parent.AttributeChanges, Child.Value.Original, \"N/A\")).Length > 250,\n Left(CoerceString(If(Parent.AttributeChanges, Child.Value.Original, \"N/A\")), 250) + \"...\",\n CoerceString(If(Parent.AttributeChanges, Child.Value.Original, \"N/A\"))\n)"
},
{
"$type": "SoftwareIDM.PanelModel.Models.Reporting.Projection, SoftwareIDM.PanelModel",
"Name": "To",
"RelationName": "",
"RelationSide": null,
"ValueRule": "If(\n And(Parent.AttributeChanges, Child.Key == \"proxyAddresses\"),\n If(\n Or(\n Except(Map(Child.Value.Original, LowerCase(context)), Map(Child.Value.Value, LowerCase(context))).Count,\n Except(Map(Child.Value.Value, LowerCase(context)), Map(Child.Value.Original, LowerCase(context))).Count\n ),\n CoerceString(Child.Value.Value),\n \"No Change\"\n ),\n If(\n CoerceString(If(Parent.AttributeChanges, Child.Value.Value, Child.Value)).Length > 250,\n Left(CoerceString(If(Parent.AttributeChanges, Child.Value.Value, Child.Value)), 250) + \"...\",\n CoerceString(If(Parent.AttributeChanges, Child.Value.Value, Child.Value))\n )\n)"
},
{
"$type": "SoftwareIDM.PanelModel.Models.Reporting.Projection, SoftwareIDM.PanelModel",
"Name": "Rule Id",
"RelationName": "",
"RelationSide": null,
"ValueRule": "Id"
}
],
"Transformations": [
{
"$type": "SoftwareIDM.PanelModel.Models.Reporting.Transform, SoftwareIDM.PanelModel",
"FilterRule": "If(Memo(\"Status\") == \"*\", true, Data.Status == Memo(\"Status\"))",
"GroupingRule": "",
"TransformRules": []
},
{
"$type": "SoftwareIDM.PanelModel.Models.Reporting.Transform, SoftwareIDM.PanelModel",
"FilterRule": "If(Memo(\"Simulated\") == \"*\", true, Data.Simulated == Memo(\"Simulated\"))",
"GroupingRule": "",
"TransformRules": []
}
],
"Styles": [],
"Sort": {
"Field": "Time Stamp",
"Direction": "Ascending"
}
}
],
"Count": 1
}
Report Definition (V6)
The following is the original report for V6.
{
"Data": [
{
"$type": "SoftwareIDM.ReportingModule.Models.Report, SoftwareIDM.ReportingModule",
"Id": "9cc86259-3fc2-4baf-bb73-08ca324c215a",
"Name": "HyperSync Actions",
"UserId": "6a18cdf9-1e1b-44d4-97ec-3674a98437c9",
"UserProfile": false,
"Tags": null,
"Roles": null,
"CacheExpiration": "01:00:00",
"Description": "",
"Parameters": [
{
"$type": "SoftwareIDM.ReportingModule.Models.TextReportParameter, SoftwareIDM.ReportingModule",
"Name": "Rule Name",
"Description": "HyperSync Rule Name must contain this value",
"Required": true,
"Validation": "",
"DefaultValue": ""
},
{
"$type": "SoftwareIDM.ReportingModule.Models.TextReportParameter, SoftwareIDM.ReportingModule",
"Name": "Since",
"Description": "",
"Required": true,
"Validation": "TimeSpan",
"DefaultValue": "1.00:00:00"
},
{
"$type": "SoftwareIDM.ReportingModule.Models.SelectReportParameter, SoftwareIDM.ReportingModule",
"ValueChoices": [
"*",
"Pending",
"ReviewNeeded",
"Approved",
"Rejected",
"Triggered",
"Expired",
"Failed"
],
"Name": "Status",
"Description": "Filter on Action Status",
"Required": true,
"Validation": "",
"DefaultValue": "*"
},
{
"$type": "SoftwareIDM.ReportingModule.Models.SelectReportParameter, SoftwareIDM.ReportingModule",
"ValueChoices": [
"*",
"Simulated",
"Committed"
],
"Name": "Simulated",
"Description": "",
"Required": true,
"Validation": "",
"DefaultValue": "*"
}
],
"DataSets": [
{
"$type": "SoftwareIDM.ReportingModule.Models.QueryData, SoftwareIDM.ReportingModule",
"Clauses": [
{
"$type": "SoftwareIDM.PanelModel.Models.FilterClause, SoftwareIDM.PanelModel",
"Field": "Name",
"Operation": "Contains",
"Value": "Memo(\"Rule Name\")",
"ObjectValue": null
},
{
"$type": "SoftwareIDM.PanelModel.Models.FilterClause, SoftwareIDM.PanelModel",
"Field": "TimeStamp",
"Operation": "Gte",
"Value": "Ago(CoerceTimeSpan(Memo(\"Since\")))",
"ObjectValue": null
}
],
"SubQueries": [],
"MapRule": "Map(FirstNotNull(AttributeChanges, If(And(Data, Data.Count>0), Data, null), Dict(Deleted=\"true\")), context)",
"MemoRules": [
{
"$type": "SoftwareIDM.ReportingModule.Models.MemoRule, SoftwareIDM.ReportingModule",
"Name": "Trigger",
"Rule": "Parent.TriggerId"
},
{
"$type": "SoftwareIDM.ReportingModule.Models.MemoRule, SoftwareIDM.ReportingModule",
"Name": "Workflow",
"Rule": "Parent.WorkflowId"
}
],
"Aliases": null,
"Name": "Actions",
"Type": "SoftwareIDM.PanelModel.Models.SyncAction, SoftwareIDM.PanelModel",
"Include": null,
"Limit": null
},
{
"$type": "SoftwareIDM.ReportingModule.Models.QueryData, SoftwareIDM.ReportingModule",
"Clauses": [
{
"$type": "SoftwareIDM.PanelModel.Models.FilterClause, SoftwareIDM.PanelModel",
"Field": "Id",
"Operation": "In",
"Value": "Distinct(Memo(\"Trigger\"), context)",
"ObjectValue": null
}
],
"SubQueries": [],
"MapRule": "",
"MemoRules": [],
"Aliases": null,
"Name": "Triggers",
"Type": "SoftwareIDM.PanelModel.Models.ObjectRecord, SoftwareIDM.PanelModel",
"Include": [
"Attributes",
"DN"
],
"Limit": null
},
{
"$type": "SoftwareIDM.ReportingModule.Models.QueryData, SoftwareIDM.ReportingModule",
"Clauses": [
{
"$type": "SoftwareIDM.PanelModel.Models.FilterClause, SoftwareIDM.PanelModel",
"Field": "Id",
"Operation": "In",
"Value": "Distinct(Memo(\"Workflow\"), context)",
"ObjectValue": null
}
],
"SubQueries": [],
"MapRule": "",
"MemoRules": [],
"Aliases": null,
"Name": "Workflows",
"Type": "SoftwareIDM.WorkflowModel.WorkflowRecord, SoftwareIDM.WorkflowModel",
"Include": null,
"Limit": null
}
],
"ReportSets": [],
"Relations": [
{
"$type": "SoftwareIDM.ReportingModule.Models.Relation, SoftwareIDM.ReportingModule",
"Name": "Action - Trigger",
"LeftSet": "Actions",
"RightSet": "Triggers",
"LeftRule": "Parent.TriggerId",
"RightRule": "Id",
"AllowLeftOuter": false,
"AllowRightOuter": true
},
{
"$type": "SoftwareIDM.ReportingModule.Models.Relation, SoftwareIDM.ReportingModule",
"Name": "Action - Workflow",
"LeftSet": "Actions",
"RightSet": "Workflows",
"LeftRule": "Parent.WorkflowId",
"RightRule": "Id",
"AllowLeftOuter": false,
"AllowRightOuter": true
}
],
"FieldProjections": [
{
"$type": "SoftwareIDM.ReportingModule.Models.Projection, SoftwareIDM.ReportingModule",
"Name": "Rule Name",
"RelationName": "Action - Trigger",
"RelationSide": "Left",
"ValueRule": "Parent.Name"
},
{
"$type": "SoftwareIDM.ReportingModule.Models.Projection, SoftwareIDM.ReportingModule",
"Name": "Status",
"RelationName": "Action - Trigger",
"RelationSide": "Left",
"ValueRule": "CoerceString(Parent.Status)"
},
{
"$type": "SoftwareIDM.ReportingModule.Models.Projection, SoftwareIDM.ReportingModule",
"Name": "Simulated",
"RelationName": "Action - Trigger",
"RelationSide": "Left",
"ValueRule": "If(Parent.Simulated, \"Simulated\", \"Committed\")"
},
{
"$type": "SoftwareIDM.ReportingModule.Models.Projection, SoftwareIDM.ReportingModule",
"Name": "Time Stamp",
"RelationName": "Action - Trigger",
"RelationSide": "Left",
"ValueRule": "DateTimeFormat(Parent.TimeStamp, \"yyyy-MM-dd hh:mm\")"
},
{
"$type": "SoftwareIDM.ReportingModule.Models.Projection, SoftwareIDM.ReportingModule",
"Name": "Trigger",
"RelationName": "Action - Trigger",
"RelationSide": "Left",
"ValueRule": "TimeTraveler(Parent.TriggerId) + \"|\" + Parent.TriggerDN"
},
{
"$type": "SoftwareIDM.ReportingModule.Models.Projection, SoftwareIDM.ReportingModule",
"Name": "ID",
"RelationName": "Action - Trigger",
"RelationSide": "Right",
"ValueRule": "FirstNotNull(\n CoerceString(Attributes.employeeID),\n CoerceString(Attributes.displayName),\n CoerceString(DN)\n)"
},
{
"$type": "SoftwareIDM.ReportingModule.Models.Projection, SoftwareIDM.ReportingModule",
"Name": "Attribute",
"RelationName": "Action - Trigger",
"RelationSide": "Left",
"ValueRule": "Child.Key"
},
{
"$type": "SoftwareIDM.ReportingModule.Models.Projection, SoftwareIDM.ReportingModule",
"Name": "From",
"RelationName": "Action - Trigger",
"RelationSide": "Left",
"ValueRule": "If(\n CoerceString(If(Parent.AttributeChanges, Child.Value.Original, \"N/A\")).Length > 250,\n Left(CoerceString(If(Parent.AttributeChanges, Child.Value.Original, \"N/A\")), 250) + \"...\",\n CoerceString(If(Parent.AttributeChanges, Child.Value.Original, \"N/A\"))\n)"
},
{
"$type": "SoftwareIDM.ReportingModule.Models.Projection, SoftwareIDM.ReportingModule",
"Name": "To",
"RelationName": "Action - Trigger",
"RelationSide": "Left",
"ValueRule": "If(\n CoerceString(If(Parent.AttributeChanges, Child.Value.Value, Child.Value)).Length > 250,\n Left(CoerceString(If(Parent.AttributeChanges, Child.Value.Value, Child.Value)), 250) + \"...\",\n CoerceString(If(Parent.AttributeChanges, Child.Value.Value, Child.Value))\n)"
},
{
"$type": "SoftwareIDM.ReportingModule.Models.Projection, SoftwareIDM.ReportingModule",
"Name": "WF Name",
"RelationName": "Action - Workflow",
"RelationSide": "Right",
"ValueRule": "CoerceString(Name)"
},
{
"$type": "SoftwareIDM.ReportingModule.Models.Projection, SoftwareIDM.ReportingModule",
"Name": "WF End",
"RelationName": "Action - Workflow",
"RelationSide": "Right",
"ValueRule": "DateTimeFormat(End, \"yyyy-MM-dd hh:mm\")"
},
{
"$type": "SoftwareIDM.ReportingModule.Models.Projection, SoftwareIDM.ReportingModule",
"Name": "WF Result",
"RelationName": "Action - Workflow",
"RelationSide": "Right",
"ValueRule": "CoerceString(Result)"
},
{
"$type": "SoftwareIDM.ReportingModule.Models.Projection, SoftwareIDM.ReportingModule",
"Name": "Step Actions",
"RelationName": "Action - Workflow",
"RelationSide": "Right",
"ValueRule": "Flatten(Map( Steps, Switch( TypeName(Data) == \"FixtureWorkflowStep\", $\"{TimeTraveler(Data.FixtureId)}|{Name}: {Result}\", TypeName(Data) == \"InlineFixtureWorkflowStep\", Map(Data.Results, $\"{TimeTraveler(Id)}|{Name}: {Result}\"), $\"{Name}: {Result}\" )))"
}
],
"Transformations": [
{
"$type": "SoftwareIDM.ReportingModule.Models.Transform, SoftwareIDM.ReportingModule",
"FilterRule": "If(Memo(\"Status\") == \"*\", true, Data.Status == Memo(\"Status\"))",
"GroupingRule": "",
"TransformRules": []
},
{
"$type": "SoftwareIDM.ReportingModule.Models.Transform, SoftwareIDM.ReportingModule",
"FilterRule": "If(Memo(\"Simulated\") == \"*\", true, Data.Simulated == Memo(\"Simulated\"))",
"GroupingRule": "",
"TransformRules": []
}
],
"Styles": [
{
"$type": "SoftwareIDM.ReportingModule.Models.RowStyle, SoftwareIDM.ReportingModule",
"Fields": [
"WF Result"
],
"ConditionRule": "And(WF Result != \"success\", WF Result != null)",
"Bold": false,
"Italic": false,
"Hide": false,
"TextColor": "",
"CellColor": "r"
},
{
"$type": "SoftwareIDM.ReportingModule.Models.RowStyle, SoftwareIDM.ReportingModule",
"Fields": [
"WF Result"
],
"ConditionRule": "WF Result == \"success\"",
"Bold": false,
"Italic": false,
"Hide": false,
"TextColor": "",
"CellColor": "g"
}
],
"Sort": {
"Field": "Time Stamp",
"Direction": "Ascending"
}
}
],
"Count": 1
}
Comments
0 comments
Please sign in to leave a comment.