Service Manager HTML5 Portal: Search Query!
One of the issues I have with the HTML5 portal is there isn’t a great way to do search with the query box. You can add a text box above the query box as required to do your searches, but the way it is laid out isn’t that great:
As you can see, it isn’t exactly user friendly! I decided I wanted to get rid of that additional text (Query Search) and change the Refresh button to Search if I’m doing a query search. I found it wasn’t that hard to do! If you read my last post (Larger Description Text Box) you’ll be a little familar with the concept of modifying the view based on the names of Request prompts. I decided to target this based on the name QuerySearch, since I doubt I’m going to be using that anywhere else.
First off, where should I place this in the else if loop in MakeForm.cshtml? I’ll want to put it right before the InstancePicker else if line. That will create a query, and I want mine to be created before the query is created.
Now that I know where I’ll put it, I want to start with the code! First off, I want to only run this if the name is QuerySearch, so I’ll use this line:
else if (item["Prompt"].ToString().Equals("QuerySearch"))
Then, I want it to create the query without the label. Here is the generic query code:
<div class="row query_picker_heading">
<span class="title" data-required="@item["Optional"].ToString()">@item["Prompt"].ToString()</span>
@if (item["Metadata"].ToString() != "")
{
<span class="depend_text">@Resources.SelfServicePortalResources.QueryPickerMeta @item["Metadata"].ToString()</span>
}
</div>
<button type="button" class="queryPickButton btn" data-idsource="@item["PathSend"].ToString()">@Resources.SelfServicePortalResources.Refresh</button>
<div class="error-text">@ErrorResults.Find(m => m.MemberNames.ElementAt(0).Equals(item["PathSend"].ToString()))</div>
<div class="queryResult" id="@item["PathSend"].ToString()" data-required="@item["Optional"].ToString()">
<table class="query_table cell-border">
<thead>
<tr>
<th></th>
@foreach (string column in item["DisplayColumns"] as List<string>)
{
<th>@column</th>
}
</tr>
</thead>
<tbody></tbody>
</table>
</div>
I notice the first <div is “query_picker_heading”, so I bet I just have to remove that to make it skip creating the header! I remove that and now have this code:
<button type="button" class="queryPickButton btn" data-idsource="@item["PathSend"].ToString()">@Resources.SelfServicePortalResources.Refresh</button>
<div class="error-text">@ErrorResults.Find(m => m.MemberNames.ElementAt(0).Equals(item["PathSend"].ToString()))</div>
<div class="queryResult" id="@item["PathSend"].ToString()" data-required="@item["Optional"].ToString()">
<table class="query_table cell-border">
<thead>
<tr>
<th></th>
@foreach (string column in item["DisplayColumns"] as List<string>)
{
<th>@column</th>
}
</tr>
</thead>
<tbody></tbody>
</table>
</div>
Lastly, I want the button to say Search instead of Refresh. I notice it sets Refresh with the code “@Resources.SelfServicePortalResources.Refresh” which points to the global resources in SelfServicePortal\App_GlobalResources. This means the language of the button wll change based on the language of the portal. If you check in the files, you’ll notice there is an option for “@Resources.SelfServicePortalResources.Search” so I’ll change that to search!
<button type="button" class="queryPickButton btn" data-idsource="@item["PathSend"].ToString()">@Resources.SelfServicePortalResources.Search</button>
<div class="error-text">@ErrorResults.Find(m => m.MemberNames.ElementAt(0).Equals(item["PathSend"].ToString()))</div>
<div class="queryResult" id="@item["PathSend"].ToString()" data-required="@item["Optional"].ToString()">
<table class="query_table cell-border">
<thead>
<tr>
<th></th>
@foreach (string column in item["DisplayColumns"] as List<string>)
{
<th>@column</th>
}
</tr>
</thead>
<tbody></tbody>
</table>
</div>
Now, let’s put this code in our MakeForm.cshtml file, right above the standard query picker and see if it works!
else if (item["Prompt"].ToString().Equals("QuerySearch"))
{
<button type="button" class="queryPickButton btn" data-idsource="@item["PathSend"].ToString()">@Resources.SelfServicePortalResources.Search</button>
<div class="error-text">@ErrorResults.Find(m => m.MemberNames.ElementAt(0).Equals(item["PathSend"].ToString()))</div>
<div class="queryResult" id="@item["PathSend"].ToString()" data-required="@item["Optional"].ToString()">
<table class="query_table cell-border">
<thead>
<tr>
<th></th>
@foreach (string column in item["DisplayColumns"] as List<string>)
{
<th>@column</th>
}
</tr>
</thead>
<tbody></tbody>
</table>
</div>
}
else if (item["Type"].ToString().Equals("InstancePicker"))
{
<div class="row query_picker_heading">
<span class="title" data-required="@item["Optional"].ToString()">@item["Prompt"].ToString()</span>
@if (item["Metadata"].ToString() != "")
{
<span class="depend_text">@Resources.SelfServicePortalResources.QueryPickerMeta @item["Metadata"].ToString()</span>
}
</div>
<button type="button" class="queryPickButton btn" data-idsource="@item["PathSend"].ToString()">@Resources.SelfServicePortalResources.Refresh</button>
<div class="error-text">@ErrorResults.Find(m => m.MemberNames.ElementAt(0).Equals(item["PathSend"].ToString()))</div>
<div class="queryResult" id="@item["PathSend"].ToString()" data-required="@item["Optional"].ToString()">
<table class="query_table cell-border">
<thead>
<tr>
<th></th>
@foreach (string column in item["DisplayColumns"] as List<string>)
{
<th>@column</th>
}
</tr>
</thead>
<tbody></tbody>
</table>
</div>
}
So, after making these changes I recycle the IIS pool and view the results!
Leave a Comment