";
$.templates({ "tmplTable": templ });
ntable.append($.render.tmplTable(model.result_set));
$(model.element).append(ntable);
}
Passing and Retrieving Items to Modal Pop-up
The model allows passing the item to another page and show it in a modal pop-up
window. When accessing value on the page and passing value back from the page:
var getpassedargs;
var etagvalue = 0;
var itemid = 0;
$(function () {
getpassedargs = window.frameElement.dialogArgs;
if (getpassedargs.command == 'add') {
$('#cmdedit').attr('disabled', true);
$('#cmdedit').removeClass('popup-edit').addClass('popupedit-nohover');
}
else {
if (getpassedargs.command == 'edit') {
$('#cmdedit').attr('disabled', true);
$('#cmdedit').removeClass('popupedit').addClass('popup-edit-nohover');
}
else{
$('.unlock').attr('disabled', true);
}
var setobj = getpassedargs.sendobjinfo;
etagvalue = setobj[0].__metadata.etag;
itemid = setobj[0].Id;
$('#textboxtitle').val(setobj[0].Title);
}
$('#cmdedit').click(function () {
$('#cmdedit').attr('disabled', true);
$('#cmdedit').removeClass('popup-edit').addClass('popupedit-nohover');
$('.unlock').removeAttr('disabled');
});
document.onsubmit = function () {
var result = SP.UI.DialogResult.OK;
var value = {
Id: itemid,
Title: 'Title',
etag: etagvalue
};
SP.UI.ModalDialog.commonModalDialogClose(result, value)
};
$('#cmdcancel').click(function () {
var result = SP.UI.DialogResult.cancel;
var value = '';
SP.UI.ModalDialog.commonModalDialogClose(result, value)
});
});
Paging the Model
function pagebackGrid(model) {
var pcurrent = $(model.pageelement.substring(0,
model.pageelement.length - 1)).text();
var pmax = $(model.pageelement).text();
pcurrent--;
$(model.pageelement.substring(0, model.pageelement.length 1)).text(pcurrent);
model.settopandskip(pcurrent);
model.load();
if (pcurrent == 1) {
$(model.pageelement.substring(0,
model.pageelement.length - 1) + 'b').hide();
$(model.pageelement.substring(0,
model.pageelement.length - 1) + 'f').show();
}
else {
$(model.pageelement.substring(0,
model.pageelement.length - 1) + 'b').show();
$(model.pageelement.substring(0,
model.pageelement.length - 1) + 'f').show();
}
}
function refreshModel(model) {
model.resettopandskip();
model.load();
$(model.pageelement.substring(0, model.pageelement.length 1)).text('1');
$(model.pageelement.substring(0, model.pageelement.length 1) + 'b').hide();
}
function pageupGrid(model) {
var pcurrent = $(model.pageelement.substring(0,
model.pageelement.length - 1)).text();
var pmax = $(model.pageelement).text();
pcurrent++;
$(model.pageelement.substring(0, model.pageelement.length 1)).text(pcurrent);
model.settopandskip(pcurrent);
model.load();
if (pcurrent == pmax) {
$(model.pageelement.substring(0,
model.pageelement.length - 1) + 'f').hide();
$(model.pageelement.substring(0,
model.pageelement.length - 1) + 'b').show();
}
else {
$(model.pageelement.substring(0,
model.pageelement.length - 1) + 'b').show();
$(model.pageelement.substring(0,
model.pageelement.length - 1) + 'f').show();
}
}
Sorting the Model
function sortResults(pcolumn) {
if (sortUp) {
temp_list.setorderby(pcolumn);
sortUp = false;
}
else {
temp_list.setorderby(pcolumn + ' desc');
sortUp = true;
}
temp_list.load();
}
See Also
How to: Complete basic operations using JavaScript library code in SharePoint
2013
Use OData query operations in SharePoint REST requests
Publish apps for SharePoint
Boris Moore - JSRender (GitHub)
SSRS: How to Add JPEG and PNG Report
Export when SSRS 2012 is integrated with
SharePoint 2013
Introduction
Users like to embed report charts in PowerPoint by including an image snapshot of the
chart with the correct parameters specified.
SQL Server Reporting Services (SSRS) does not include export to JPEG or PNG in the
SharePoint report viewer web part by default, even though SSRS supports report
rendering in these formats. For standalone SSRS servers you can enable this capability
by editing the RSReportServer.config file (http://technet.microsoft.com/enus/library/ms157273.aspx#bkmk_rendering ), but this does not work for SSRS
integrated with SharePoint.
Using the following PowerShell, you can successfully add the extensions.
Workaround
1. Get your application ID (GUID):
Get-SPRSServiceApplication
2. Add the extensions:
New-SPRSExtension -identity "{INSERT YOUR APPLICATION ID HERE}" ExtensionType "Render" -name "JPEG" -TypeName
"Microsoft.ReportingServices.Rendering.ImageRenderer.ImageRenderer,Mic
rosoft.ReportingServices.ImageRendering" -ServerDirectives
"JPEG" -ExtensionConfiguration
"JPEG"
New-SPRSExtension -identity "{INSERT YOUR APPLICATION ID HERE}" ExtensionType "Render" -name "PNG" -TypeName
"Microsoft.ReportingServices.Rendering.ImageRenderer.ImageRenderer,Mic
rosoft.ReportingServices.ImageRendering" -ServerDirectives
"PNG" -ExtensionConfiguration
"PNG"
3. You can list the loaded Render extensions:
Get-SPRSExtension -Identity "{INSERT YOUR APPLICATION ID HERE}" ExtensionType "Render"
4: If you make a mistake you can remove them with:
Remove-SPRSExtension -Identity "{INSERT YOUR APPLICATION ID HERE}" ExtensionType "Render" -Name PNG
See Also
RSReportServer Configuration File
Report Viewer Web Part (Reporting Services in SharePoint Integrated Mode)
References
Originally posted to the TechNet Forum
here: http://social.technet.microsoft.com/Forums/sqlserver/en-US/1920bbad5201-4dfa-9aeb-fbd4baf26b7c/how-to-add-jpeg-and-png-report-export-whenssrs-2012-is-integrated-with-sp-2013
SharePoint 2013: Save Publishing Site as
Template
Save Site as a Template
1. Open the site in SharePoint Designer 2013.
2. From the tool bar click on Site Options.
3. Select SaveSiteAsTemplateEnabled, click Modify and set value to true if it is false.
Click OK, Click OK.
4. Click Administration Web Page from tool bar.
5. On the site settings page, click Master Page from Look and Feel Section.
6. Expand Alternate CSS URL section, select Use default styles and any CSS files
associated with your Master Page,click OK. This will change look and feel of the
site. Look and Feel will be reset after creating template.
7. From SharePoint Designer 2013 tool bar click Save as Template.
8. Enter File Name, Template Name, Template Description, select Include Content
(Include Content MUST be selected else site created from this template will not
have any page created.)
9. Click OK.
10. Once the site template is created, from SharePoint Designer 2013 tool bar, click
Administration Web Page.
11. On the site settings page, click Master Page from Look and Feel Section.
12. Expand Alternate CSS URL section, select Inherit Alternate CSS URL from parent of
this site, click OK. This action will reset Look and Feel of the site.
Note: Creating Site from Saved Template
After creating new site with this template, on new site look and feel should be changed to
get NMIT Navigation. Follow these steps to reset look and feel.
1. On new site click, Site Settings from Gear menu.
2. Click Master Page from Look and Feel section.
3. Expand Alternate CSS URL section, select Inherit Alternate CSS URL from parent of
this site, click OK.
4. Click Manage Site Features from Site Actions section on Site Settings page.
5. Deactivate SharePoint Server Publishing feature and activate again.
SharePoint 2013: Move the Trace, Usage
and IIS Logs to a Log Farm
By default, SharePoint 2013 writes logs to the same drive and partition on which it was
installed. Because diagnostic logging can use a large amount of drive space and
compromise drive performance, you should configure SharePoint 2013 to write to
another drive on which SharePoint 2013 is not installed. You should also consider the
connection speed to the drive on which SharePoint 2013 writes the logs. If verbose-level
logging is configured, the server records a large amount of data. Therefore, a slow
connection might result in poor log performance.http://technet.microsoft.com/enus/library/ee748656(v=office.15).aspx
Why should you move the SharePoint Logs or IIS Logs from their default directory?
You’ll definitely win space on the root drive (80GB is sometimes not enough).
You can’t read any local log file if your Web Front End or Application Server is down
due to Network related issues, due to Windows Server related issues, …
…
Why this blog post? I recently saw something that I never saw in my life. A customer
created a dedicated Log Farm. The customer was legally forced to keep their log files at
least for 7 years. So they decided to create a single point of server for all SharePoint and
IIS Related logs.
How did they proceed? For each SharePoint Environment, a Shared SharePoint folder
was created on a Dedicated Server where logs where available.
SharePoint Logs
SharePoint has 2 different logs. The Trace and Usage Logs. To move the Trace Logs
Under Central Administration navigate to Monitoring and select Configure diagnostic
logging (/_admin/metrics.aspx).
In the Trace Log section, in the Path box, type the path of the folder to which you want
logs to be written.
You can also do this for the Usage Data Collection Settings and forward these logs to
another server or to another drive.
If you are not very underpad with the Central Administration, you still can use
PowerShell to manage the logs.
The Set-SPDiagnosticConfig and Set-SPUsageService cmdlets are the two that you need
to configure the new paths for SharePoint Logs. The user needs to be Farm
Administrator to run following cmdlets.
Set-SPDiagnosticConfig –LogLocation “…”
Set-SPUsageService – UsageLogLocation “…”
IIS Logs
The IIS Server logs are a little bit more complicated but after using only once you’ll be
able to understand the way of work. The IIS Logs are located under the root => Inetpub
=> Logs => LogsFiles
Strange isn’t it? You’ll see some guid’s maybe never saw in your Farm. Actually they are
the ID’s of your IIS Websites. Open IIS Server and under Sites you’ll see the ID of each
site.
The IIS logs files are also located in the root and it isn’t a bad idea to move them also to
the dedicated log farm.
Navigate to the SharePoint Site and open Logging in the right pane.The by
default logging Directory is %SystemDrive% =>Inetpub => Logs => LogFiles.
If you want to apply the same settings as we did for SharePoint – meaning move the
logs – well we have to specify the local or shared Log Directory in the Directory Case.
When I surf to the Central Administration, you’ll see that a new entry will be done in the
local or shared Log Farm. Again another way of gouvernance.
SharePoint 2013: Common PowerShell
Snippets
Introduction
This wiki has been created to consolidate the SharePoint PowerShell snippets we use on
our day to day SharePoint activities.
General
Adding the SharePoint SNAPIN
# Add SharePoint Snapin to PowerShell
if((Get-PSSnapin | Where {$_.Name -eq
"Microsoft.SharePoint.PowerShell"}) -eq $null)
{
Add-PSSnapin Microsoft.SharePoint.PowerShell
}
Solution Deployment
Add solution to farm
#Replace the wsp path with the actual path of your wsp
Add-SPSolution -LiteralPath C:\Rajesh\Sample.wsp
Deploy Solution
#Replace the wsp name and WebApplication url
Install-SPSolution -Identity Sample.wsp -WebApplication
"http://contoso.com" –GACDeployment
There are multiple parameters to the install-spsolution cmdlet, refer
to http://technet.microsoft.com/en-us/library/ff607534.aspx
Remove Solution
#Replace the wsp name and WebApplication url
Uninstall-SPSolution -Identity Sample.wsp -WebApplication
Enable Feature
#Replace the feature identity and WebApplication url
Enable-SPFeature –identity "Rajesh.CustomFeature1" -URL
"http://contoso.com"
Disable Feature
#Replace the feature identity and WebApplication url
Disable-SPFeature –identity "Rajesh.CustomFeature1" -URL
"http://contoso.com"
Uninstall Feature
#Removes the feature definition from the farm.
#Replace the feature identity
Uninstall-SPFeature –identity "Rajesh.CustomFeature1”
Branding
Changing the master page on all sites at site collection
#Replace the site-url with the actual site url
$site = Get-SPSite "http://contoso.com"
foreach ($web in $site.AllWebs) {
#change the master url accordingly
$web.CustomMasterUrl = "/_catalogs/masterpage/V4.master";
$web.Update();
$web.Dispose();
}
foreach ($web in $site.AllWebs) {
#change the master url accordingly
$web.MasterUrl = "/_catalogs/masterpage/v4.master";
$web.Update();
$web.Dispose();
}
$site.Dispose();
Set Alternate CSS
#Replace the site-url with the actual site url
$web = Get-SPWeb "http://contoso.com"
#Replace the css url accordingly
$web.AlternateCssUrl = "/Style Library/MyStyles/main.css";
$web.AllProperties["__InheritsAlternateCssUrl"] = $True;
$web.Update();
$web.Dispose();
Set regional setting/locale
#Replace the site-url with the actual site url
$site = Get-SPSite "http://contoso.com"
foreach ($web in $site.AllWebs) {
#Change the Web locale as required, below is for US Eng
$web.Locale = 1033;
$web.Update();
$web.Dispose()
}
$site.Dispose()
Document Library
Delete document by name from Document Library
$site = new-object Microsoft.SharePoint.SPSite("site-url")
$web = $site.openweb()
$list=$web.Lists["Document-Library-Name "]
$listItems = $list.Items
$listItemsTotal = $listItems.Count
Write-Host $listItemsTotal
for ($x=$listItemsTotal-1;$x -ge 0; $x--)
{
if($listItems[$x].name.Contains("file")) # file refers to the name
of the document
{
Write-Host("DELETED: " + $listItems[$x].name)
$listItems[$x].Delete()
}
}
Site Management
Delete all sites in the given site
# completely deletes the specified Web (including all sub sites)
function RemoveSPWebRecursively( [Microsoft.SharePoint.SPWeb] $web)
{
Write-Debug "Removing site ($($web.Url))..."
$subwebs = $web.GetSubwebsForCurrentUser()
foreach($subweb in $subwebs)
{
RemoveSPWebRecursively($subweb)
$subweb.Dispose()
}
$DebugPreference = "SilentlyContinue"
Remove-SPWeb $web -Confirm:$false
$DebugPreference = "Continue"
}
$DebugPreference = "SilentlyContinue"
#Replace the site-url with the actual site url
$web = Get-SPWeb "http://contoso.com/subsite1"
$DebugPreference = "Continue"
If ($web -ne $null)
{
RemoveSPWebRecursively $web
$web.Dispose()
}
PowerShell SharePoint 2010 Developer Dashboard
Enable the Developer Dashboard
$service =
[Microsoft.SharePoint.Administration.SPWebService]::ContentService
$addsetting =$service.DeveloperDashboardSettings
$addsetting.DisplayLevel =
[Microsoft.SharePoint.Administration.SPDeveloperDashboardLevel]::OnDem
and
$addsetting.Update()
Other languages
This article is also available in the following languages:
SharePoint 2010: Extraits de code PowerShell courants (fr-FR)
SharePoint 2013: SharePoint and
Enterprise Search Survival Guide
Introduction
This is a list of SharePoint 2013 resources related to Enterprise Search that you can add
too, and feel free to re-arrange.
Quickly find SharePoint 2013 Enterprise Search Resources!!
Bing SP2013ES http://www.bing.com/search?q=sp2013es
Main TechNet and MSDN Resources
Small, medium, and large-size farm architectures for enterprise search. It contains
search and farm topology examples, scaling guidance, and hardware
requirements (TechNet) Link to Technical Diagrams page . Direct link to Search
PDF .
Search in SharePoint Server 2013 Resource Center (TechNet)
What's new in Search in SharePoint 2013 (TechNet)
Search architectural diagrams (posters) (TechNet)
Administer search in SharePoint Server 2013 (TechNet)
Index of all PS cmdlets for SharePoint 2013 (TechNet)
Index of all PS Search cmdlets for SharePoint 2013 (TechNet)
Survival Guide: FAST Search Server 2010 for SharePoint
CodePlex - Projects related to SharePoint Search 2013
Migration
Moving from Search Server 2010 for SharePoint
Moving from Fast Search Server 2010 for SharePoint (TechNet wiki)
Moving from ESP 5.3/FSIS
Moving from Google Search Appliance
Operations
Procedure to apply OS updates, hotfixes, CU, PU, SP, etc
Managing data spills (TechNet wiki)
(TechNet Blog)
Hybrid Search with SharePoint 2013
Configure a one-way hybrid environment with SharePoint Server 2013 and Office
365 (white paper)
Configure a two-way hybrid search environment with SharePoint Server 2013 and
Office 365 (white paper)
SPC2012 sessions - Cliff Notes
Search Architecture in SharePoint 2013: SPC202 (Rune Zakariassen and Thomas
Molbach)
What's new for Search in SharePoint 2013: SPC259 (Glen Anderson and Cem
Aykan)
Capacity Planning, Sizing and High Availability for Search in SharePoint 2013:
SPC172 (Barry Waldbaum and Olaf Birkeland)
Effective Search Deployment and Operations in SharePoint 2013: SPC 095 (Knut
Brandrud and Darrin Allred)
Search Content Enrichment and Extensibility: SPC 203 (K.Hammervold, Runar
Olsen and Niels Petter Rasch Olsen)
Install and Configure SharePoint 2013
Auto SP Installer
PowerShell scripts on TechNet Gallery
Import-QueryRules
Maintain-SPEnterpriseSearchMetadataProperties
Migrate SharePoint 2010 Search Thesaurus to SharePoint 2013
Topology and Diagnostics
Determine search service status
Manage Search Topology in SharePoint 2013 (TechNet)
Creating the Search SSA in PowerShell
Deploying SharePoint 2013 SSA Across Multiple Servers Using
PowerShell (MSDN Blog)
Recommended server architecture for small, medium, and large-size
farms (Microsoft Download Center)
What are the sizing recommendations for the search databases? (wiki)
SharePoint 2013 IO Recommendations
What is the high availability (HA) story for SharePoint 2013 and search? (wiki)
Content Integration, Connectors and Processing
XML Mapper
Customize the SharePoint 2013 search experience with a Content Enrichment
web service (MSDN Blog)
Brilliant Blog outlining Asynchronous Content Enrichment (MSDN Blog)
IIS Web Sites and User ACLs (TechNet wiki)
CEWS Pipeline Toolkit (TechNet wiki)
Supported file types (TechNet Wiki)
SharePoint 2013 - Configure Content Source and Search Result Source using
Powershell
Query Integration
SharePoint 2013 Document Preview
Adaptive experiences (MSDN Blog)
Query Suggestions (TechNet wiki)
Blog entry for CodePlex SharePoint 2013 Search Query Tool
(CodePlex)
Security
Custom Security Trimming for Search in SharePoint 2013
(MSDN Blog)
Blogs
Enterprise Search - Authoring Schedule
Alex Smith: Enterprise Search Blog (MSDN Blog) Some great entries on
Documentum!
Anders Fagerhaug: Adaptive Experiences in SharePoint 2013 (MSDN Blog)
Anders Fagerhaug and Armen Kirakosyan : XML Connector for SharePoint 2013
(MSDN Blog)
Balamurugan Kailasam's Blog SharePoint-community.net
Beyond Search Stephen Arnold (Blog)
Brian Jackett: The Frog Pond of Technology (Blog)
Brian Pendergrass: SharePoint Strategery (MSDN Blog)
Brandon Atkinson's Blog
Do More With Search (Blog)
Enterprise Search
(Blog)
Kris Loranger: Enterprise Search Blog (MSDN Blog)
Nadeem Ishqair: Search Space (MSDN Blog) Connectors, REST API, Search
Query Tool on CodePlex
Mark Sullivan: Enterprise Search Blog (TechNet Blog)
Max Melcher: SharePoint, Search and other stuff (Blog)
Mikael Svensen's Blog (blogspot)
Microsoft Enterprise Search Blog (MSDN Blog)
Peter Dempsey: Enterprise Search Blog (MSDN Blog)
Ragnar Heil: SharePoint Nuggets (MSDN Blog)
Richard DiZerega: SharePoint Blog (MSDN Blog)
Sezai Komur: SharePoint Blog
Share-n-dipity Steve Peschka (TechNet Blog)
SharePoint Brew Russ Maxwell (MSDN Blog)
SharePoint Dev Blog (MSDN Blog)
SharePoint for Squirrels Natalya Voskresenskaya (BlogSpot)
SharePoint IT Pro Blog: ToTheSharePoint (MSDN Blog)
Sveinar Rasmussen: Security Trimming in SharePoint 2013 (MSDN Blog)
The Search Guys - Paul Branson, Paul Summers, Matt King (TechNet Blog)
FBA
Nice Webpart for creating FBA users from SharePoint site.
Building Custom Forms Using SharePoint
Designer 2013
Description
In this article I am going to walk through the process of building custom forms using
SharePoint Designer 2013. We are going to create three separate forms for a custom list.
First a custom new item form, second a display item form and finally an edit item form.
Setting the Scene
I have created a custom list call Request Form which a student will fill to submit an event
request. The counselor will use the edit item form and either approve or deny the
request.
Building the List
Below is a screenshot of the columns created in the custom list.
The columns I have shown above are self-explanatory; however, I am going to provide
the choices I have added to the Choice column. The default value of the below choice
columns are blank.
Approved By Counselor
Event Type
State
Current Status
Building the Form
This section describes the process of building custom new, display and edits forms using
SharePoint Designer 2013.
New Item Form
Below is a screenshot of what SharePoint Designer 2013 looks like when I have opened
the site. Request Form is the list I am focusing on.
Below are the settings of the list. We are going to use the Forms section to build the
custom forms.
Click on the Form's New button and fill the information as shown below. Select the 'Set
as default form for the selected type' . Click OK.
Now in Forms you should see your new custom form. Click on the form. You should
now be presented with the CustomNewForm code. Below is a screenshot.
Click on 'CustomNewForm.aspx' to view the code. The first 23 lines are highlighted
yellow which you cannot edit and hence when you click on it, the Data View Tools will
not be available. I have provided screenshots of what the ribbon looks like with and
without the tools.
Below is as screenshot without Data View tools. This is because the cursor is on the
highlighted yellow code.
Below is a screenshot with Data View Tools
The below table contains the columns that the new form should contain, the rest can be
deleted.
In the code right-click and choose 'Find…' from the drop-down list. Type in 'Counselor
comment'. Below are screenshots
We need to delete both the ms-formlabel and the ms-formbody for this column. Below
is the code that NEEDS TO BE DELETED. I have also provided a screenshot as well.
Counselor Comment
Do the same for the other columns that need to be deleted for this view.
Once you have deleted the columns, click Save and then Preview in Browser. Saving the
changes you made in the form can take a few seconds.
Below is a screenshot of the CustomNewForm.aspx
Remove the Save and Cancel button
I am now going to remove the Save and Cancel button from the top and give this form
a title. In SharePoint Designer 2013, in the code right-click and choose 'Find…' from the
drop-down list. Type in 'savebutton1'. Below is what you are looking for. Delete that
code. I have also provided a copy of that code below.
Again, click Save and then Preview in Browser. Now, as shown below, you should not see
the Save and Cancel button on the top.
Add Title
In the CustomNewForm.aspx search for dvt_1.body. Below is what you should find.
Right below , type in a form name, for example
'New Request form'. Below is a screenshot
Again, click Save and then Preview in Browser. Below is what you will see.
To make the text look like a prominent title, go back to SharePoint Designer, highlight
the 'New Request Form', click on the Home ribbon and select the font type and size.
I selected my font type to be 'Times New Roman' and font size as x-Large which will
automatically change the code. Below is what you will see
Again, click Save and then Preview in Browser. Below is what you will see.
Below is a video which walks you through the steps show above. (Click Here
high resolution video)
to view a
Display Item Form
In this section we are going to build the Display Form. In this form we are not going to
delete any columns, however, we are going to remove the 'Close' button from the top
and give the form a different name.
Click on the Form's New button and fill the information as shown below. Select the 'Set
as default form for the selected type' . Click Ok.
Now in Forms you should see your new custom form. Click on the form. You should
now be presented with the CustomDisplayForm code. Below are screenshots.
In the code right-click and choose 'Find…' from the drop-down list. Type in
'gobackbutton1'. Below is what you are looking for. Delete that code. I have also
provide a copy of that code below.
Again, click Save and then Preview in Browser. Now, you should not see the Close
button on the top.
Below is a video which walks you through the process of deleting the top Close button
and adding a title. (Click Here to view a high resolution video)
Edit Item Form
In this section we are going to build the Edit form. In this form we are not going to
delete any columns, however, make changes so that some of them cannot be edited.
We are also going to remove the Save and Cancel buttons from the top and change the
title.
Below is a table which shows which columns can and cannot be edited.
In the CustomEditForm.aspx code, for all the columns we want to setup as read only, we
need to replace the Edit code with the Display code i.e. replace the Edit code shown
below (both text and screenshot are provided)
Title *
With the Display code as shown below (both text and screenshot are provided)
Title
Below is a screenshot of what the Edit view looks like when the Title column has been
setup as display only.
Below is a video which walks you through the process of editing the edit item form to
force some of the fields to be in display mode only. In this video I have first purposefully
left the Title column as it is and also copied the code over from the display form to show
you both. Then I have made all the changes to only allow the Counselor Comment,
Counselor Date and Approved by Counselor fields to be editable. (Click Here to view a
high resolution video)
Conclusion
In this article I have not described the use of the Current Status column that we created.
This column is primarily used for workflows i.e. you can use that choice field to setup
workflow conditions to perform desired actions.
This article is to provide a quick, easy and little to no-code solution to create custom
design forms for a SharePoint list or document library using only SharePoint Designer
2013. Once the custom forms have been built and set as default, it is at your discretion
to delete the original three forms.
See Also
SharePoint 2013 Portal
SharePoint 2013 - Service Applications
SharePoint 2013 - Resources for Developers
SharePoint 2013 - Resources for IT Pros
SharePoint 2013: A no Code Solution to
Build a Change Management Request
Brief Synopsis
A request had come in by a department to create a Change Management Request. This
request is somewhat similar to a vacation (time off) request, however it does have some
differences. Below is the basic outline of the request.
1. The users should have the ability to fill a form. This form has certain questions
which the users must answer. Let's call this a 'Change Management Request form'
2. A "Management Committee" team will receive an alert which tells them that a
form has been filled, submitted and waiting to be reviewed. They check to see if
the criteria has been met and then forwards the request to an 'Awards
committee'.
3. The "Awards Committee" can only view the questions and answers, but does not
have any access to who filled the form. Also, each awards committee member
needs to approve or deny this request. Once the number of approved (or denied)
reaches a certain quantity, the Management Committee receives an alert.
Sounds simple enough!...well...kinda. The primary and most important criteria is that all
users, including the 'Awards Committee' should be able to view the existing suggestions
that have already been made, however, they should not be to see who put in those
suggestions. To explain how I went about setting this up I am going to break it into six
separate sections.
I am going to use a SharePoint (SP) 2013 enterprise environment with
SharePoint designer 2013 and InfoPath designer 2010 to explain the steps. I am going
to create three separate lists, three separate InfoPath forms and three separate
workflows. One of the workflow is going to use the impersonation step. Below is the
setup of my SharePoint 2013 farm.
1. SharePoint 2013 standalone environment setup on Windows 2012 and SQL 2012
SP1.
2. SharePoint 2013 Enterprise license.
Building the three lists
I have a SharePoint (SP) 2013 publishing site already setup as shown below:
User Input List
Create the first list called 'User Input'. Since we will be creating three separate lists, I am
going to walk-through the process of setting up the first list in detail. You can create the
remaining two lists using the same steps as shown below.
Click on the settings option and then choose 'Site contents' as shown below
In 'Site Contents' choose 'add an app' as shown below:
In 'Your Apps' choose 'Custom List'
Give your custom list a name. In my case I have named it as 'User Input':
You will now see the new list created. Click on it and then access the List Settings option.
Now we will be creating columns needed. Choose the 'Create column' option as shown
below:
Below are the lists of columns which we will need. Some of these columns are type
Choice and hence I have provided the choices as well. When you create a list by default
the Title column will be created. Rename the Title column to as Suggestion Topic. It is
important that this change is carried out because the Title column also has a hyperlink
built into it.
The Action column has the following choices.
SU - Submitted by User
AMT - Approved by Management Team
RMT - Rejected by Management Team
AAC - Approved by Awards Committee
RAC - Rejected by Awards Committee
The State column has the following choices.
WMT - Waiting on Management Team
WAC - Waiting on Awards Committee
DONE
We will be reusing this list again so let’s save it as a template. In the List Settings page
choose the 'Save list as template option' as shown below:
Management Committee Input List
Now, we are going to create our second list, however, this time we are going to use the
template that we saved above.
Follow the steps provided above to 'Add an app'. By default, the 'Apps You Can Add'
option is selected; instead, choose the 'Your Apps' option as shown below:
Now you should be able to find the new 'ChangeManagement' template we saved.
Click on the 'ChangeManagement' app and give it a name. In my case I have named it as
'Management Committee Input'. Now you should see the new list you have created
which will contain the columns we built before.
In this list we are going to add a column. This will be a Multiple lines of text column
called 'Management Team Comments' as shown below:
Awards Committee List
Now we are going to build our third and final list. Build the list in the same manner as
the second list. The third list is called 'Awards Committee'
This list will be used to store the information of the Awards Committee. Each Awards
committee member is going to have to choose a Yes or a No and leave a comment. We
also need to a State column for each and every Awards committee. Below are the three
columns which need to be created for every Awards committee member.
Below are the screen shots for the User1 column
Below are screenshots of the User1-State column:
Below is a screenshot of the User1-Comment column:
You can add as many Awards committee members as you need. I have created a total of
5. Below is a screenshot of all my columns.
Setting up the permissions
As I had mentioned before, the primary and most important criteria is that all users,
including the 'Awards Committee' should be able to view the existing suggestions that
have already been made, however, they should not be to see who put in those
suggestions. Hence the permissions inheritance needs to be broken and specific
permissions needs to be setup for each list. Since we will be changing the permissions
of three separate lists, I am going to walk-through the process of setting up the
permissions of the first list in detail. You can setup the permissions of the remaining two
lists in the same manner.
User Input list permissions
Go to the List Settings for the 'User Input' list and click on the 'Permissions for this list'
as shown below:
Below is the default permissions settings. As you can see, currently this list is inheriting
the permissions from its parent.
Click on the 'Stop Inheriting Permissions' option. You will receive the below message,
click OK.
For the sake of simplicity, I am going to delete all the existing groups I have and add the
individual users/groups only. Since all users will need access to fill the form, I have given
All Users Contribute level permission for this list. Below is a screenshot which also shows
that this list now has unique permissions.
Management Committee Input list permissions
Below is a screenshot of the permission for the 'Management Committee Input' list.
User7 and User8 are the two members of this committee and hence I have given them
contribute access.
Awards Committee Input list permissions
Below is a screenshot of the permission for the 'Awards Committee Input' list. User1,
User2, User3, User4 & User6 are the members of this committee and hence I have given
them contributed access.
Building the InfoPath forms
I will be spending more time explaining step-by-step how to create the forms using
InfoPath designer since it plays an important role in making the workflows work
successfully. This section comprises of three separate forms for each list we created
before. I have provided written steps to create these forms and also videos for each. As
a reminder, you must have SharePoint 2013 enterprise level license to use the
embedded forms features.
Building the User Input form
Go to the User Input list and choose the Customize Form option (as shown below) which
is on the top ribbon.
When the form is first created on InfoPath Designer, it contains all of the fields that were
created in the User Input list as shown below.
For the initial Change Management Request form, we need only need the Suggestion
Topic, Requester Name, Description, Solution and Result columns. The rest can be
removed from the form. You can also add a title to the form to signify its use as shown
below.
On the horizontal ribbon, choose Page Design and then click on New view as shown
below.
Give the new view a name. In my case I have named it as 'AccessDenied'
Add some text similar to what I have shown below:
Go back to the Edit Item view and add two button control objects to the form. Name
one as Submit and the other as Cancel.
For the Submit button add an Action rule which runs the following actionsSubmit Data
Set the Action to SU
Close the form
Below is what the Rule should look like
For the Cancel button add the Close This form action rule. Below is what the rule should
look like.
On the horizontal ribbon, choose Data and then click on Form Load as shown below
Add the following two rules.
NewForm rule as shown below
An AccessDeniedview as shown below
Go to File>Form Options and UNCHECK the Show InfoPath commands in Ribbon or
toolbar as shown below. Confirm that Edit Item (default) is the Display view. This will
prevent the end user from switching back from the AccessDeniedview to the Edit view.
You can now publish the page by either going to File>Quick Publish or simply using the
Quick publish button on the top left corner.
Now when you go back to your User Input list on SharePoint and choose New Item,
below is the embedded form you should see.
Below is a video which walks you through the process described above to build the
embedded form for Change Management Request form? Click Here to view the same
video in full size.
Building the Management Committee Input form
As we did before for the User Input form, go to the Management Committee Input list
and choose the Customize Form option.
When the form is first created on InfoPath Designer, it contains all of the fields that were
created in the Change Management Request list as shown below.
In this form there are a few new features we are going to add.
We are going to add a two new rules in this form. The first new rule will NOT
ALLOW the Management team to edit the Suggestion Topic, Requester name,
Description, Solution and Result column. The second rule will FORCE the
management committee to fill a comment if they deny the request.
Add three buttons, Accept, Deny and Cancel.
We need only need the Suggestion Topic, Requester Name, Description, Solution, Result
and Management Team Comments columns. The rest can be removed from the form.
You can also add a title to the form to signify its use as shown below.
Add three Control buttons to this form and name them as Accept, Deny and Cancel.
After adding the buttons below is what the form should look like.
Let's add the first new rule which will NOT ALLOW the Management team to edit the
Suggestion Topic, Requester name, Description, Solution and Result column.
This rule needs to be applied separately to Suggestion Topic, Requester Name,
Description, Solution and Result field. I'm going to provide the steps for the Suggestion
Topic field only, but the process is the same for the remaining.
Select the Suggestion Topic field, Click New, and then choose Formatting. Below are the
settings for this rule.
Details for: Disable
Condition: State = WMT
Formatting: check the 'Disable this control' box.
Below is a screenshot of what the settings are.
The same rule needs to be applied for remaining we mentioned above. To quicken the
process, you can Copy the rule in the Suggestion Topic field and paste it in the
remaining fields.
Now, lets add the second rule will FORCE the management committee to fill a comment
if they deny the request. We are going to use the Validation Rule.
Select the Management Team Comments field, Click New, and then choose Validation.
Below are the settings for this rule.
Details for: CommentsRequired
Condition: Action = "RMT" and Management Team Comments is Blank
ScreenTip: Comments are required when request is denied.
Below is a screenshot of all the settings.
Now lets add the rules for each button.
Select the Accept button and add a new Action Rule. Below are the settings for this rule.
Details for: Accept
Condition: None -Rule runs when the button is clicked. (This is setup by default when
you choose the Action rule for a button)
Run these actions:
i) Set a field's value
ii) Submit Data
iii) Close this form.
Below is a screenshot of all the settings.
The rules for the Deny button is very much the same except the Set a field's value Action
= RMT. Below is a screenshot of all the settings.
For the Cancel button use the Action rule and use settings below as shown in the
screenshot.
Go to File>Form Options and UNCHECK the Show InfoPath commands in Ribbon or
toolbar. You can now publish the page by either going to File>Quick Publish or simply
using the Quick publish button on the top left corner.
Now when you go back to your Management Committee list on SharePoint and choose
New Item, below is the embedded form you should see. Some of you may be wondering
as to why we can still edit the Suggestion Topic, Requester Name, Description, Solution
and Result even though we set up the Actions in InfoPath designer. I'm glad you
thought of that. The simple answer is because the we haven't setup the workflows yet to
change the State. Hence, currently the State is blank and if you recall, the disable feature
works only when the State is set to WMC.
Below is a video which walks you through the process described above to build the
embedded form for the Management Committee form. Click Here to view the same
video in full size.
Building the Awards Committee Input form
As we did before for the Management Committee form, go to the Awards Committee
Input list and choose the Customize Form option.
When the form is first created on InfoPath Designer, it contains all of the fields that were
created in the list as shown below.
In this form there are a few new features we are going to add.
We are going to add a two new rules in this form. The first new rule will NOT
ALLOW the Management team to edit the Suggestion Topic, Description,
Solution and Result column. The second rule will FORCE the awards committee to
fill a comment if they choose No.
Add two buttons, Submit and Cancel.
There are selected fields that DO NOT need to be present in the form and hence after
removing them and re-arranging the fields below is what the form looks like.
Let's add the first new rule which will NOT ALLOW the Management team to edit the
Suggestion Topic, Description, Solution and Result column.
This rule needs to be applied separately to Suggestion Topic, Description, Solution and
Result field. I'm going to provide the steps for the Suggestion Topic field only, but the
process is the same for the remaining.
Select the Suggestion Topic field, Click New, and then choose Formatting. Below are the
settings for this rule.
Details for: Disable
Condition: State = WAC
Formatting: check the 'Disable this control' box.
Below is a screenshot of what that looks like.
The same rule needs to be applied for remaining we mentioned above. To quicken the
process, you can Copy the rule in the Suggestion Topic field and paste it in the
remaining fields.
Now, lets add the second rule will FORCE the awards committee to fill a comment if they
select No. We are going to use the Validation Rule.
Select the Comments field, Click New, and then choose Validation. Below are the
settings for this rule.
Details for: WhenNo
Condition: User1 = "No" and User1-Comment is Blank
ScreenTip: Comments are required when request is denied.
Below is a screenshot of all the settings.
The same rule needs to be applied to remaining four comments fields. To quicken the
process, you can use the Copy and Paste feature.
Now lets add the rules for each button.
Select the Accept button and add a new Action Rule. Below are the settings for this rule.
Details for: Accept
Condition: None -Rule runs when the button is clicked. (This is setup by default when
you choose the Action rule for a button)
Run these actions:
i) Submit Data
ii) Close this form.
Below is a screenshot of all the settings.
For the Cancel button use the Action rule and use settings below as shown in the
screenshot.
Go to File>Form Options and UNCHECK the Show InfoPath commands in Ribbon or
toolbar. You can now publish the page by either going to File>Quick Publish or simply
using the Quick publish button on the top left corner.
Below is a video which walks you through the process described above to build the
embedded form for Awards Committee Input form
Click Here
to view the same video in full size
Building the workflows
Below is a diagrammatic view of what the workflow is going to be. I am excited to show
you the new Copy and Paste feature in SharePoint Designer 2013 which makes things
much, much easier and faster.
We are going to create three separate workflows whose functions are as follows
a. Once a user fills the form and submits it, the Change Management Committee
receives an email alert with information and links. A copy of this list item is created in
the Change Management Committee list. Since the permissions of both the lists are
NOT THE SAME, we will be using the impersonation step.
b. Change Management Committee is going to review the user input. If the committee
approves this request, then an alert email is sent to the end user and all the Awards
Committee members.
c. Awards Committee members will access the form and make a decision. As the
committee members are making the decision a count is kept on the total number of Yes
and No. Once either one of them reaches at the value 3, an alert email is sent to the
Management Committee.
Building the User Input Workflow
Open your SharePoint 2013 site using SharePoint Designer 2013. Below is what the
designer should look like.
Under Navigation>Site Objects click on Lists and Libraries. Select the User Input List.
Below are the two screenshots.
On the top horizontal ribbon, click on List Workflow, select SharePoint 2010 Workflow as
the Platform type and give it a name. In my case I am naming it as User Input WF. Below
are the screenshots.
In the horizontal ribbon, in Insert, click on Impersonation Step. You can now delete the
Step 1.
Follow the steps provided in the below video to add the Conditions and Actions.
In the Click Here URL you can put in either DispForm.aspx?=ID or EditForm.aspx?ID=
Click Here to view the same video in full size.
Building the Management Committee Workflow
Part of this workflow is to copy a list item into the Awards Committee list. In this case we
will NOT BE USING the impersonation Step since the Management Committee users
already have access to the Awards Committee list.
Follow the steps provided in the below video to add the Conditions and Actions.
In the Click Here URL you can put in either DispForm.aspx?=ID or EditForm.aspx?ID=
Click Here to view the same video in full size.
Building the Awards Committee Workflow
Since SharePoint 2013 Designer now has the copy and paste feature available, building
this workflow is much much easier. This workflow is keeping a count of to total number
of approved and denied counts. If any one of them reach a total of 3 then an alert email
is sent to the Management Committee.
Follow the steps provided in the below video to add the Conditions and Actions.
In the Click Here URL you can put in either DispForm.aspx?=ID or EditForm.aspx?ID=
Click Here
to view the same video in full size.
Finishing touches
Now that we have all the forms and workflows setup, we need to cleanup the look and
feel of the default page and list views.
Home the home page, hide the lists from the Quick Launch as follows. Below is what the
Quick Launch looks like
Go to User Input list, click on the List Tab and then choose List Settings as shown below
Under General Settings click on 'List name, description and navigation'
In Navigation, choose No and Save.
Do the same for the Awards Committee Input and the Management Committee Input
list as well.
Also, in SharePoint 2013 the lists will still show up even though you have not displayed it
due to the Recent navigation setting.
You can manually remove the Recent navigation from Settings-> Site Settings ->
Navigation (under Look and Feel).
Select the Recent navigation option and click Delete as shown below
Now when you visit the home page you will no longer see the lists in the Navigation as
shown below
Lets add a few options to select from keeping in mind permissions.
Click on Settings and choose Edit
In the Page Content section, you can delete any unwanted text there and add
something similar to the following.
Save, check-in and publish the changes. We will be returning back to this home page to
add URLs.
Go to User Input list, click on the List Tab and then choose Modify View as shown below
Below are the default settings of this list view.
Make the below changes:
Scroll down below and expand Style and choose Preview. Click Ok. Now when you go
back to the User Input List, below is what you should see.
Right-Click on the User Input title, and copy shortcut as shown below
Go back to the home page, and paste that URL to the 'Click Here' in 'Click Here to
review existing Change Management request' .
Add the following URL to the 'Click Here' in 'Click Here to complete a new Change
Management request.'
http://sp2013/Lists/User%20Input/NewForm.aspx
Go to Management Committee Input list, click on the List Tab and then choose Modify
View. Make the below changes.
Scroll down below and expand Group By, choose State in the 'First Group by the
column'. Click Ok. Now when you go back to the Management Committee List, you
should see a view similar to the below screenshot.
Right-Click on the Management Committee title, and copy shortcut.
Go back to the home page, and paste that URL to the 'Click Here' in 'Click Here to
review existing Change Management request' in To Change Management Form.
Finally, Go to Awards Committee Input list, click on the List Tab and then choose Modify
View. Make the below changes.
Scroll down below and expand Filter, select the 'Show items only when the following is
true:' radio button and make the following changes. This will allow the Awards
committee to only view those Change Management requests that are waiting for them
to be reviewed and none other.
Right-Click on the title, and copy shortcut.
Go back to the home page, and paste that URL to the 'Click Here' in 'Click Here to
review existing Change Management request' in To Award Committee Form.
Below is a brief video which walks you through the process of adding the text on the
home page, filter the lists and adding the links. Click Here to view the same video in
full size
Demo
Finally, the below video shows a demo of how an everyday user (user10) would put in a
request, the Change Management team (User 7 or User 8) would approve it and the
Awards committee members would log in to approve it.
For sake of demonstration I have created a personal view for lists with which I can view
the control columns such as State and Action. This is not needed once the workflow
goes live on your production farm.
(Here's a tidbit - In SharePoint 2013 the 'Sign in as a Different User' is not available,
however you can use
http://yoursite/_layouts/closeConnection.aspx?loginasanotheruser=true to do that.)
Click Here to view the same video in full size.
I would like to end by saying that there are several ways to perform this same function
and tighten the security further, however, this demonstration should give you a quick
and easy way to create a Change Management type workflow without any code!
See Also
SharePoint 2013 Portal
SharePoint 2013 - Service Applications
SharePoint 2013 - Resources for Developers
SharePoint 2013 - Resources for IT Pros
SharePoint Server 2013: Customize your
Central Administration
Once a time Jeff Teper – Senior Vice President for SharePoint said that we should “use
SharePoint as an out-of-box application whenever possible. We designed SharePoint
[2013's] UI to be clean, simple and fast and work great out-of-box. We encourage you
not to modify it, which could add complexity, performance and upgradeability, and to
focus your energy on working with users and groups to understand how to use
SharePoint to improve productivity and collaboration and identifying and promoting
best practices in your organization.”
This is ABSOLUTELY true for intranet or extranet sites. We’ve all seen awful
intranet/extranet designs. Flashing lights, animated gifs and so many other things. But
thankfully they’re now less common or even disappeared. A corporate Intranet or
Extranet should be as simple as possible. This should be even considered a best practice
This is NOT true for Public Facing Internet Sites. Hopefully I guess, because otherwise
the world well knows SharePoint Public Facing Website should be something like that:
Well, if a customer wants to buy a Ferrari and sees this website, I can guarantee you that
he will buy another car. Not professional at all. Everybody is talking about customizing
Public facing Internet Web Sites or even intranets, but with this blog post I want to show
you how to customize your Central Administration.
Therefore connect to your machine and open SharePoint 2013 Central Administration.
As you can see the User Interface is very classic and same as all other Central
Administrations that you ever saw in your life.
You can’t see the Design Gallery under the Site Settings of your Central Administration
but it’s not forbidden to navigate to it by hitting the /15/designgallery.aspx in the
browser.
You can now select a predefined template for your Central Administration and hit ok.
Well look this now. Your Central Administration is now a little bit different. Cool isn’t it?
If you don’t like the black template you can always navigate to the Design Gallery and
select another one.
To be honest it’s, still not personalized enough. What I want is to see is, also my
company name on my Central Administration and a small logo. Why not ?
Navigate to the Site Settings and change the Title, Description, Logo and the Quick
Launch
This is now a 100% personalized (No custom Code) Central Administration.
If you have many farms and multiple environments you can also image that the
Development environment should have a « red », the Qualifying a « orange » and the
Production environment a « black » template.
This will help you – visually although – remember where you are and limit the User Error
Impact! A different way of governance :-):-)
Adding Master Page to Auto-Hosted
Apps
When we build a SharePoint hosted app, all pages and other resources are served by
SharePoint from within the app web. For this reason, SharePoint hosted apps
automatically inherit the look and feel of the host web and present custom functionality
within the familiar SharePoint environment.
This inheritance is not automatic when we create a remote hosted app because the
remote web is served from outside the SharePoint environment. There is no requirement
to ensure that your remote web looks like the host web but a similar look and feel
reassures users, positions familiar links and controls where users expect them, and can
ease the adoption of your apptime.
Steps to add host webmaster page to app pages
1.
To use the Chrome Control, copy the sp.ui.controls.js JavaScript library into your
remote web project.
2. Ensure each page in app includes
4. Add following div element to .aspx page
Best Practice
Use the Chrome Control whenever you want your app to blend with the host web's look
and feel.
You cannot be sure that the host web will always use the familiar SharePoint look and
feel so, if you hard-code the usual SharePoint design into your app, the app may not
look like the customer's host web. The Chrome Control avoids this problem by
downloading the style sheet and headers elements from the host web at run time.
Code: ChromeLoader.js
001.var hostweburl;
002.
003.//load the SharePoint resources
004.
005.$(document).ready(function () {
006.
007.
//Get the URI decoded URL.
008.
009.
hostweburl =
010.
011.
decodeURIComponent(
012.
013.
getQueryStringParameter("SPHostUrl")
014.
015.
);
016.
017.
018.
// The SharePoint js files URL are in the form:
019.
// web_url/_layouts/15/resource
020.
021.
var scriptbase = hostweburl + "/_layouts/15/";
022.
023.
// Load the js file and continue to the
024.
025.
//
success handler
026.
027.
$.getScript(scriptbase + "SP.UI.Controls.js",
renderChrome)
028.
029.});
030.
031.//Function to prepare the options and render the control
032.
033.function renderChrome() {
034.
035.
// The Help, Account and Contact pages receive the
036.
037.
//
same query string parameters as the main page
038.
039.
var options = {
040.
041.
"appIconUrl": "siteicon.png",
042.
043.
"appTitle": "My Reports",
044.
045.
//"settingsLinks": [
046.
047.
//
{
048.
049.
//
"linkUrl": "Account.html?"
050.
051.
//
+ document.URL.split("?")[1],
//
"displayName": "Account settings"
052.
053.
054.
055.
//
},
//
{
056.
057.
058.
059.
//
"linkUrl": "Contact.html?"
060.
061.
//
+ document.URL.split("?")[1],
062.
063.
064.
//
"displayName": "Contact us"
065.
//
}
066.
067.
//]
068.
069.
};
070.
071.
var nav = new SP.UI.Controls.Navigation(
072.
073.
"chrome_ctrl_placeholder",
074.
075.
options
076.
077.
);
078.
079.
nav.setVisible(true);
080.
081.}
082.
083.// Function to retrieve a query string value.
084.
085.// For production purposes you may want to use
086.
087.//
a library to handle the query string.
088.
089.function getQueryStringParameter(paramToRetrieve) {
090.
091.
var params =
092.
093.
document.URL.split("?")[1].split("&");
094.
095.
var strParams = "";
096.
097.
for (var i = 0; i < params.length; i = i + 1) {
098.
099.
var singleParam = params[i].split("=");
100.
101.
if (singleParam[0] == paramToRetrieve)
102.
103.
return singleParam[1];
104.
105.
}
106.
107.}
HTML
01.<%@ Page Language="C#" AutoEventWireup="true"
CodeBehind="Default.aspx.cs" Inherits="AppWeb.Default" %>
02.
03.
04.
05.
06.
07.
08.
Home
09.
10.
17.
18.
25.
26.
33.
34.
41.
42.
43.
44.
45.
46.
47.