Custom CSHTML Report Page Creation

Custom CSHTML Report Page Creation

Possible Custom Page Locations

Root\UI\Web Sites\EmpowerID.Web\EmpowerID.Web.PortableAreas.Common\Views\CustomViews\Authenticated

Root\UI\Web Sites\EmpowerID.Web\EmpowerID.Web.PortableAreas.Common\Views\Reports

Root\UI\Web Sites\EmpowerID.Web\EmpowerID.Web.PortableAreas.Common\Views\ObjectTypeSearch

 

Grids not inline on a page but loaded as partials should be created here

Root\UI\Web Sites\EmpowerID.Web\EmpowerID.Web.PortableAreas.Common\Views\ViewOne

and Loaded Like this as tabs

<div data-bind="eidTab: { Title: '@EidResx("ApprovalFlowPoliciesGrid", true)', Url: '@Url.Action("LoadPartial", "ViewOne", new { area = "Common", partial = "ApprovalFlowPoliciesGrid" } )' }"></div>

and loaded like this when used on ViewOne pages

@{ Html.RenderPartial("Accordion", new LocalizedDataModel() { Text = EidResx("RbacAssigneeAssignmentGridTargetassigneeGroup").ToString(), Value = Url.HashedAction("LoadPartial", "ViewOne", "Common", new { partial = "RbacAssigneeAssignmentGrid", TargetAssigneeID = Model.GetProperty("GroupGUID") }, removeArea: false) });                             }

 

Basic Page Skeleton

@{ Layout = "_Layout.cshtml"; ViewBag.UINounID = new Guid("ABB34C92-B418-4734-B5EE-F27D094008BF"); //ViewBag.SearchTitle = "Risk Management"; } @if (EidAuthenticationHandler.HasAccessToPage(new Guid("d0dd4ac2-e166-4d72-ba65-e841b2fd3319"))) { <div id="@ViewBag.UniqueID-tabstrip" data-bind="eidTabStrip: {}"> @if (EidAuthenticationHandler.HasAccessToPage(new Guid("db2c77de-600a-4ee8-9e3f-69f0381467bd"))) { <div data-bind="eidTab: { Title: '@EidResx("TabName", true)' }"></div> <div data-bind="eidTabPanel: {}"> <div data-bind='eidGrid: { IsImplicit: true, grid: { //Grid properties here } }'> //Columns here </div> } </div> } else { <div> <br> <br> <h1>@EidResx("AccessToPageDenied")</h1> </div> }

Header Section

@{ Layout = "_Layout.cshtml"; ViewBag.ShowActions = false; ViewBag.UINounID = new Guid("ABB34C92-B418-4734-B5EE-F27D094008BF"); var personGuid = EidContext.LoginPersonGuid == Guid.Empty ? EidContext.CurrentPersonGuid : EidContext.LoginPersonGuid; ViewBag.SearchTitle = "Risk Management"; }

Complex Header Example - Loading a Component to Retrieve a Property for Use as Parameter Value

@{ TheDotNetFactory.Framework.People.Components.Account acc = null; if(ViewBag.AzureApplicationID != null || ViewBag.AzureApplicationID != Guid.Empty) { acc = TheDotNetFactory.Framework.People.Components.Account.GetServicePrincipalByAzureApplicationID(Guid.Parse(ViewBag.AzureApplicationID.ToString())); ViewBag.AssigneeID = acc.AccountGUID; } }

Complex Header Example - isEditEnabled Property for Enabling Grid and URL for Create New

@{ var isEditEnabled = !(!EidContext.HasAccessToWorkflow("RemoveAzRbacAssignment") || ViewBag.DisableEdit != null); var addNewUrl = isEditEnabled ? "eid.url('#w/assignazlocalrightscope?ApplicationID=" + ViewBag.ApplicationID + "&AzAssigneeAssignmentTypeID=4&ResourceSystemModuleID=" + ViewBag.ResourceSystemModuleID + "' )" : "null"; }

 

Load Tooltips Templates (Optional)

@{ Html.RenderAction("ResourceAttestationTooltips", "Templates"); }

Typical Breadcrumb

<div class="eid-breadcrumbs-container"> <a href="@Url.GetHomePageHashed()" class="eid-breadcrumbs">@EidResx("Home") ></a> <a href="#Common/Find/azureidentitymanager" class="eid-breadcrumbs">@EidResx("Azure Identities")</a> </div>

Basic Search Template - One Defined Per Grid on Page or in CSHTML if Grid is not inline

        @Html.StartTemplate("EidBusinessRequestTypesWebSearch")         <div class="eid-search ui-widget ui-widget-content eid-content eid-last ui-helper-clearfix"              data-bind="eidForm: {}, focusFirstInput: true">             <div class="eid-form-field fourcol">                 <label>                     <span>@EidResx("SearchTerms"):</span>                     <input type="text" data-bind="value: condition('SearchTerms')" />                 </label>             </div>             <div class="row">                 <button data-bind="jqButton: { disabled: $parent.DataSource.IsRefreshing }" class="eid-grid-search-button" type="submit">@Html.EidResx("EmpowerIDApplicationCommonWords_Search")</button>             </div>         </div>         @Html.EndTemplate()

Property on Grid Object that Specifies its Search Template

SearcherTemplateName: "EidAzureAccountWebSearch",

Wrap Tabs in HasAccess Checks

@if (EidAuthenticationHandler.HasAccessToPage(new Guid("4f919b9f-d592-493f-82c4-ae16cdd8a2a0"))) { <div data-bind="eidTab: { Title: '@EidResx("AzLocalRiskRulesGrid", true)', Url: '@Url.Action("AzLocalRiskRulesGrid", "ViewOne", new { area = "Common" })' }"></div> }

Grids Can Be Inline in the Page or Loaded from another CSHTML - Example Loading from a File

<div data-bind="eidTab: { Title: '@EidResx("ApprovalFlowPoliciesGrid", true)', Url: '@Url.Action("LoadPartial", "ViewOne", new { area = "Common", partial = "ApprovalFlowPoliciesGrid" } )' }"></div>

Example of Adding a Location Tree to a Grid (Add after last grid column)

<div data-bind='eidGridPanel: { Type: "Left", Title: "@EidResx("Locations", EscapeMode.HtmlAttribute)", CloseOnTarget: ".eid-tree-node-link" }'> <div data-bind='eidStandaloneTree: { url: eid.url.api.services("Tree/GetOrgZones?hideITNodes=false&parentID=200"), useGuid: false, Mode: "Slim", value: DataSource.parameter("OrgZoneID"), AutoLoad: true }'></div> </div>

Example of an Action Panel for Grid (Add after Location Tree Panel or last grid column)

<div data-bind='eidGridPanel: { Type: "Left", Title: "@EidResx("Locations", EscapeMode.HtmlAttribute)", CloseOnTarget: ".eid-tree-node-link" }'> <div data-bind='eidStandaloneTree: { url: eid.url.api.services("Tree/GetOrgZones?hideITNodes=false&parentID=200"), useGuid: false, Mode: "Slim", value: DataSource.parameter("OrgZoneID"), AutoLoad: true }'></div> </div> <div data-bind='eidGridPanel: { Type: "Right", Title: "@EidResx("Actions", EscapeMode.HtmlAttribute)" }'> <!-- ko 'if': SelectedRow() --> <div class="eid-grid-selected-bar"></div> <div class="eid-grid-selected"> <div class="eid-panel-area" data-bind="'with': SelectedRow().DataItem"> <h4 class="eid-panel-area-title"> <span>@EidResx("ActionsFor") </span> <a class="eid-text-link" data-bind='text: FriendlyName(), attr: { "href": "@Url.HashedContent("Common/ViewOne/Component?id=")" + AccountID() + "&componentName=Account", "title": FriendlyName }'></a> </h4> <div class="eid-panel-area-body"> <div data-bind='eidDataSource: { autoRefresh: true, dataSource: { Url: "@Url.AreaAction("ActionsByResourceIDNounModels", "NounVerbAction", "Common")", Parameters: { resourceId: ResourceID, noun : "AzureUser" } } }'> <ul class="eid-link-list"> <!-- ko foreach: DataView --> <li> <a class="eid-link-inverted" data-bind='text: FriendlyName, attr: { "title": Description, "href": Href }'></a> </li> <!-- /ko --> </ul> </div> </div> </div> </div> <!-- /ko --> <div class="eid-panel-area"> <h4 class="eid-panel-area-title"> @EidResx("GeneralActions") </h4> <div class="eid-panel-area-body"> <div data-bind='eidDataSource: { autoRefresh: true, dataSource: { Url: "@Url.AreaAction("ActionsByNoun", "NounVerbAction", "Common", new { noun = "AzureUser" })" } }'> <ul class="eid-link-list"> <!-- ko foreach: DataView --> <li> <a data-bind='text: FriendlyName, attr: { "title": Description, "href": Href }'></a> </li> <!-- /ko --> </ul> </div> </div> </div> </div> </div>

 

Grid Columns and Formatters

Example Link to Viewone Page by GUID

@{ Html.RenderPartial("HyperLinkColumn", new TheDotNetFactory.EmpowerID.Web.PortableAreas.Common.Models.Shared.HyperLinkColumnModel() { Title = EidResx("Owner").ToString(), DataFieldName = "OwnerFriendlyName", AccessGuid = Guid.Parse("1998dc9b-d8df-421b-a9ce-31f029cf0893"), UrlFormat = Url.HashedContent("Common/ViewOne/ComponentByGuid?id={PersonID}", removeArea: false) });}

Example Link to Viewone Page by ID (Int)

@{ Html.RenderPartial("HyperLinkColumn", new TheDotNetFactory.EmpowerID.Web.PortableAreas.Common.Models.Shared.HyperLinkColumnModel() { Title = EidResx("EmpowerIDComponentProperties_PersonView.Login").ToString(), DataFieldName = "EmpowerIDLogon", AccessGuid = Guid.Parse("1998dc9b-d8df-421b-a9ce-31f029cf0893"), UrlFormat = Url.HashedContent("Common/ViewOne/Component?id={PersonID}&componentName=Person", removeArea: false) });}

Examples of Grid Column Templates

@Html.StartTemplate("EidGridColumnAZIChangeTypeTemplate") <span data-bind="attr: { title: (!ToolTip()).toString() }, css: { 'eid-grid-decisions-approved' : !ParentRow.DataItem.Disabled(), 'eid-grid-decisions-rejected' : ParentRow.DataItem.Disabled() }"></span> @Html.EndTemplate() <div data-bind='eidGridColumn: { Title: "@EidResx("Type", EscapeMode.HtmlAttribute)", DataFieldName: "AccountTypeName", FormatType: "Custom" }'> <div data-bind="attr: { title: DataItem.AccountTypeName() }, css: { 'eid-icon-person-small': DataItem.AccountTypeName() == 'User', 'eid-icon-management-small': DataItem.AccountTypeName() == 'Person', 'eid-icon-shared-credentials-small': DataItem.AccountTypeName() == 'ServicePrincipal', 'eid-icon-groups-small': DataItem.AccountTypeName() == 'ManagedIdentity' }"> </div> </div>

Example of Usage of a Grid Column Template

<div data-bind='eidGridColumn: { Title: "@EidResx("Enabled", EscapeMode.HtmlAttribute)", DataFieldName: "Disabled", TemplateName: "EidGridColumnAZIChangeTypeTemplate" }'></div>

Grid Column Formatter: DateTime

            <div data-bind='eidGridColumn:  { Title: "@EidResx("ProcessTime", EscapeMode.HtmlAttribute)", DataFieldName: "ProcessTime", FormatType: "DateTime" }'></div>             <div data-bind='eidGridColumn:  { Title: "@EidResx("LockedByServer", EscapeMode.HtmlAttribute)", DataFieldName: "LockedByServer", FormatType: "String" }'></div>

Grid Column Formatter: Force to String

<div data-bind='eidGridColumn:  { Title: "@EidResx("LockedByServer", EscapeMode.HtmlAttribute)", DataFieldName: "LockedByServer", FormatType: "String" }'></div>

Grid Column Formatter: CheckBox

<div data-bind='eidGridColumn: { Title: "@EidResx("Team", EscapeMode.HtmlAttribute)", DataFieldName: "IsTeamsGroup", FormatType: "CheckBox" }'></div>

Example of a Non-Sortable Column with a Template

<div data-bind='eidGridColumn: { Title: "@EidResx("EmpowerIDGridTypeColumns_GroupAccountHistory.GroupAccountHistoryChangeTypeName", true)", DataFieldName: "GroupAccountHistoryChangeTypeName", EnableSorting: false, TemplateName: "EidGridColumnGroupChangeTypeTemplate" }'></div>

Example of a Grid Column that Links to MyTasks

Add this to the header section

@{ var myTasksMicroserviceURL = Config<string>("MyTasksMicroserviceURL"); Uri myTasksUri = new Uri(myTasksMicroserviceURL); }

Example Grid Column with link to MyTasks Item

<div data-bind='eidGridColumn: { Title: "@EidResx("ViewBusinessRequestItem", true)", DataFieldName: "FriendlyName", FormatType: "HyperLink", DataBag: { UrlFormat: "@((new Uri(myTasksUri, "/all/businessRequestItems?id={BusinessRequestItemID}")).ToString())" } }'></div>

Example Grid Link to Old Workflow Tasks View One Page

<div data-bind='eidGridColumn: { Title: "@EidResxAttr("BusinessProcessTaskID")", DataFieldName: "BusinessProcessTaskID", FormatType: "Custom" }'> <!-- ko 'with': DataItem --> <a data-bind="text: BusinessProcessTaskID(), attr: { href: eid.url('#Common/ViewOneTask/?id=' + BusinessProcessTaskID()) }"></a> <!-- /ko --> </div>

Example Grid Column Formatter Changing a Number to a Text Value

<div data-bind='eidGridColumn: { Title: "@EidResx("ProcessStatus", EscapeMode.HtmlAttribute)", DataFieldName: "ProcessStatus", FormatType: "Custom"}'> <!-- ko 'with': DataItem --> <!-- ko 'if': ProcessStatus() == 0 --> <span data-bind='text:"@EidResx("Not Processed", EscapeMode.HtmlAttribute)"'></span> <!-- /ko --> <!-- ko 'if': ProcessStatus() == 1 --> <span data-bind='text:"@EidResx("In Progress", EscapeMode.HtmlAttribute)"'></span> <!-- /ko --> <!-- ko 'if': ProcessStatus() == 2 --> <span data-bind='text:"@EidResx("Processed", EscapeMode.HtmlAttribute)"'></span> <!-- /ko --> <!-- ko 'if': ProcessStatus() == 3 --> <span data-bind='text:"@EidResx("Error", EscapeMode.HtmlAttribute)"'></span> <!-- /ko --> <!-- ko 'if': ProcessStatus() == 4 --> <span data-bind='text:"@EidResx("Ignored", EscapeMode.HtmlAttribute)"'></span> <!-- /ko --> <!-- ko 'if': ProcessStatus() == 5 --> <span data-bind='text:"@EidResx("Pending Reprocessing", EscapeMode.HtmlAttribute)"'></span> <!-- /ko --> <!-- /ko --> </div>

 

Advanced Search Templates

Typically styled using fourcol, fourcol, fourcol last

On the Grid itself, specify only SearchTerms for simple search if the view has SearchTerms on it

SearcherTemplateName: "EidAzureAccountWebSearch", SearcherMode: "Advanced", Searcher: {         SimpleOptions: [         { DataFieldName: "SearchTerms" }         ],         EnableSimpleMode: true },

Example of Advanced Search on a text field that is not a parameter

<div class="eid-form-field fourcol">         <label>             <span>@Html.EidResx("EmpowerIDLogin"):</span>             <input type="text" data-bind="value: condition('EmpowerIDLogon')" />          </label> </div>

Example of Advanced Search on a Boolean field that is not a parameter

<div class="eid-form-field fourcol"> <label> <span>@Html.EidResx("Disabled"):</span> <input type="checkbox" data-bind="eidCheckBox: { checked: condition('Disabled', null, null, 'Boolean'), enableTriState: true }" /> </label> </div>

Example of Advanced Search on a Boolean field that is a parameter

<div class="eid-form-field fourcol">         <label>               <span>@Html.EidResx("NeverLoggedInOnly"):</span>               <input type="checkbox" data-bind="eidCheckBox: { checked: parameter('NeverLoggedInOnly', null, null, 'Boolean'), enableTriState: true }" />         </label> </div>

Example Date Range Search on a Single Column that is not a Parameter

<div class="eid-form-field fourcol">             <label class="ui-display-inline">                 <span>@EidResx("LastLogonTimeBetween")</span>                 <input type="date" data-bind="date: {                         value: condition('LastLogonTime', null, 'GreaterThan', 'DateTime'),                         viewModelFormat: 'toUTCZeroTimeString'                      }" />             </label> </div> <div class="eid-form-field fourcol last">             <label class="ui-display-inline">                 <span>@EidResx("LastLogonTimeand")</span>                 <input type="date" data-bind="date: {                         value: condition('LastLogonTime', null, 'LessThan', 'DateTime'),                         viewModelFormat: 'toUTCMidnightTimeString'                      }" />             </label> </div>

Example Date Range Search with Calculated Default Values

<div class="sixcol">             <div class="eid-form-field">                 <label class="ui-display-inline">                     <span>Between</span>                     <input type="date" data-bind="date: {                         value: parameter('StartDate', Date.now().subtractDays(7).toUTCZeroTimeString()),                         viewModelFormat: 'toUTCZeroTimeString'                         }" />                 </label>             </div> </div> <div class="sixcol last">             <div class="eid-form-field">                 <label class="ui-display-inline">                     <span>and</span>                     <input type="date" data-bind="date: {                         value: parameter('EndDate', Date.now().toUTCMidnightTimeString()),                         viewModelFormat: 'toUTCMidnightTimeString'                         }" />                 </label>             </div> </div>

Autocomplete Search for Person Sending PersonGUID as a Parameter Value to Method

<div class="eid-form-field fourcol">             <label>                 @EidResx("ByMember", true)             </label> <div class="eid-person-autocomplete" data-bind="eidAutocomplete: {                 value: parameter('PersonID'),                 ItemTemplateName: 'EidAutoCompletePerson',                 DataSource: { TypeName: 'PersonSearch', MethodName: 'GetSearch', parameters: { textToSearch: null } },                 valueField: 'PersonGUID',                 displayField: 'FriendlyName',                 otherFields: ['Login', 'PersonID'],                 TypeName: 'Person',                 InitialLoadType: 'Person',                 searchParameterName: 'textToSearch' }">             </div> </div>

More Up to Date threecol Style Example Person Autocomplete with PersonGUID as a Parameter

<div class="eid-form-field threecol">                     <label>                         @Html.EidResx("InitiatorOrTargetPersonID")                     </label>                     <div data-bind="eidAutocomplete: { value: parameter('InitiatorOrTargetPersonID'),                     componentName: 'PersonSearch',                     methodName: 'GetSearch', displayField: 'FriendlyName', otherFields: ['PersonID','FriendlyName','PersonStoreFriendlyName','NetBiosName','LogonName','Login'],                     initialValueDataSource: { componentName: 'PersonView', methodName: 'GetByPersonGUID', parameters: {personGuid: null }, displayField: 'FriendlyName' },                     ItemHref: 'Common/ViewOne/ComponentByGuid?id={1}&componentName={0}',                     TypeName: 'Person',                     valueField: 'PersonGUID',                     ItemTemplateName: 'EidAutoCompletePerson',                     initialLoadType: 'Person' }">                     </div> </div>

AccountStoreGUID AutoComplete as a Parameter Example

<div class="eid-form-field threecol">                     <label>                         @Html.EidResx("AccountStore")                     </label>                     <div data-bind="eidAutocomplete: { value: parameter('AccountStoreID'),                     componentName: 'AccountStoreSearch',                     methodName: 'GetSearch', displayField: 'FriendlyName', otherFields: ['AccountStoreID','FriendlyName','AccountStoreStoreFriendlyName','NetBiosName','LogonName','Login', 'SecurityBoundaryTypeName','FQN','Name'],                     initialValueDataSource: { componentName: 'AccountStore', methodName: 'GetByAccountStoreGUID', parameters: {AccountStoreGuid: null }, displayField: 'FriendlyName' },                     ItemHref: 'Common/ViewOne/ComponentByGuid?id={1}&componentName={0}',                     TypeName: 'AccountStore',                     valueField: 'AccountStoreGUID',                     ItemTemplateName: 'EidAutoCompleteAccountStore',                     initialLoadType: 'AccountStore' }">                     </div> </div>

Example Searching by an Enum Where the Component Doesn’t Have a View (Getall)

<div class="eid-form-field fourcol">         <label>             <span>@Html.EidResx("ManagementRoleTypeFriendlyName"):</span>             <select data-bind='eidCombobox: { EnableClear: true, Value: condition("ManagementRoleTypeID", null, null, "Int"), TextField: "FriendlyName", ValueField: "ManagementRoleTypeID",                         DataSource: { SortByName: "FriendlyName", TypeName: "ManagementRoleType", DoesSupportSearch: false, DoesSupportPaging: false,                          MethodName: "GetAll" } }'>             </select>         </label> </div>

Non-Localized Example of Searching by location Tree as a Method Parameter

<div class="eid-form-field fourcol last">         <label>             Location (In or Below)         </label>     <div data-bind="eidPopupTree: { ShowInline: true, TreeType: 'OrgZone', nullValue: 0, value: parameter('OrgZoneID', 0), DataBag: { SearchServerSide: true, EnableSearch: true, url: eid.url.api.services('Tree/GetOrgZones?hideITNodes=false&parentID=0') } }"></div>     </div>

Another Location Tree Example

<div class="eid-form-field fourcol">         <label>             <span>@Html.EidResx("OrgZone"):</span>             <div data-bind="eidPopupTree: { ShowInline: true, TreeType: 'OrgZone', nullValue: 0, value: parameter('OrgZoneID', null, null, 'Int'), DataBag: { SearchServerSide: true, EnableSearch: true, url: eid.url.api.services('Tree/GetOrgZones?hideITNodes=false&parentID=0') } }"></div>         </label> </div>

Example of Searching by OrgRole Tree as a Method Parameter

<div class="eid-form-field fourcol"> <label> @EidResx("Parent") @EidResx("Role") </label> <div data-bind="eidPopupTree: { ShowInline: true, TreeType: 'OrgRole', nullValue: 0, value: parameter('OrgRoleID', 0), DataBag: { SearchServerSide: true, EnableSearch: true } }"></div> </div>

Example Searching by Business Role and Location (OROZ)

    <div class="eid-form-field fourcol">         <label>             @EidResx("BusinessRoleAndLocationInOrBelow")         </label>         <div data-bind="eidPopupDualTree: { ShowInline: true, value: parameter('orgRoleOrgZoneID', 0), nullValue: 0 }"></div>     </div>

Example: Hard Coding a Default Value for a Search Field

<div class="eid-form-field fourcol">         <label>             <span>@Html.EidResx("MinimumPercentageOfPeopleInOROZ"):</span>             <input type="text" data-bind="value: parameter('MinimumPercentageOfPeopleInOROZ', 40)" />         </label> </div>

Example: Loading a Default Search Field Value from a Resource System Config Setting

Add this line to the header code section to retrieve the value and does some parsing in this example

var joinFilter = Config<string>("AccountInboxJoinFilter").Replace("\n", "").Replace("\r", "");

Example Usage of the Advanced Search Field

<div class="eid-form-field fourcol">         <label>             <span>@Html.EidResx("AccountInboxJoinFilter"):</span>             <textarea data-bind="value: parameter('JoinFilter', '@joinFilter')" />         </label> </div>

Example AutoComplete Where Method Has Large # of Parameters

        <div class="eid-form-field fourcol">         <label>             <span>@EidResx("AzGlobalRight")</span>         </label>         <div data-bind="eidAutocomplete: { value: parameter('AzGlobalRightID', '@ViewBag.AzGlobalRightID', null, 'Guid'),                                    componentName: 'AzGlobalRightView',                                    methodName: 'GetAllSearch', displayField: 'FriendlyName', otherFields: ['AzGlobalRightID','FriendlyName'],                                    parameters: {                                     ResourceSystemTypeModuleID: null,                                     ResourceSystemTypeID: null,                                     AzRightTypeID: null,                                     OrgZoneID: null,                                     ResourceTypeOperationID: null,                                     AzGlobalRoleID: null,                                     AzLocalRoleID: null,                                     Denied: null,                                     AzGlobalFunctionID: null,                                     AzLocalFunctionID: null,                                     AssigneeID: null,                                     columnsToSearch: 'SearchTerms',                                     textToSearch: null                                             },                                             valueField: 'AzGlobalRightID',                                             ItemHref: 'Common/ViewOne/ComponentByGuid?id={1}&componentName={0}',                                             initialValueDataSource: { componentName: 'AzGlobalRightView', methodName: 'GetByAzGlobalRightID', parameters: {AzGlobalRightID: null }, displayField: 'FriendlyName' },                                             initialLoadType: 'AzGlobalRight',                                             TypeName: 'AzGlobalRight' }">         </div>     </div>

ResourceSystem AutoComplete with Default Value Set to 1 = EmpowerID

    <div class="eid-form-field fourcol last">         <div data-bind="eidAutocomplete: { labelText: '@EidResx("System", true)',              value: parameter('ResourceSystemID', 1, null, 'Int'), componentName: 'ResourceSystemView',                     initialLoadType: 'ResourceSystem',             TypeName: 'ResourceSystem',                     methodName: 'GetAllSearch',              parameters: { columnsToSearch: null },                     displayField: 'FriendlyName',                     valueField: 'ResourceSystemID',                     searchParameterName: 'textToSearch',                      }"></div>     </div>

Auto-Complete Example Where it Looks Like the Default Value is Being Passed into the Page (i.e. ViewBag)

<div class="eid-form-field fourcol last">             <label>                 <span>@EidResx("Risk"):</span>             </label> <div data-bind="eidAutocomplete: { value: parameter('AzLocalRiskID', '@ViewBag.AzLocalRiskID', null, 'Guid'),                                             componentName: 'AzLocalRiskView',                                             methodName: 'GetAllSearch', displayField: 'FriendlyName', otherFields: ['AzLocalRiskID','FriendlyName'],                                             parameters: {                                             AzGlobalRiskID: null,                                             AzRiskLevelID: null,                                             AzLocalRiskTypeID: null,                                             OrgZoneID: null,                                             OwnerID: null,                                             columnsToSearch: null                                     },                                             valueField: 'AzLocalRiskID',                                             ItemHref: 'Common/ViewOne/ComponentByGuid?id={1}&componentName={0}',                                             initialValueDataSource: { componentName: 'AzLocalRiskView', methodName: 'GetByAzLocalRiskID', parameters: {AzLocalRiskID: null }, displayField: 'FriendlyName' },                                             initialLoadType: 'AzLocalRisk',                                             TypeName: 'AzLocalRisk' }">             </div> </div>

Grids

Searcher Section Properties

                DoesSupportSearch: true,                 SearcherTemplateName: "EidSoDViolationWebSearch1-@searchTemplateGuid",                 EnableGroupBy: false,                 SearcherMode: "Advanced",                 Searcher: {                     SimpleOptions: [                         { DataFieldName: "Name", BooleanLogicType: "OR" },                         { DataFieldName: "Login", BooleanLogicType: "OR" },                         { DataFieldName: "ViolatorPersonFriendlyName", BooleanLogicType: "OR" },                         { DataFieldName: "ViolatorPersonManagerFriendlyName", BooleanLogicType: "OR" },                         { DataFieldName: "Description" }                     ],                     EnableSimpleMode: true,                     SortByField: "CreatedDate",                     SortByOrder: "Desc"                 },

DataSource Section

Example method with lots of parameters and the values can be passed into the page using the ViewBag

DataSource: {                     TypeName: "AzLocalRiskViolationView",                     MethodName: "GetAllSearch",                     Parameters: {                         AzLocalRiskRuleID: '@ViewBag.AzLocalRiskRuleID',                         AzLocalRiskID: '@ViewBag.AzLocalRiskID',                         AzGlobalRiskID: '@ViewBag.AzGlobalRiskID',                         ViolatorPersonID: '@ViewBag.ViolatorPersonID',                         ViolatorOrgZoneID: '@ViewBag.ViolatorOrgZoneID',                         AnyFunctionAssigneeID: '@ViewBag.AnyFunctionAssigneeID',                         RiskFunctionAssigneeID: '@ViewBag.RiskFunctionAssigneeID',                         RiskSegregatedFunctionAssigneeID : '@ViewBag.RiskSegregatedFunctionAssigneeID',                         AnyFunctionAssigneeID : '@ViewBag.AnyFunctionAssigneeID',                         MitigatorPersonID: '@ViewBag.MitigatorPersonID',                         MitigationExpiringInXDays: '@ViewBag.MitigationExpiringInXDays',                         LocalRiskOwner: '@ViewBag.LocalRiskOwner',                         MitigationUnreviewed: '@ViewBag.MitigationUnreviewed',                         HideViolationCombinations: '@ViewBag.HideViolationCombinations'                     },                     IncludedProperties: ["PersonID", "Login","ViolatorPersonDepartment", "ViolatorPersonTitle", "ViolatorPersonManagerFriendlyName","ViolatorPersonManagerEmail", "Name", "AzLocalRiskMitigationStatusID", "Email", "AzLocalRiskMitigationStatusFriendlyName", "LastMitigationStatusReview", "AzLocalRiskViolationID", "AzLocalRiskRuleName", "AzLocalRiskRuleID", "ApplicationID", "FriendlyName", "Name",                         "Description", "ModifiedDate", "CreatedDate", "AzLocalRiskName", "ProtectedApplicationResourceID", "Expired", "HighestExpirationDate",                         "AzLocalRiskFriendlyName", "AzRiskTypeFriendlyName", "MitigationOwnerAssigneeFriendlyName", "AzLocalRiskMitigationStatusFriendlyName", "AzLocalRiskViolatorMitigationID",                         "RiskFunctionAssigneeFriendlyName", "RiskSegregatedFunctionAssigneeFriendlyName", "RiskType",                         "AzLocalRiskMitigationStatusFriendlyName", "MitigationOwnerAssigneeFriendlyName", "AzLocalRiskID"                     ],                     DoesSupportSearch: true }

Report Options Settings

ReportOptions: { Columns: [{ DataFieldName: "Login", Title: "Login Name"}, { DataFieldName: "Email", Title: "Email" }], ReportTitle: "@EidResx("LastLoginTitle")", ReportDescription: "@EidResx("LastLoginDescription")", ReportLocation: "#Common/Find/azurelicensemanager" },

Creating Custom Pages Using the WF Studio Page Designer

See the following topic:

Create a simple page with advanced search

URL for Page Designer Pages - https://yourserver/UI/#common/pages/view/RBACViewID