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
{ "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, Data), 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.