Quantcast
Channel: SharePoint 2013
Viewing all 174 articles
Browse latest View live

SharePoint 2013 Business - Small Business Secret Site

$
0
0
I found Oslo! That's amazing! :-D

Public facing websites with anonymous access on Office 365?

Website for a restaurant on SharePoint 2013 or Office 365?
SharePoint 2013 Business


How it works
I saw oslo.master and seattle.master in Master Pages library for the very first time, I opened my SharePoint 2013 Publishing Portal, based on public beta. They caught my eye. Master Pages in SharePoint are not usually called city names. Microsoft HQ is in Redmond, near Seattle. Why Oslo? It bugged me since then.

oslo.master and seattle.master are in the Master Pages Gallery:
SharePoint 2013 Business
I decided to find out what "oslo" is. I opened TEMPLATE folder in 15 hive on my VM with SharePoint 2013 and searched for oslo. I got two results:
SharePoint 2013 Business

Oslo.html is the oslo.master page file that I saw in Master Page library.

The other file, oslo-alternate.css looks much more interesting. It is stored in the Features folder, in SmallBusinessWebsite folder. I didn't see any Small Business Website templates, or Features on my Publishing Portal.

There is berlin.master in MasterPages folder :-)

I opened feature.xml file and changed Hidden="true" to Hidden="false" for this feature:
SharePoint 2013 Business

As the result, I got Small Business Website as Site Collection Feature:
SharePoint 2013 Business

I created new site collection as Team Site, and I got error: "File not found" when I tried to activate Small Business Website feature. I created new site collection as Publishing portal, and activated the feature.
Wow!:
SharePoint 2013 Business

That's different!
There is link to SkyDrive, and "website offline" button that I also have on my Office 365 Enterprise SharePoint 2013 site:
SharePoint 2013 Business

This "website offline" button is used to publish the site.

I tried to edit the page:
SharePoint 2013 Business

Themes in Change the look are different than themes you can find in ordinary SharePoint 2013:
SharePoint 2013 Business

You would think that this site is based on oslo.master page - the one I looked for in the first place. Yes? Well, no. It is based on "belltown" master page. Nice. ;-)

Site Settings look different too:
SharePoint 2013 Business

Site Settings are the size of Site Settings on the Team Site that is based on SharePoint Foundation.
Site Settings for this Small Business Site have focus on design - look and feel, and search. You can define Image Renditions as well.

Is there SharePoint Business Foundation in SharePoint 2013? SharePoint Small Business Foundation that doesn't have all the features of SharePoint 2013 Server? Cheaper than SharePoint? What is it called? Probably something cool. Just like men dressed in black with Justin Bieber hair that will go around and sell it.

I can also see that Site Collection Features are gone. No Term Store. Content Types are gone too.
But, Search engine optimization settings and Search Engine Sitemap Settings are there. Search is important for websites. I found a button in the Ribbon that hides/shows search box on the site:
SharePoint 2013 Business

What about Device Channels? Support for mobile devices is kind of important these days..

There is a default channel and a pre-defined "Any Mobile Device" channel:
SharePoint 2013 Business

Interesting, don't you think?

I also found a "Getting started" link in Site Actions:
SharePoint 2013 Business

This link starts a very informative video about the site:
SharePoint 2013 Business

The voice in the video: "... you can use Office 365 to create professional online presence..."

I didn't know this is Office 365? :-) This is a site that runs on my laptop computer. I don't even need to be online to do this. OK, two questions:

1. Does this mean that it will be possible to create public facing websites with anonymous access on Office 365?
2. Does this mean that we can host on premises a smaller version of SharePoint with public facing websites?

The video uses restaurant website as example. It also shows what you can change:
SharePoint 2013 Business

The end result:
SharePoint 2013 Business

Nice!

Are there more sites and features that I don't know of?

I also searched TEMPLATE folder on my SharePoint Server for "seattle". It is just a master page, or is it?:
SharePoint 2013 Business


Well, one wonder at the time ;-)

Related Content
SharePoint 2013 Publishing
SharePoint 2013 Channels
SharePoint 2013 Mobile
Image Renditions

Other Things I Wrote
Content Search Web Part, Metadata Driven Navigation, and Display Templates
MySite
The Story of SharePoint 2013
Adventures with Napa Apps in SharePoint 2013
SharePoint SkyDrive
Geolocation
SharePoint 2013 Apps
The Story of SharePoint 2013
Cross-Site Publishing








SharePoint 2013 Provider App hosted on Office 365

$
0
0
If you tried to create a basic provider-hosted app that is hosted on Office 365, and you got this error message:


Error occurred in deployment step 'Install app for Sharepoint': The application identifier is invalid, it must be a valid GUID.

You probably tried to deploy again and got this error message:


Error occurred in deployment step 'Uninstall App for SharePoint': Value cannot be null. Parameter name: value

I just came home from London, from Jumpstart: Apps for Office and SharePoint. I didn't get the answer on this problem in London, but I guess hanging out with some very clever people made me brighter than I usually am, so I just found the solution myself.

The solution:

1. Create a provider app in Visual Studio 2012 and set the SharePoint site URL to your Developer site on Office 365 URL:
SharePoint 2013 Apps

2. When the provider app is created, right-click on AppManifest.xml and choose "View Code" in Solution Explorer:
SharePoint 2013 Apps

3. Open the Web.Config file for web application project too

4. Open your Office 365 Developer site in browser and open page "/_layouts/15/appregnew.aspx". My Office 365 Developer site has URL "https://sonjasapps.sharepoint.com", and I opened a page at "https://sonjasapps.sharepoint.com/_layouts/15/appregnew.aspx.

Appregnew.aspx page looks like this - don't mind the weird colors on my site, I'm currently testing my apps' look and feel with different host site styles:
SharePoint 2013 Apps

5. Click on "Generate" button next to App Id textbox
6. Copy the GUID that appears in App Id textbox
7. Paste the GUID value instead of "*" for "ClientId" in Web.Config file:

My appSettings in Web.Config file looked like this:

<appSettings>
    <add key="ClientId" value="*" />
    <add key="ClientSecret" value="ACs1wbl234sPLd08+v9yhtlWofxs0Gp78wZAkUfpa0Q=" />
   </appSettings>

I changed it to:

<appSettings>
    <add key="ClientId" value="f2fb8336-9808-40b9-abe8-5a4e9a7a96fd" />
    <add key="ClientSecret" value="ACs1wbl234sPLd08+v9yhtlWofxs0Gp78wZAkUfpa0Q=" />
  </appSettings>



8. Select AppManifest.xml file and paste the same value as "ClientID" for remote web application:

My AppManifest looked like this:

<?xml version="1.0" encoding="utf-8" ?>
<App xmlns="http://schemas.microsoft.com/sharepoint/2012/app/manifest"
     Name="ProviderAppThatWorks"
     ProductID="{b29a4696-6e35-4b4e-a8dd-f8404344bc63}"
     Version="1.0.0.0"
     SharePointMinVersion="15.0.0.0"
>
  <Properties>
    <Title>ProviderAppThat Works</Title>
    <StartPage>~remoteAppUrl/Pages/Default.aspx?{StandardTokens}</StartPage>
  </Properties>

  <AppPrincipal>
    <RemoteWebApplication ClientId="*" />
  </AppPrincipal>
</App>

I changed it to:

<?xml version="1.0" encoding="utf-8" ?>
<App xmlns="http://schemas.microsoft.com/sharepoint/2012/app/manifest"
     Name="ProviderAppThatWorks"
     ProductID="{b29a4696-6e35-4b4e-a8dd-f8404344bc63}"
     Version="1.0.0.0"
     SharePointMinVersion="15.0.0.0"
>
  <Properties>
    <Title>ProviderAppThat Works</Title>
    <StartPage>~remoteAppUrl/Pages/Default.aspx?{StandardTokens}</StartPage>
  </Properties>

  <AppPrincipal>
    <RemoteWebApplication ClientId="f2fb8336-9808-40b9-abe8-5a4e9a7a96fd" />
  </AppPrincipal>
</App>



9. Go back to browser and click on "Generate" button next to App Secret textbox. Copy the value that appears in the textbox and replace the current "ClientSecret" value in Web.Config file.

AppSettings in Web.Config file look like this now:


<configuration>


 <appSettings>
    <add key="ClientId" value="f2fb8336-9808-40b9-abe8-5a4e9a7a96fd" />
    <add key="ClientSecret" value="YZs1wblGKXsOsv08+zKaytlWofxs0Gp78wHBkUfpa0Q=" />
   </appSettings>


10. Enter the information in the rest of the textboxes in browser and click on Create button:
SharePoint 2013 Apps

You'll get a confirmation that looks something like this:
SharePoint 2013 Apps

11. Return to your app in Visual Studio and deploy. You'll get this page:
SharePoint 2013 Apps

Success!

Related Content
SharePoint Apps - List Custom FormSharePoint 2013 Apps
Speaker at European SharePoint Conference
Adventures with Napa Apps in SharePoint 2013
SharePoint 2013 App Properties
JavaScript - Office Store App Licensing
JavaScript - Add List with Columns
Use ListView in SharePoint 2013 Apps


Cross-Site Publishing with SharePoint 2013

$
0
0
I created two sites, two separate site collections, one called "devspe13" and the other one called "content". I created a new page called "Seattle" on "devspe13" and a new page called "Seattle" appeared on "content" site.

Yes, I created "Seattle" page on http://devspe13 site:
SharePoint 2013 Cross-Site Publishing

And, I can also see the content of "Seattle" page on http://content site:
SharePoint 2013 Cross-Site Publishing

How it works

It's easy.

I created a Term Set and pages with content on "devspe13" site.

"World" term set that I created on "devspe13" contains metadata:
SharePoint 2013 Cross-Site Publishing
"Site-Collection - devspe13" is set to be accessed by both "devspe13" and "content" sites:
SharePoint 2013 Cross-Site Publishing
I set the navigation on "content" site to use "World" term set (See term managed navigation)
SharePoint 2013 Cross-Site Publishing

Navigation on "devspe13" is defined as structured navigation. I simply created a subsite and called it "US".

Now that navigation on "content" site is set up as Managed Navigation, new pages will be created automatically on "content" site each time a new term is added to the "World" term set on "devspe13" site.

I created pages on "devspe13" site:
SharePoint 2013 Cross-Site Publishing

In short, "devspe13" site is used to create content, while "content" site is used to display content:
SharePoint 2013 Cross-Site Publishing
Pages on "devspe13" are ordinary pages, while pages on "content" site are displayed with Topic page with a Content Search web part.
SharePoint 2013 Cross-Site Publishing

Page about Seattle on "devspe13" has a Title and Page Content fields that are displayed in Content Search web part on "content" site. I also created custom Display Template for Content Search web part in order to show Title and Page Content fields.

Content Location field that is a managed metadata field points to "World" term set with terms such as Seattle and Los Angeles. This field is used by Content Search web part to find the right page to display:
SharePoint 2013 Cross-Site Publishing

It works. When I click on "Los Angeles" on "content" site, Content Search web part displays content about Los Angeles:
SharePoint 2013 Cross-Site Publishing

I found one thing that can be a problem.
I added a picture of Seattle on the "Seattle" page on "devspe13" site:
SharePoint 2013 Cross-Site Publishing

I crawled the content and "Seattle" page on "content" site looked like this:
SharePoint 2013 Cross-Site Publishing

I added the image on "devspe13" site with relative URL "/PublishingImages/seattle2.jpg". This image is presented on "content" site with URL "http://content/PublishingImages/seattle2.jpg".

It is a little problem that can be solved. Off the top of my head, here are some possibilities: you can use absolute URLs for images, or you can choose to store images on "content" site or on entirely different site, or you can make changes in code for custom Display Templates for Content Search web part, or you can make changes to image URLs with JavaScript code.

Related Content
Metadata Driven Navigation
Content Search Web Part and Metadata Driven Navigation
Content Search Web Part, Metadata Driven Navigation, and Display Templates
Customize Content Query Web Part
Search
SharePoint 2013 Publishing

Other Things I Wrote
Speaker at European SharePoint Conference
SharePoint 2013 Small Business Website
Geolocation
SharePoint 2013 Apps
SharePoint SkyDrive
SharePoint 2013 Mobile
MySite
Adventures with Napa Apps in SharePoint 2013




European SharePoint Conference 2013

$
0
0

I'm speaking at the European SharePoint Conference 2013 and I’m delighted to be a part of this fantastic gathering of the SharePoint Community, Feb 4-7 2013, in Copenhagen, Denmark.

My session on “Patterns in Apps for SharePoint Store”, aimed at Developers, is on Wednesday 6th, right after the keynote about apps.

Patterns in Apps for SharePoint Store 
SharePoint Store is a great business opportunity of reaching new markets and taking your business global. This talk is relevant both for developers and decision makers. It is a deep dive on technology and business decisions behind getting your apps and your business into the SharePoint Store. I'll talk about making the most out of SharePoint hosted apps, and pros and cons of making the provider hosted apps. I'll touch on features and web parts built on SharePoint 2010 websites and intranets, and explore the possibilities and technical aspects of building the functionality as SharePoint hosted apps. 


I am speaking alongside renowned experts on SharePoint as well as sharing the stage with some of Microsoft's product team from Redmond covering Search, Apps, Social, Cloud, Project, Migration & Upgrade, Governance and much more. 

With over 110 SharePoint sessions, keynotes, hands on labs, SharePoint Shootouts, ask the experts, community lounge, tutorials, Europe's largest SharePoint focused expo, SharePints, parties, meetings, networking events, competitions and more....  this is a MUST attend event for all SharePoint enthusiasts! Check out the full Conference Programme to see all sessions and topics that are being covered by myself and many others.

Prices start as low as €995! There is also special group discounts for bookings of 3 or more people.



Book Now and I’ll see you in Copenhagen this February.


Things I Wrote
SharePoint Apps - List Custom Form
SharePoint 2013 Provider App hosted on Office 365
SharePoint 2013 Apps
Use ListView in SharePoint 2013 Apps
SharePoint 2013 App Properties
Adventures with Napa Apps in SharePoint 2013
Cross-Site Publishing
Content Search Web Part, Metadata Driven Navigation, and Display Templates




SharePoint 2013 List Custom Form

$
0
0
You can add a custom list to a SharePoint 2013 app. You can add columns and views. You can also add custom list forms. The hardest part in adding custom list forms is getting the right URL to the custom form files and JavaScript files. 

How it works 
I made a SharePoint-hosted app in Visual Studio and added a list called TestList:
SharePoint 2013 List Custom Form

I also added a custom edit form called testedit.aspx, right next to Schema.xml file:
SharePoint 2013 List Custom Form

Then - this is very important -  I set testedit.aspx file to deploy as "ElementFile":
SharePoint 2013 List Custom Form

I opened Schema.xml file for TestEdit list, and changed the reference to the default list edit form.
References to default new, edit, and display form files are in the Forms section in the bottom of Schema.xml file:


<Forms>
      <Form Type="DisplayForm" Url="DispForm.aspx" SetupPath="pages\form.aspx" WebPartZoneID="Main" />
      <Form Type="EditForm" Url="EditForm.aspx" SetupPath="pages\form.aspx" WebPartZoneID="Main" />
      <Form Type="NewForm" Url="NewForm.aspx" SetupPath="pages\form.aspx" WebPartZoneID="Main" />
</Forms>

I changed it to:



<Forms>
 <Form Type="DisplayForm" Url="DispForm.aspx" SetupPath="pages\form.aspx" WebPartZoneID="Main" />
 <Form Type="EditForm" Url="TestEdit.aspx" Path="testedit.aspx" WebPartZoneID="Main" UseLegacyForm="FALSE"  />
   <Form Type="NewForm" Url="NewForm.aspx" SetupPath="pages\form.aspx" WebPartZoneID="Main" />
</Forms>


Notice that I changed SetupPath, a reference to a default SharePoint edit form to Path.
I also added UseLegacyForm="FALSE". When UseLegacyForm is set to "FALSE", SharePoint adds a default list web part to a custom edit form page. SharePoint adds the web part to a web part zone with ID="Main".

Right now, all I have to do is make sure that testedit.aspx has a web part zone with ID="Main":


<asp:Content ID="Content4" ContentPlaceHolderId="PlaceHolderMain" runat="server">
 <WebPartPages:WebPartZone runat="server" FrameType="None" ID="Main" Title="loc:Main" />
</asp:Content>

If you I wondering where did I get code for testedit.aspx file, I searched 15 hive for default edit form and I actually found one I could reuse.
It is quite simple and I could use the same file for edit, new, and display form. It has following references:

<%@ Page language="C#" MasterPageFile="~masterurl/default.master"    Inherits="Microsoft.SharePoint.WebPartPages.WebPartPage,Microsoft.SharePoint, Version=15.0.0.0, Culture=neutral,PublicKeyToken=71e9bce111e9429c"  %>
<%@ Register Tagprefix="SharePoint" Namespace="Microsoft.SharePoint.WebControls" Assembly="Microsoft.SharePoint, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %> <%@ Register Tagprefix="Utilities" Namespace="Microsoft.SharePoint.Utilities" Assembly="Microsoft.SharePoint, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %> <%@ Import Namespace="Microsoft.SharePoint" %> <%@ Assembly Name="Microsoft.Web.CommandUI, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %> <%@ Register Tagprefix="WebPartPages" Namespace="Microsoft.SharePoint.WebPartPages" Assembly="Microsoft.SharePoint, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>

It has PlaceHolderPageTitle, PlaceHolderPageTitleInTitleArea, PlaceHolderPageImage, PlaceHolderMain, and PlaceHolderAdditionalPageHead content placeholders.

In conclusion, by changing the code in Schema.xml, I added a custom edit form to TestList. It works in the same way as the default edit form.
Then, I copied the testedit.aspx file and renamed it to testdisplay.aspx. I changed the reference to default display form to:


<Forms>
 <Form Type="DisplayForm" Url="TestDisplay.aspx" Path="testdisplay.aspx" WebPartZoneID="Main" UseLegacyForm="FALSE"/>
  <Form Type="EditForm" Url="TestEdit.aspx" Path="testedit.aspx" WebPartZoneID="Main" UseLegacyForm="FALSE"  />
   <Form Type="NewForm" Url="NewForm.aspx" SetupPath="pages\form.aspx" WebPartZoneID="Main" />
</Forms>


testdisplay.aspx form is defined as Type="DisplayForm" and SharePoint adds display form view to "Main" web part zone.

There is no point in changing the names of the forms, and not doing anything else. But, it is a start.

I added a custom button to testedit.aspx form:

<input type="button" class="ms-ButtonHeightWidth" value="Count Money" onclick="CountMoney();" />

Then, I added a reference to custom JavaScript file to testedit.aspx. Custom JavaScript file is saved in Scripts folder and the reference to the files in this folder has an extra "../" compared to a reference to files in Scripts folder from SharePoint app pages. My code in testedit.aspx looks like this:


<asp:Content ID="Content5" ContentPlaceHolderId="PlaceHolderAdditionalPageHead" runat="server">
<script type="text/javascript" src="../../Scripts/test.item.js"></script>
</asp:Content>

I can write CountMoney() function in test.item.js now. We all now how to count money, so I'm going to skip that part.

Custom testedit.aspx form will still work as default edit form, but I'll be able to execute JavaScript code and change the default behavior. The extra button is added below the "Main" web part zone.

But, what about testdisplay.aspx? I changed UseLegacyForm to "TRUE":

<Forms>
 <Form Type="DisplayForm" Url="TestDisplay.aspx" Path="testdisplay.aspx" WebPartZoneID="Main" UseLegacyForm="TRUE"/>
  <Form Type="EditForm" Url="TestEdit.aspx" Path="testedit.aspx" WebPartZoneID="Main" UseLegacyForm="FALSE"  />
   <Form Type="NewForm" Url="NewForm.aspx" SetupPath="pages\form.aspx" WebPartZoneID="Main" />
</Forms>


The result is an empty form. So I changed the code in Schema.xml file to:

<Form Type="DisplayForm" Url="TestDisplay.aspx" Path="testdisplay.aspx" WebPartZoneID="Main" UseLegacyForm="TRUE"/>
<ListFormBody>
</ListFormBody>
<ListFormButtons>
</ListFormButtons>
</Form>

The code that I write in ListFormBody section will be shown as web part body, while the code in ListFormButtons section will be displayed as control buttons.

Here is the code that displays list item Title (Sorry for the <table> code. It is an excerpt from default form html):



<ListFormBody>

<HTML><![CDATA[<table class="ms-formtable" style="margin-top: 8px;" border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td nowrap="true" valign="top" width="113px" class="ms-formlabel"><h3 class="ms-standardheader">Title</h3></td><td valign="top" class="ms-formbody" width="350px" id="SPFieldText">]]></HTML>
 <Field Name="Title" ></Field>
<HTML><![CDATA[</td></tr></table>]]></HTML>

</ListFormBody>


The form would also work with:
<ListFormBody>

 <Field Name="Title" ></Field>
</ListFormBody>

The rest is html wrapped in
<HTML><![CDATA[   

]]></HTML>


The code for button works in the same way:

 <ListFormButtons>
  <![CDATA[<div id="btnCountMoney" style="float:right;">
    <input type="button" class="ms-ButtonHeightWidth" value="Count Money"  onclick="CountMoney();" />
    </div> ]]>
</ListFormButtons>


All I have to do now is to reference test.item.js file and my custom display form will work.

If you are not thrilled by xml, and ListFormBody and ListFormButtons, you can always add your own HTML controls to custom forms such as testedit.aspx and testdisplay.aspx and write JavaScript code.

Related Content
SharePoint 2013 Apps
Speaker at European SharePoint Conference
SharePoint 2013 Provider App hosted on Office 365
JavaScript - Add List with Columns
SharePoint 2013 App Properties
Adventures with Napa Apps in SharePoint 2013
Use ListView in SharePoint 2013 Apps

Other Things I Wrote
Cross-Site Publishing
SharePoint 2013 Channels
Metadata Driven Navigation
Content Search Web Part and Metadata Driven Navigation
Geolocation
Customize Content Query Web Part




SharePoint Quick Poll App

$
0
0
QuickPoll app is SharePoint 2013 app, available for purchase at Office Store.
QuickPoll app is simple and easy way to create quick polls and get answers from users. 

How it works
QuickPoll app is best explained by following three use scenarios:
1. Site author adds new quick poll question 
2.Quick poll question is displayed in App Part, answered, and statistics over answers is displayed
3. Site author looks at statistics for past quick polls


SharePoint QuickPoll


Use scenario number 1 and 3 are reserved for site authors that have access to Site Contents and QuickPoll’s start page. Start page is used for QuickPoll management tasks such as adding new quick poll questions, and monitoring quick poll statistics over user responses. 

Use scenario number 2 is handled by QuickPoll’s App Part that is used to display the latest quick poll question and gather user feedback.

The straight arrows are showing data flow in the QuickPoll app. When new quick poll question is created, it is automatically displayed on page with QuickPoll App Part, ready for user feedback. All user feedback is saved, and statistics over past quick polls is accessible at all times.

The curved arrows are showing the perpetual actions of creating new quick polls, and answering the quick poll questions.

Why did I build QuickPoll as an app?
Both customers with SharePoint based public facing sites and customers with SharePoint based intranets, have asked about possibility to create short surveys with one question at the time. None of the customers found SharePoint out-of-box list functionality to be a perfect solution for a quick poll.

QuickPoll app sounds like a simple app: 
One quick poll question with range of answers. When question is answered, statistics over answers is displayed. 

QuickPoll app solves that challenge. It offers following features:
- You can create quick polls and get statistics over answers on your site.
- You can use the app on news article page or next to video on the page to get input/feedback from users.
- You can allow users to vote just once, or let them answer the question as many times they want.
- You can get results to your past polls.
- You don't have to update the App Part that shows the latest question. It automatically displays the   latest question.
- You can change the text of the "OK" button.

Before I went building the QuickPoll app, I looked at possibility of using SharePoint out-of-box Survey list as solution for a quick poll. It allows end-users to create questions, it allows users to vote once, and it provides the statistics over answers (survey replies).

I found many challenges for using Survey list as quick poll:
- Look and feel for end-users: Survey list doesn’t display the latest question. The view that displays the latest question has to be developed as custom web part or app part.
- Functionality for end-users: Survey list allows users to answer only once per list, not per question.
- Administration: Survey questions are not limited to multiple choice type – a range of answers that is required for a quick poll. Each question in Survey list is a column. Limiting a Survey list to only choice columns would require developing custom templates with custom forms.
- Administration: If we use new Survey list for each question instead of using one single list, the website author would be forced to create new list, configure the list, delete the survey view on the website, and add new survey view, for each new question.
- Performance: Survey list will grow large very fast, if we use the same list for all questions. If we have a user scenario with one question a week and 500-1000 users answering the question. That will affect the performance of a quick poll in a negative way.
- Look and feel for end-users: Statistics over latest question is not displayed as a statistics over responses on latest question. 
- Look and feel for end-users: Statistics is displayed as bar chart. Other views such as pie chart view have to be developed as custom web part or app part.
- One answer per question feature: Users are anonymous on public facing sites and can’t be tracked with out-of-box list functionality.

The challenges are numerous. There are also the ones that QuickPoll app should solve:
- Look and feel for end-users
- Answer once per question
- Adding new questions as multiple choice questions
- Adding new list for each new question and setting up the app part to display the latest question
- Statistics over responses should be displayed after user answers the question
- Look and feel and overall design for displaying questions and statistics

The quick poll solves all these challenges by implementing a custom user interface that handles:
- adding new questions, 
- custom app part for displaying the latest question and statistic

"Adding new questions" custom user interface solves these challenges:
- Adding new questions as multiple choice questions:
- Adding new list for each new question and setting up the app part to display the latest question

Custom app part for "displaying the latest question and statistic" solves these challenges:
- Setting up the app part to display the latest question
- Answer once per question
- Statistics over responses should be displayed after user answers the question
- Look and feel and overall design for displaying questions and statistics


I describe the new app model in the following. I start with code that makes the QuickPoll app work, and describe the QuickPoll app user experience at the end.

QuickPoll and New Cloud App Model
QuickPoll app is implemented as SharePoint-hosted app, made with JavaScript, jQuery, and HTML5. JavaScript, jQuery, and HTML, the code behind the QuickPoll app is light, client-side technology that is not usually considered for building complex business-oriented applications. 

New SharePoint 2013 cloud app model changes that. It allows building apps that make use of SharePoint Application Programming Interface (API) to extend the capabilities of a SharePoint website. 

QuickPoll app uses out-of-box SharePoint Custom lists, and extends the list functionality via SharePoint API. Each quick poll question is a SharePoint out-of-box Custom list. On the other hand, all user input, all three use scenarios, creating new quick polls, voting on polls, or getting the statistics over past quick polls is implemented with JavaScript. Use scenarios that makes the concept and logic of the app behind the “simple and easy” user interface is written in JavaScript. Simple and easy interface that can be used as smart business tool for gathering customer feedback.

QuickPoll App Code Structure 
The result of all app logic being written in JavaScript is a rather complex JavaScript code that takes over the role of code behind (C# or VB) in SharePoint 2013. 

In the following, I describe the code structure that I enforced in order to successfully implement the functionality in the QuickPoll app. 
Example of the code structure that is implemented in QuickPoll App Part (use scenario number 2): 

SharePoint QuickPoll

The functionality described in use scenario number 2 is defined by actions such as find latest quick poll question, display the latest quick poll question, save the answer, and display statistics for the latest question.  The code is categorized in 4 verticals in order to handle the complexity of the code that executes these actions. The 4 verticals are:
-Core: starting point for each of the 4 actions
-Operations: contains code that implements specific operations such as “Query” with list queries, “CRUD” with add/delete list, and add items and list columns
-GUI: contains code that displays outcome of operations on the page
-General: contains code such as “Host style” and “License” that is implemented in all apps regardless of the app logic and function

QuickPoll UX
New cloud app model provides the opportunity to build user experience from start to end. User experience is focused on logic and content of the app, and not on technology in terms of adding or deleting lists. 
QuickPoll app, to start with, has an icon in Site Contents that leads to a start page. The app icon and name is what defines the QuickPoll app.

SharePoint QuickPoll

Start page is used to manage quick poll questions and statistics. The latest quick poll is displayed with QuickPoll App Part. New app model makes it easy to “mask” end-user actions such as creating or deleting lists and columns, and design user experience around actions such as adding new quick poll questions.
With new cloud app model, QuickPoll app is a self-contained application that is not built for a specific site. It is built to be an integral part of the site for end-users. It is immersed into the site. It adopts to look and feel of the site, the theme, background, colors, and font of the site:


SharePoint QuickPoll

QuickPoll App in the Office Store

QuickPoll app is available for purchase in the Office Store. Office Store sets following standards for an app:
-Quality: QuickPoll app is thoroughly tested app that works in all supported browsers
-Global impact:  Quick Poll app is used by wide variety of customers
-Support: Support document is publicly accessible blog site that makes it easy to comment, get help, or influence the future updates of the app

Summary
QuickPoll app is SharePoint 2013 hosted app available at the Office Store. QuickPoll app is made with JavaScript, jQuery, and HTML5. It is based on SharePoint lists, and extends the list functionality via SharePoint API. Each quick poll question is a SharePoint Custom list. All user input, creating new quick polls, voting on polls, or statistics over past quick polls is implemented with JavaScript. JavaScript code is categorized and structured in 4 verticals, core app logic, operations such as create/delete list, user interface code such as drawing the pie chart, and general code such as exception handling. User experience is focused on actions such as adding new quick poll questions, and not on adding or deleting lists. QuickPoll app is an integral part of the site for end-users. It adopts to look and feel of the site, theme, background, colors, and font of the site. It is simple and easy business tool to create quick polls and gather customer feedback with nice colorful pie chart with statistics over responses.

Content Search Web Part, Metadata Driven Navigation, and Display Templates
Cross-Site Publishing
Image Renditions
Geolocation
JavaScript - Add List with Columns
MySite
SharePoint 2013 Publishing
SharePoint SkyDrive

SharePoint 2013 App Master Page

$
0
0
Can an app have a master page. Of course it can! :-)

How it works
Here is a simple example:
I made a SharePoint-hosted app and I already had Default.aspx page in "Pages" module. I added couple of pages to Pages module:
 - ITA.aspx
 - Rules.aspx
The Elements.xml file looks like this:


<?xml version="1.0" encoding="utf-8"?>
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
  <Module Name="Pages">
    <File Path="Pages\Default.aspx" Url="Pages/Default.aspx" />
    <File Path="Pages\ITA.aspx" Url="Pages/ITA.aspx" />
    <File Path="Pages\Rules.aspx" Url="Pages/Rules.aspx" />
  </Module>
</Elements>

I added IT.master to the same "Pages" module. I found the default app.master page in "GLOBAL" folder in 15 hive. I copied the code to the IT.master.
I made changes to Elements.xml file:

<?xml version="1.0" encoding="utf-8"?>
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
  <Module Name="Pages">
    <File Path="Pages\Default.aspx" Url="Pages/Default.aspx" />
    <File Path="Pages\ITA.aspx" Url="Pages/ITA.aspx" />
    <File Path="Pages\Rules.aspx" Url="Pages/Rules.aspx" />
  </Module>
  <Module Name="MasterPages">
    <File Path="Pages\IT.master" Url="_catalogs/masterpage/IT.master"> 
    </File>
  </Module>
</Elements>



I changed the first line of each .aspx page. I changed:
<%@ Page Inherits="Microsoft.SharePoint.WebPartPages.WebPartPage, Microsoft.SharePoint, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" MasterPageFile="~masterurl/default.master" language="C#" %>

to:

<%@ Page Inherits="Microsoft.SharePoint.WebPartPages.WebPartPage, Microsoft.SharePoint, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" MasterPageFile="~site/_catalogs/masterpage/IT.master" language="C#" %>

It works!

I wanted to have navigation, a menu on all pages. I found "PlaceHolderHorizontalNav" in IT.master file.
<asp:ContentPlaceHolder id="PlaceHolderHorizontalNav" runat="server" Visible="true" />

I made new "DIV" tag right after "PlaceHolderSearchArea" and right before "<div id="contentRow">" and moved the "PlaceHolderHorizontalNav" in the new div tag.

Then, I used a simple asp:menu control to show my pages:

<asp:Menu ID="nav" runat="server" MaximumDynamicDisplayLevels="5" Orientation="Horizontal" CssClass="nav">
         <Items>
             <asp:MenuItem NavigateUrl="../../Pages/Default.aspx" Text="Home"></asp:MenuItem>
             <asp:MenuItem NavigateUrl="../../Pages/ITA.aspx" Text="IT Feed">
             <asp:MenuItem NavigateUrl="../../Pages/Rules.aspx" Text="Rules"></asp:MenuItem>
             </asp:MenuItem>
         </Items>
     </asp:Menu>

The code for quicklaunch menu should be placed in <asp:ContentPlaceHolder id="PlaceHolderLeftNavBar" runat="server">:

 <div>
 <asp:SiteMapDataSource
SiteMapProvider="SPNavigationProvider"
               
ShowStartingNode="True"
id="QuickLaunchSiteMap"
StartingNodeUrl="sid:1025"
runat="server"
/>
<SharePoint:AspMenu
id="V4QuickLaunchMenu"
runat="server"
EnableViewState="false"
DataSourceId="QuickLaunchSiteMap"
UseSimpleRendering="true"
Orientation="Vertcal"
StaticDisplayLevels="3"
AdjustForShowStartingNode="true"
MaximumDynamicDisplayLevels="2"
SkipLinkText=""
CssClass="s4-ql" />
</div>


Related Content
SharePoint Apps - List Custom Form
Logging for SharePoint hosted apps
Building SharePoint QuickPoll App
Speaker at European SharePoint Conference
SharePoint 2013 Provider App hosted on Office 365
SharePoint 2013 Apps
Self-hosted Apps List Access with CSOM
Use ListView in SharePoint 2013 Apps
SharePoint 2013 App Properties
Adventures with Napa Apps in SharePoint 2013

Other Thing I Wrote
Content Search Web Part, Metadata Driven Navigation, and Display Templates
Cross-Site Publishing
Image Renditions
Geolocation
JavaScript - Add List with Columns
MySite
SharePoint 2013 Publishing
SharePoint SkyDrive





SharePoint Apps - Logging

$
0
0

SP.Utilities.Utility.logCustomAppError

that is a method to use in SharePoint hosted apps.

It is quite simple - just add few lines to "onFail" function that runs if call across the network experiences an error:


context.executeQueryAsync(
Function.createDelegate(this, this.onSuccess),
Function.createDelegate(this, this.onFail));


function onFail(sender, args) {
    alert('Error:' + args.get_message() + '\n' + args.get_stackTrace());
    logToSharePoint(args.get_message());
}


function logToSharePoint(message) {
    SP.Utilities.Utility.logCustomAppError(context, message);
    this.context.executeQueryAsync();
}


How does it work
I added "s" to the name of my list, so I can get an error when my app calls a non-existing list. Then, after some time, I opened Site Contents and clicked on app "Details":

SharePoint 2013 Logging

Here on app details page, I can see 4 runtime errors. Yes, there is extra "s" in "announcementss":
SharePoint 2013 Logging

Related Content
SharePoit 2013 App Master Page
Building SharePoint QuickPoll App
SharePoint Apps - List Custom Form
Speaker at European SharePoint Conference
SharePoint 2013 Provider App hosted on Office 365
Self-hosted Apps List Access with CSOM
Use ListView in SharePoint 2013 Apps
SharePoint 2013 App Properties
Adventures with Napa Apps in SharePoint 2013
SharePoint 2013 Apps

Other Things I Wrote
Cross-Site Publishing
Content Search Web Part, Metadata Driven Navigation, and Display Templates
SharePoint SkyDrive
SharePoint 2013 Publishing
Image Renditions
SharePoint 2013 Channels
Metadata Driven Navigation
MySite


SharePoint-hosted Apps vs. Cloud-hosted Apps

$
0
0
I've been to many sessions about apps in SharePoint 2013. I have a developer background and I had no problems with coding apps. App hosting, forward lookup zones, app isolation, collocation, multitenancy... they were hard to understand.

Apart from technical stuff, it was hard to understand where data, lists, images are saved.

I understood the technical aspect, an image, a site logo can be saved on Azure. I just didn't understand why and when that scenario is a good idea. Good idea or not, my concern is not only theoretical. At this point in time, an app that is hosted on Azure is called autohosted app. Autohosted apps works only on Office 365. Also, autohosted apps for SharePoint can not yet be submitted and sold at the Office/SharePoint Store.

What can we gain by having an image saved on Azure? SharePoint has libraries and folders to save files. SharePoint is a large library with folders. Is SharePoint going to stop being container for images and documents? Is SharePoint going to die and emerge as information display and gathering platform?

What do I mean by that? Apps are advanced iframes showing data seamlessly, without you as end-user noticing the difference. Apps show data on your site, pages, lists that are saved somewhere else or in the cloud. Are we in the future going to work with libraries that are just advanced iframes? Libraries showing documents that are not really there, documents that are saved somewhere else or in the cloud?

I don't know. ;-)

No more sidetracking. One thing is clear. If you code SharePoint-hosted apps, all images, lists, libraries are saved in SharePoint. You as a developer have to code JavaScript, but you don't have to think about hosting. There is no additional infrastructure. I don't know if your customers care what language you use to code apps, but your customers don't have to think about hosting either.

What about cloud-hosted apps, Provider hosted and Autohosted apps? Why should I code an app as cloud-hosted, and not as SharePoint hosted? I can use C# to code cloud-hosted apps. Yubii! But, I have to pay for additional hosting as long as my customers are using an app.

In these sessions about apps, each time when it came to hosting, I heard that serious apps should be made as cloud-hosted apps. SharePoint-hosted apps can only be simple apps.

Serious app? What does that mean? You are not allowed to laugh while you code? End-users, customers are also not allowed to have fun at all while using the app?

I have no choice, I have to find out what makes a "serious" app. Is it code, app content, or something completely different?

How it works

C# and JavaScript
C# code is object-oriented language and there is no doubt in my mind that it is a better language to code than JavaScript. I also heard that real men do not code JavaScript. What do I know, I'm just a woman.

What about C# in SharePoint? I remember countless examples of developers using StringBuilder to render (display) data on the page. Then there were those developers who learned to create XML and render (display) data with XSLT. In my mind, most of the times, as a SharePoint developer, you fetch data from SharePoint or other sources, you filter the results according to some business logic, and you display the results. There are also those projects where you fetch data and move it or copy it somewhere else. Would you call that "serious" work?

Data access
In SharePoint 2010, there was a clear difference what you could do with client-side code such as JavaScript, and what you could do with C# code. SharePoint 2010 API that you could use with JavaScript covered only SharePoint Foundation. Simply put, if you wrote JavaScript, you could only get and write data to lists.

In SharePoint 2013, SharePoint 2013 API allows you to write JavaScript and get and write data to lists. It also covers Search, Social, Taxonomy, Workflow, Analytics, Sharing, Publishing, eDiscovery, IRM, and BCS.

In SharePoint 2013, when you write JavaScript apps (SharePoint-hosted apps) you can access the same SharePoint data, search, taxonomy, workflow, lists as when you write C# apps (cloud-hosted apps).

The notion, "serious" apps has nothing to do with your ability to get and write data to SharePoint.

Well, there is one difference: you can do remote event receivers with cloud-hosted apps, and you can't do that with SharePoint-hosted apps. But, you can do workflows with SharePoint-hosted apps, and a simple workflow can be made to do the same as event receiver does.

Content
I tried to look back, to find a "serious" SharePoint project I've done. A project that would be a cloud-hosted app.
I remember a project from long time ago, I did some InfoPath in SharePoint. All the girls at the customer's office looked at me as a savior. Boring copying and pasting, searching for information - it was gone. Their manager was also happy. I automated the whole thing, streamlined their business processes. They were happy. I wasn't coding C# though.

I remember several serious projects. There was even a 3rd place in something called Innovation Cup for one of the projects. That was me coding C#. Coding connected web parts, and my code did something smart with lists and certain columns. Lists that were hidden for users, lists and certain columns that ordinary users didn't have permissions to write to. In short, I wrote connected web parts. I did a role based display of list content. I wrote C# code that elevates or impersonates current user most of the time. That should be one point for C#? No, neither C# nor JavaScript written apps for SharePoint can do connections to other apps or web parts, nor they can elevate current user permissions.

Why do we have cloud-hosted apps then?
I can see the point in C# being code-behind and not as visible to end-users as JavaScript is. There are projects, especially project where money is involved, where you don't want end-users to "hack-into" your SharePoint site and approve or write data.

I can also see the point in using C# for apps with business logic longer than few lines of usual filtering of data according to current user's role or department.

Related Content
Building SharePoint QuickPoll App
SharePoint Apps - List Custom Form
SharePoint SkyDrive
Speaker at European SharePoint Conference
SharePoint 2013 Provider App hosted on Office 365
SharePoint 2013 Apps
Self-hosted Apps List Access with CSOM
Adventures with Napa Apps in SharePoint 2013

Other Things I Wrote
Content Search Web Part, Metadata Driven Navigation, and Display Templates
MySite
Cross-Site Publishing
Content Search Web Part and Metadata Driven Navigation
Geolocation
SharePoint 2013 Small Business Website
Customize Content Query Web Part
SharePoint 2013 Channels
SharePoint 2013 Mobile

SharePoint Image Renditions

$
0
0
I already wrote about Image Renditions. I also wrote how to use them with SharePoint 2013 Channels and SharePoint 2013 Mobile.
I really wanted to use Image Renditions.

Blogs about Image Renditions describe how to add Image Renditions manually: "Click on Site Settings...bla bla blah".

SharePoint apps are supposed to be simple and easy to use.

"Click on Site Settings...bla bla blah" doesn't sound "easy".

The other problem is that you do not have a control of Rendition ID when you add an Image Rendition manually. Going through all Image Renditions in code in order to find the one with right ID doesn't sound like something that will boost a performance of an app part or a web part.

How it works
- Image renditions are stored in XML file called PublishingImageRenditions.xml that you can get at "<your site>"/_catalogs/masterpage/Forms/AllItems.aspx
- Image renditions can be added manually on "<your site>"_layouts/15/ImageRenditionSettings.aspx page.

Image Renditions: app
I opened my (custom) app, and there was no PublishingImageRenditions.xml in master page gallery on "/_catalogs/masterpage/Forms/AllItems.aspx" page, and I don't have access to "_layouts/15/ImageRenditionSettings.aspx" page.

Image Renditions: .wsp solution


1. I added new Module to my project in Visual Studio and called it "ImageRenditions"
2. I renamed the "Sample.txt" file to "PublishingImageRenditions.xml"
3. I changed "Elements.xml" file to:

<?xml version="1.0" encoding="utf-8"?>
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
  <Module Name="ImageRenditions">
    <File Path="ImageRenditions\PublishingImageRenditions.xml" Url="_catalogs/masterpage/PublishingImageRenditions.xml" />
  </Module>
</Elements>

I made a copy of PublishingImageRenditions.xml and added new image renditions:
PublishingImageRenditions.xml:


<SiteImageRenditions xmlns="http://schemas.datacontract.org/2004/07/Microsoft.SharePoint.Publishing" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"><NextId>9</NextId><Renditions><ImageRendition><Height>100</Height><Id>1</Id><Name>Display Template Picture 3 Lines</Name><Version>1</Version><Width>100</Width></ImageRendition><ImageRendition><Height>100</Height><Id>2</Id><Name>Display Template Picture On Top</Name><Version>1</Version><Width>304</Width></ImageRendition><ImageRendition><Height>220</Height><Id>3</Id><Name>Display Template Large Picture</Name><Version>1</Version><Width>468</Width></ImageRendition><ImageRendition><Height>68</Height><Id>4</Id><Name>Display Template Video</Name><Version>1</Version><Width>120</Width></ImageRendition><ImageRendition><Height>-1</Height><Id>5</Id><Name>100</Name><Version>1</Version><Width>100</Width></ImageRendition><ImageRendition><Height>-1</Height><Id>6</Id><Name>test</Name><Version>1</Version><Width>320</Width></ImageRendition>
<ImageRendition><Height>-1</Height><Id>7</Id><Name>Width 320</Name><Version>1</Version><Width>320</Width></ImageRendition>
<ImageRendition><Height>-1</Height><Id>8</Id><Name>Width 640</Name><Version>1</Version><Width>640</Width></ImageRendition>
</Renditions></SiteImageRenditions>



Fantastic! It works.
Wait a minute! This is standard SharePoint file. I should call it "wowPublishingImageRenditions.xml" instead, so my custom image renditions are not gone when this file is updated.
Well, I guess this file is not going to be the one that gets updated. What about the image renditions that are put there manually?





SharePoint-hosted Apps vs. Cloud-hosted Apps Part II

$
0
0
I held a session, Pattern in apps for SharePoint Store at the European SharePoint Conference in Copenhagen (Feb 2013). SharePoint-hosted Apps vs. Cloud-hosted Apps Part I is to find here.

I wanted to show app architecture and how it differs from SharePoint full-trust farm solutions. I used a relatively simple solution for IT department as an example.

I made a solution for IT department that allows them to add messages about system maintenance or system failure and show these messages on a corporate SharePoint site.

If this solution was made as SharePoint 2010-style farm solution (or sandboxed solution), it would contain a list instance for IT department to add messages, and a web part to show messages on the SharePoint site:
SharePoint Apps

The same solution for IT department as a SharePoint-hosted app would contain a list instance and App part:
SharePoint Apps

IT department's solution as a Cloud hosted app would contain a list instance, App part, and a website hosting server-side component with code behind:
SharePoint Apps
When deployed on a SharePoint site, SharePoint 2010-style farm solution would have list instance among other lists on a SharePoint site, and web part in Web Part Gallery:
SharePoint Apps

SharePoint-hosted app deployed to a SharePoint site has list instance deployed in isolated APP WEB, while App part is deployed to SharePoint site:
SharePoint Apps

Cloud hosted app deployed to a SharePoint site has list instance deployed in isolated APP WEB, App part is deployed to SharePoint site, and code behind hosted on a website on remote server:
SharePoint Apps


What does it mean?




List instance
- List instances that are deployed within SharePoint 2013 app, are not to be found in Site Contents on a SharePoint site. They are deployed to isolated APP WEB.
- List instances that are deployed with Cloud hosted apps are also deployed to isolated APP WEB.

What about App part?
App part
- App part is an advanced IFRAME that displays a page.
- Pages are in SharePoint-hosted apps deployed to APP WEB
SharePoint Apps

- Cloud hosted apps can have pages that are deployed to APP WEB, and pages that run on website, hosted on remote server
- An App part for cloud hosted app can display an "APP WEB" page or a "website" page
SharePoint Apps


Related Content
SharePoint-hosted Apps vs. Cloud-hosted Apps
SharePoint 2013 Search box and Search Results web parts
Logging for SharePoint hosted apps
Building SharePoint QuickPoll App
SharePoint 2013 Provider App hosted on Office 365
Self-hosted Apps List Access with CSOM
JavaScript - Add List with Columns
Adventures with Napa Apps in SharePoint 2013
SharePoint 2013 Apps
SharePoint 2013 App Master Page

Other Things I Wrote
SharePoint 2013 Channels
Cross-Site Publishing
Content Search Web Part and Metadata Driven Navigation
Geolocation
Content Search Web Part, Metadata Driven Navigation, and Display Templates
Set Image Renditions with XML and Visual Studio
Image Renditions
SharePoint 2013 Mobile
SharePoint SkyDrive
SharePoint 2013 Small Business Website




SharePoint 2013 Search Box and Search Results web parts

$
0
0
I held a session, Pattern in apps for SharePoint Store at the European SharePoint Conference in Copenhagen (Feb 2013). I wanted to show app architecture and how it differs from SharePoint full-trust farm solutions. I used a relatively simple solution for IT department as an example.

I also made a search page in my app and I reused SharePoint 2013 out-of-box Search Box and Search Results web parts.

I searched for word "demo" and I could see a conversation (discussion) and a preview of conversation:
SharePoint Search

Sorry Windows and Microsoft, but I am a "never" girl :-)

One of the results was a Word file, and I could also show a preview of the file:
SharePoint Search

No, that's not my cars. I can't even afford to look at them live :-P

How it works
I opened a site in SharePoint Designer and I clicked on "Site Pages" in "Site Objects". Then I clicked on "Web Part Page" and chose one of the templates:
SharePoint Search

I marked the place in code within a web part zone and I clicked on "Insert" tab in the ribbon.
I added Search Box and Search Results web parts:
SharePoint Search

That's it! Almost finished!

I copied the code:

<WebControls:SearchBoxScriptWebPart runat="server" QueryGroupNamesJson="[&quot;Default&quot;]" UpdatePageTitle="False" StatesJson="{}" ServerIncludeScriptsJson="null" Title="$Resources:Microsoft.Office.Server.Search,SearchBoxScriptWP_Title;" FrameType="None" SuppressWebPartChrome="False" Description="$Resources:Microsoft.Office.Server.Search,SearchBoxScriptWP_Desc;" IsIncluded="True" ZoneID="" PartOrder="4" FrameState="Normal" AllowRemove="True" AllowZoneChange="True" AllowMinimize="True" AllowConnect="True" AllowEdit="True" AllowHide="True" IsVisible="True" DetailLink="" HelpLink="" HelpMode="Modeless" Dir="Default" PartImageSmall="" MissingAssembly="$Resources:core,ImportErrorMessage;" ImportErrorMessage="$Resources:core,ImportErrorMessage;" PartImageLarge="" IsIncludedFilter="" ExportControlledProperties="True" ConnectionID="00000000-0000-0000-0000-000000000000" ID="g_663fd7fb_51a3_4df7_aaac_a92d21c991d6" ChromeType="None" ExportMode="All" __MarkupType="vsattributemarkup" __WebPartId="{663fd7fb-51a3-4df7-aaac-a92d21c991d6}" WebPart="true" Height="" Width=""></WebControls:SearchBoxScriptWebPart>
<WebControls:ResultScriptWebPart runat="server" DataProviderJSON="{&quot;QueryGroupName&quot;:&quot;Default&quot;,&quot;QueryPropertiesTemplateUrl&quot;:&quot;sitesearch://webroot&quot;,&quot;IgnoreQueryPropertiesTemplateUrl&quot;:false,&quot;SourceID&quot;:null,&quot;SourceName&quot;:null,&quot;SourceLevel&quot;:null,&quot;CollapseSpecification&quot;:&quot;&quot;,&quot;QueryTemplate&quot;:&quot;{searchboxquery}&quot;,&quot;FallbackSort&quot;:null,&quot;FallbackSortJson&quot;:&quot;null&quot;,&quot;RankRules&quot;:null,&quot;RankRulesJson&quot;:&quot;null&quot;,&quot;AsynchronousResultRetrieval&quot;:false,&quot;SendContentBeforeQuery&quot;:true,&quot;BatchClientQuery&quot;:true,&quot;FallbackLanguage&quot;:-1,&quot;FallbackRankingModelID&quot;:&quot;&quot;,&quot;EnableStemming&quot;:true,&quot;EnablePhonetic&quot;:false,&quot;EnableNicknames&quot;:false,&quot;EnableInterleaving&quot;:true,&quot;EnableQueryRules&quot;:true,&quot;EnableOrderingHitHighlightedProperty&quot;:false,&quot;HitHighlightedMultivaluePropertyLimit&quot;:-1,&quot;IgnoreContextualScope&quot;:false,&quot;ScopeResultsToCurrentSite&quot;:false,&quot;TrimDuplicates&quot;:true,&quot;Properties&quot;:{},&quot;PropertiesJson&quot;:&quot;{}&quot;,&quot;ClientType&quot;:&quot;&quot;,&quot;UpdateAjaxNavigate&quot;:true,&quot;SummaryLength&quot;:180,&quot;DesiredSnippetLength&quot;:90,&quot;PersonalizedQuery&quot;:false,&quot;FallbackRefinementFilters&quot;:null,&quot;IgnoreStaleServerQuery&quot;:false,&quot;RenderTemplateId&quot;:&quot;&quot;,&quot;AlternateErrorMessage&quot;:null,&quot;Title&quot;:&quot;&quot;}" ItemBodyTemplateId="~sitecollection/_catalogs/masterpage/Display Templates/Search/Item_CommonItem_Body.js" SelectedPropertiesJson="null" HitHighlightedPropertiesJson="[&quot;Title&quot;,&quot;Path&quot;,&quot;Author&quot;,&quot;SectionNames&quot;,&quot;SiteDescription&quot;]" AvailableSortsJson="[{&quot;name&quot;:&quot;Relevance&quot;,&quot;sorts&quot;:[]},{&quot;name&quot;:&quot;Date(Newest)&quot;,&quot;sorts&quot;:[{&quot;p&quot;:&quot;Write&quot;,&quot;d&quot;:1}]},{&quot;name&quot;:&quot;Date(Oldest)&quot;,&quot;sorts&quot;:[{&quot;p&quot;:&quot;Write&quot;,&quot;d&quot;:0}]},{&quot;name&quot;:&quot;Lifetime Views&quot;,&quot;sorts&quot;:[{&quot;p&quot;:&quot;ViewsLifeTime&quot;,&quot;d&quot;:1}]},{&quot;name&quot;:&quot;Recent Views&quot;,&quot;sorts&quot;:[{&quot;p&quot;:&quot;ViewsRecent&quot;,&quot;d&quot;:1}]}]" PreloadedItemTemplateIdsJson="[&quot;~sitecollection/_catalogs/masterpage/Display Templates/Search/Group_Default.js&quot;,&quot;~sitecollection/_catalogs/masterpage/Display Templates/Search/Item_Default.js&quot;,&quot;~sitecollection/_catalogs/masterpage/Display Templates/Search/Item_Site.js&quot;,&quot;~sitecollection/_catalogs/masterpage/Display Templates/Search/Item_Word.js&quot;,&quot;~sitecollection/_catalogs/masterpage/Display Templates/Search/Item_PowerPoint.js&quot;,&quot;~sitecollection/_catalogs/masterpage/Display Templates/Search/Item_Person_CompactHorizontal.js&quot;,&quot;~sitecollection/_catalogs/masterpage/Display Templates/Search/Item_BestBet.js&quot;,&quot;~sitecollection/_catalogs/masterpage/Display Templates/Search/Item_WebPage.js&quot;]" ShowAlertMe="False" QueryGroupName="Default" StatesJson="{}" ServerIncludeScriptsJson="null" Title="$Resources:Microsoft.Office.Server.Search,ResultsScriptWP_Title;" FrameType="None" SuppressWebPartChrome="False" Description="$Resources:Microsoft.Office.Server.Search,ResultsScriptWP_Desc;" IsIncluded="True" ZoneID="" PartOrder="5" FrameState="Normal" AllowRemove="True" AllowZoneChange="True" AllowMinimize="True" AllowConnect="True" AllowEdit="True" AllowHide="True" IsVisible="True" DetailLink="" HelpLink="" HelpMode="Modeless" Dir="Default" PartImageSmall="" MissingAssembly="$Resources:core,ImportErrorMessage;" ImportErrorMessage="$Resources:core,ImportErrorMessage;" PartImageLarge="" IsIncludedFilter="" ExportControlledProperties="True" ConnectionID="00000000-0000-0000-0000-000000000000" ID="g_6fc2abe0_8643_4576_b229_4eceab919c8a" ChromeType="None" ExportMode="All" __MarkupType="vsattributemarkup" __WebPartId="{6fc2abe0-8643-4576-b229-4eceab919c8a}" WebPart="true" Height="" Width=""></WebControls:ResultScriptWebPart>


and I also added "WebControls" on the top of my page:


<%@ Register tagprefix="WebControls" namespace="Microsoft.Office.Server.Search.WebControls" assembly="Microsoft.Office.Server.Search, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>

I also opened AppManifest file and set the permissions:

Scope: Search 
Permission: QueryAsUserIgnoreAppPrincipal

It works :-)

I also tried to configure properties for a Search Box and Search Results web parts.






 I did the following:
1. I created a new page in browser and added Search Box and Search Results web parts.
2. I configured the search results page in properties for Search Box web part. I changed "~site/_layouts/15/osssearchresults.aspx?u={contexturl}" to point to my app's page:
SharePoint Search

3. I configured the links for Search Results web part:
SharePoint Search


4. I exported both web parts
5. I imported both web parts to SharePoint site
6. I opened the site in SharePoint Designer and added the newly imported web parts on a web part page
7. With web parts on the page, you can copy-paste the code into your app's page

Related Content
SharePoint-hosted Apps vs. Cloud-hosted Apps Part II
Content Search Web Part, Metadata Driven Navigation, and Display Templates
SharePoint and Linkedin
Adventures with Napa Apps in SharePoint 2013
SharePoint 2013 Apps
Use ListView in SharePoint 2013 Apps

Other Things I Wrote
Set Image Renditions with XML and Visual Studio
MySite
The Story of SharePoint 2013
SharePoint 2013 Channels
Self-hosted Apps List Access with CSOM
Content Search Web Part and Metadata Driven Navigation




ROI - SharePoint Apps in Office Store

$
0
0
SharePoint Apps



One of new and exciting features that you get with SharePoint 2013 and Office 365 sites is the ability to install and use Apps.

SharePoint apps can have lists, workflows, content types, pages, and they have App Parts that are very similar to Web Parts.

Lists, workflows, pages - we already have that. Do we really need apps?

Yes! Apps are a good thing. :-)

Apps run isolated from your SharePoint farm. Code, lists, workflows that are installed with apps run isolated from SharePoint native code, lists, and workflows. Apps do not affect your SharePoint site's performance, and you can monitor number of app installs, install and runtime errors, server resource consumption...

Apps run isolated from SharePoint, they are installed and uninstalled on a SharePoint site, they are not deployed directly to a SharePoint Server farm.

Apps are also available at the Store. Microsoft's Office and SharePoint App Store.

All apps that are available at the Store are tested and validated by Microsoft.

Apps at the Store are tested for at their description is in accordance with what they do.

Apps at the Store are free of errors and viruses.

Apps at the Store run on all supported browsers; IE8, IE9, IE10, Firefox, and Chrome.

Apps at the Store are built for wider audience and more cost effective than custom solutions built for a customer.

Free apps, paid apps, in-product apps, in-app purchases apps

Free apps: Apps at the Store can be free of charge. Free apps might contain ads though.

Paid apps: Paid apps have a fixed price per number of users. An app can cost 10$ per user or 10$ per 1000 users. Paid apps can also have a trial period. Microsoft is working on subscription based model too.

In-product apps: In-product apps are in fact an ad or a connector for a software product that you most probably have to purchase in order to use the app.

In-app purchase apps: Apps can be used to sell other products or apps.

SharePoint-hosted apps, Cloud hosted apps

At this point of time, you can only purchase SharePoint-hosted apps, and Provider hosted apps at the store.

SharePoint-hosted apps: Apps written with JavaScript that do not require additional hosting infrastructure.

Provider hosted apps: Apps that contain code-behind that is hosted on a server outside your SharePoint environment.

App categories
Apps at the store are divided into categories, such as Communication, Productivity, Content Management and so on.

Related Content
SharePoint 2013 Apps
SharePoint-hosted Apps vs. Cloud-hosted Apps
SharePoint-hosted Apps vs. Cloud-hosted Apps Part II
Building SharePoint QuickPoll App
Speaker at European SharePoint Conference
Adventures with Napa Apps in SharePoint 2013
Self-hosted Apps List Access with CSOM
Simply Intranet - Upgrade to SharePoint 2013

Other Things I Wrote
MySite
SharePoint 2013 Mobile
Metadata Driven Navigation
Script Editor and Embed Code
Image Renditions
Content Search Web Part, Metadata Driven Navigation, and Display Templates
SharePoint and Linkedin
SharePoint SkyDrive




Ups, I sold an app to 1 billion people!

$
0
0
SharePoint Apps



Ups, I sold an app to 1 billion people!!!

No, I didn't :-)

I do have a SharePoint app (10 apps actually) at the Store for Office and SharePoint Apps.

I enjoy building apps. First I get an idea, then I code the app, style the app, test the app. At the end I do a support document, text, images, and video to present the app for potential customers.

I talked about apps with many developers and they were all listening me talking about hosting, app ideas, JavaScript, yada yada yada. The second I mention app price, start talking about how 1000 users are not that many of potential 1 billion users, they all get interested. Perfectly understandable.

Thinking and dreaming about 1000 users, about money can be a nice way to spend an afternoon. I don't do it though. I try to think about selling my app to 1 billion people. Yes, 1 billion people.

1 billion is an absurdly large number. Chances that I will sell my app to 1 billion people are 1:100000000 or something. Not going to happen. That silly number, 1 billion, is a good number. It removes my perfectly understandable greed for money, and lets me think more clearly.

What will happen if I sell an app to 1 billion people?

Would it be enough to set the price for my app to 1$ ? 1 billion dollars is a lot of money. I could by a lot of shoes for that.

Would it be the same app, supporting all languages, working smoothly on all platforms, also versions of Windows and browsers that are still yet to come?

How many people out of 1 billion will call me for support?

If I use 3rd party services, access to data or hosting services, how much is all that going to cost me?

People will also expect more from me. More fantastic 1$ apps. I'm good at saying "no", but 1 billion people calling me terrible things can be a burden.

Some people will suddenly start to think that I have a lot of money and they could join people that think I'm a terrible, and I'll have to buy house with high fence and security system.

No. 1$ is not high enough.

Related Content
SharePoint Apps in Office and SharePoint Store
SharePoint-hosted Apps vs. Cloud-hosted Apps
SharePoint-hosted Apps vs. Cloud-hosted Apps Part II
SharePoint 2013 Apps
Adventures with Napa Apps in SharePoint 2013

Other Things I Wrote
Design Manager
The Story of SharePoint 2013
Simply Intranet - Upgrade to SharePoint 2013
Image Renditions
Customize Content Query Web Part
Content Search Web Part and Metadata Driven Navigation




SharePoint Branding - Themes

$
0
0
SharePoint Apps


SharePoint branding. It is difficult. It can't be done.

This is something I hear very frequently. I usually say that I don't agree. Most of the people look at me strangely. Of course, they know better. Well, I don't really care. That kind of talk can get me mad. I never give up, and I'm very positive, and the idea of talking about things like "we are victims suffering" turns all my lights on and makes me mad.

 I've done branding on many SharePoint sites, and I've got compliments such as "You removed all SharePoint!", and "That was fast!". Yes, I get bored, if it takes too long.

I'm not a front-end developer, and on all the sites I've done styling and branding, I also coded things like web parts and timer jobs. That also means that when talking to front-end developers about things that are different in SharePoint, I have no idea what they are talking about. I've never learned "the right way". ;-)

I remember long long time ago that I had my "SharePoint 2003 master stylesheet" and I was able to do branding in two days. Well, one day, and I worked at home the other day. 

I started on Office and SharePoint 12 TAP (Technical Adoption Program) and moved to SharePoint 2007 in March 2006, and fortunately never returned to SP 2003 since. With SharePoint 2007, my approach to branding changed. Suddenly, branding was not only colors, fonts, web part headers, navigation, and top part of the site. Suddenly, branding was also master page, page layouts, and HTML. I hate HTML.

What about branding in SharePoint 2013?

It is difficult. It can't be done. ;-)

There are 3 levels of branding in SharePoint 2013 :
1. level: Themes: fonts and colors
2. level: Master Page: change the top part of the site and navigation
3. level: Page Layouts 

2. and 3. level require knowledge of HTML and SharePoint controls and functionality

Theme, the 1. level is something that can be done by super users or graphic designers. There is no need to know HTML and SharePoint controls.

There is a link "Change the Look" link in Site Settings, that opens a page where you can easily pick up a color or font scheme, and apply it to your site.

SharePoint Themes

A good thing about this approach is that you can always go back to the original theme. Another good thing is that you can actually change how your SharePoint site looks like in matter of minutes.

A bad thing about this is that range of colors and fonts that you can pick is limited.
Another bad thing about this is that by choosing "Arial Black" and "Verdana", you choose Site Title font and body text font. You can't define navigation font, or web part headers font.
The same goes for colors schema, you can only choose colors used on the top part of the site and background color. You can't really choose "Accent" colors that are so graciously displayed in the theme preview.

I decided to do something about it and I made a ThemeBuilder app. A tool that helps you define fonts and colors that you then can apply as a theme.

I put various fonts in a simple dropdown. I even made my own color picker when I found out that HTML5 "input type=color" control is only supported in Chrome. I looked on internet for color pickers and they where all complicated, I looked at colors and found out that range of colors from light blue to dark blue, or range of light red to dark red, is actually first grade math: value of red minus something, value of green minus something....

Here is the screenshot of the app. On the left hand side, you can set fonts and colors, and watch the preview of your actions on the right hand side:

SharePoint Themes
I also made a video:


I'm planning to use the app myself. It sure beats looking at color and font scheme codes.
I also sent my dear ThemeBuilder app to Office Store for approval.

Image Renditions
SharePoint 2013 Search box and Search Results web parts




SharePoint JavaScript Multilingual Apps

$
0
0
SharePoint Apps


How do you localize apps?
I do multiple languages in JavaScript code in SharePoint apps. This code is simple and it works for me:

How it works
1. Add languages in AppManifest.xml
SharePoint AppManifest

.resx files are used to localize .xml definitions, while JavaScript files are used to localize text displayed on pages with HTML and JavaScript.

2. Add this code to HEAD part of your page:

   <script type="text/javascript" src="../scripts/Resources.<SharePoint:EncodedLiteral runat='server' text='<%$Resources:wss,language_value%>' EncodeMethod='HtmlEncode' />.js"></script>

Let's say we want to localize word "All" in French:
3. Add Resources.js file to "Scripts" module in your project
4. Add this code to Resources.js:

function Resources_All() { return "All"; }

5. Add Resources.fr-FR.js file to "Scripts" module
6. Add this code to Resources.fr-FR.js:

function Resources_All() { return "Tout"; }

That's all. Use it in variable:

var all=Resources_All();

"var all=Resources_All();" will return "Tout" on French SharePoint sites, and it will return "All" for sites in other languages.

Related Content
Ups, I sold an app to 1 billion people!
SharePoint-hosted Apps vs. Cloud-hosted Apps Part II
Logging for SharePoint hosted apps
SharePoint 2013 App Master Page
Speaker at European SharePoint Conference
SharePoint 2013 Apps
SharePoint 2013 Provider App hosted on Office 365
Use ListView in SharePoint 2013 Apps
Adventures with Napa Apps in SharePoint 2013
Self-hosted Apps List Access with CSOM
SharePoint 2013 App Master Page
SharePoint 2013 App Properties

Other Things I Wrote
SharePoint Branding - Themes
SharePoint Apps in Office and SharePoint Store
Set Image Renditions with XML and Visual Studio
SharePoint Apps - List Custom Form
Content Search Web Part and Metadata Driven Navigation
Simply Intranet - Upgrade to SharePoint 2013
Design Manager
Metadata Driven Navigation
SharePoint 2013 Channels
Install SharePoint 2013
Geolocation



SharePoint Apps Sample Code

$
0
0
SharePoint Apps


IT announcement app is a prototype for solution for IT department. The app was demoed at the European SharePoint Conference in Copenhagen (Feb 2013). I held a session "Patterns in Apps for SharePoint Store".
I talked about making the most out of SharePoint hosted apps, and pros and cons of making the provider hosted apps.


The point in making the same solution both as a SharePoint hosted and provider hosted app is to show the difference between the two app types.

I also made a solution as a Napa app in order to show how different Napa app is from SharePoint hosted apps built in Visual Studio.


How it works
IT announcement app allows IT department to post messages about system maintenance, network problems etc., and show them on a SharePoint site.

ITannouncement: SharePoint hosted app

IT announcements app contains custom content type, custom list, list instance, custom master page, navigation, custom ribbon button, search page with search results, and app part.

App part contains JavaScript code that displays list items.

HostCss.js file applies the look and feel of the site to the app part.

Resources.en-US.js and Resources.da-DK.js show how to localize the text.

The app, with start page and out-of-box list view does pretty much the same as the custom SharePoint 2010-style list. I decided to have more content in this app, I added navigation, quick launch, I added one more list, a discussion board. I also added Contact page whit contact information.

I added a  search page. I wanted IT department to be able to search for similar incidents. I reused search box and search results web part. Search is showing results from all site collections that are part of my Developer site Office 365 tenant.

Sample code can be downloaded from "Apps for Office and SharePoint Samples" site.

IT announcement: SharePoint provider app
IT announcements provider app is actually a SharePoint hosted app with a website. SharePoint hosted app that is deployed in isolated app web, and a website that is hosted on a remote server. It contains custom content type, custom list, list instance, custom master page, navigation, custom ribbon button, search page with search results, and app part.


The provider app uses server side code to display items from the list in the app part. I used "REMOTE WEB" icon to show that code that runs in App Part on my Office 365 tenant is hosted on a VM on my laptop.

Read about how to set up provider app on Office 365 here.

Sample code can be downloaded from "Apps for Office and SharePoint Samples" site.

Related Content
SharePoint 2013 Apps
Speaker at European SharePoint Conference
SharePoint-hosted Apps vs. Cloud-hosted Apps
SharePoint-hosted Apps vs. Cloud-hosted Apps Part II
Logging for SharePoint hosted apps
SharePoint Multilingual Apps
SharePoint Branding - Themes
Ups, I sold an app to 1 billion people!
Use ListView in SharePoint 2013 Apps
Self-hosted Apps List Access with CSOM
Building SharePoint QuickPoll App

Other Things I Wrote

Geolocation
Adventures with Napa Apps in SharePoint 2013
SharePoint 2013 Channels
MySite
SharePoint 2013 Mobile
Customize Content Query Web Part
Content Search Web Part and Metadata Driven Navigation
SharePoint 2013 Publishing
SharePoint SkyDrive
SharePoint 2013 Small Business Website
Simply Intranet - Upgrade to SharePoint 2013







SharePoint Analytics

$
0
0
SharePoint Analytics

Analytics in SharePoint 2013 is part of search. In other words, analytics in SharePoint 2013 is used to make search better, to make Content Search web part work better, and to improve search experience and search results.

What about number of daily visits, tracking and measuring clicks and user behaviour for the specific time period?

Nope. You can't do that. You need 3rd party software such as Google Analytics for that.

What about a SharePoint based solution?

The search and analytics data is made available through REST and CSOM APIs. It means that I can access search and analytics with JavaScript and implement a solution as a SharePoint-hosted app.

I looked into search data, I looked into search results data. I found out that search data contains information about number of views for a specific site or document, and it contains information about number of recent views.

I decided to use that data about number of views and number of recent views, and make an Analytics app.
The app doesn't measure clicks and user behaviour, but it can still be used as a tool to track and improve the quality of the site content.


Analytics app displays top 100 search results. Search results are available for different kind of results:
-All content,
-Documents,
-Recently viewed content,
-Least viewed content,
-Content sorted by size, and
-Content on the current site.


I made different sorting options, such as “Least viewed” and “Size” to allow site authors to use the app also as a content maintenance tool. Content maintenance tool that displays content that no longer is relevant, and takes a lot of space.

Also, site authors can save the search results to a library as .csv file and manage the data in Excel. Nobody thought of saving the search results to Excel file in SharePoint 2010! :-)
It doesn't sound like a complete madness in SharePoint 2013. It allows you to keep and process the number og views over a period of time.

Related Content
Search
SharePoint 2013 Apps
Content Search Web Part, Metadata Driven Navigation, and Display Templates

Other Things I Wrote
SharePoint 2013 Publishing
MySite
Building SharePoint QuickPoll App
SharePoint Branding - Themes
SharePoint SkyDrive




SharePoint Branding - Themes, Master Pages, and Page Layouts

$
0
0
SharePoint Apps

SharePoint 2013/Office 365 Branding - Themes, Master Pages, and Page Layouts

You probably know the story. A company wanted a website based on SharePoint. A company looked at standard out-of-box SharePoint. A company decided to change everything. A company payed lots of money to change everything.

Companies still want a website based on SharePoint. Does the ending to the story change with SharePoint 2013?

Let's take in from the start.
1. A company want a website based on SharePoint.

You know how your new site is going to look like. You probably have a graphic designer or connection to a company that can come up with a fine design made in Photoshop or Illustrator.

2. A company looked at standard out-of-box SharePoint. Their fine new design doesn't look like out-of-box SharePoint site. Yes, what to do with that nice Photoshop or Illustrator picture?

I think that we have to divide the "don't look like SharePoint" problem in smaller more tangible problems in order to solve it.
We have to divide look and feel into:
- Theme:
     - we want our logo
     - we want our colors
     - we want our fonts
     - we want background image
- Master Page:
     - we want another navigation
     - we want links on the top
     - we want footer on every page
     - we want a big banner on the top
     - we want breadcrumb
 - Page Layouts:
     - we want more content zones on the page
     - we want a content zone on the right for related links and content
 - Styling
    - we want 20px or 30px margins
    - we want larger headings (H1,H2,H3..)
    - we want border around content

3. A company payed lots of money to change everything. Yes, we all want to change that :-)
In the following, I describe "the old way" as a way we've done branding with SharePoint 2010, and I describe "the new way" as a way you also can do branding with SharePoint 2013. You can mix the new and old ways as much as you want :-) You can also decide that you only want different Theme, or that you want Theme and Page Layouts. It is completely up to you.

Theme:
SharePoint 2013 comes with a very nice feature "Change the look" that enables you to set the fonts, background image, and colors. You don't need knowledge of HTML. I wrote about SharePoint Themes in my post SharePoint Branding - Themes. I also recommend ThemeBuilder app at Microsoft Office Store that helps you define colors and fonts.

Master Page:
At this point of time, there are two ways of changing the master page:
- The old way: taking a copy of existing one and changing the parts you want to change. You need both HTML and SharePoint skills to do that.
- New in SharePoint 2013: Use Design Manager: you need your whole site made with HTML, and than you need to use time to implement the design.

Page Layouts:
There are two ways to do page layouts:
- The old way: Hire somebody to do that.
- New in SharePoint 2013: You can buy layouts as an app. I made Simple Pages app 12 ready to use page layouts for Office 365 Small Business  public facing site.

Styling:
There is only the old way - making a special stylesheet with special styles to define headings or borders.

Related Content
Design Manager
SharePoint Branding - Themes
SharePoint 2013 Apps

Other Things I Wrote
SharePoint 2013 Mobile
SharePoint 2013 Publishing
SharePoint SkyDrive
SharePoint 2013 Small Business Website
MySite
Metadata Driven Navigation



















SharePoint App Checklist

$
0
0
SharePoint Apps

What do you need to submit your app to the Office Store? An app that works on a dev site?

Yes. But, that is not enough. You also need a paid subscription for Office 365 Developer site. But, that is not enough.

Here is a recipe (or a checklist for those that don't like kitchen stuff) of things you need to submit your app to the Office Store.

- 1 app
- 1 to 5 App preview image(s)
- 1 Short and 1 long description of your app
- 1 Publicly available support document
- 1 Price
Optional: video of your app

An app
Before you press F5 and get the latest .app package, check out these:
- App icon: Don't settle for the default AppIcon.png
- App name and version: sounds trivial, but app name and version from AppManifest has to match the app name and version that you write in the form. SlideShow app name is not "Slideshow". App version is probably not "1", but "1.0.0.0"
- App permissions: "Full Control" is not allowed!
- Debug/Release configuration: It's a shame to submit "Debug"
- Supported locales: check in AppManifest. You need at least one
- Browser support: Open your app in IE10, IE9, IE8, Firefox, and Chrome and click through it. If it doesn't work and you can't fix it, write it down in app description

App preview image
You need at least one preview image. It has to be 512x384px. You can submit up to 5 preview images.
Look at other apps in Office Store - when you click on an app, the image on the left is the "preview image".

Short and long description of your app
- You have to describe what your app does and doesn't do.
- Description is text only. No links, no fancy stuff.
- Short description is limited to 100 characters. You can submit an app with short description longer than 100 characters, but it will be returned with short description on list of errors.

Publicly available support document 
You have to provide URL to a page with support information about your app

Price 
Your app can be free or for purchase. If your app is not free, you can decide to sell your app with a trial period. You can also decide to sell your app without a trial period. App price is set per user. Your app can for example cost 99.99$ per 1 user, or 99.99$ per 1000 users.


Related Content
Ups, I sold an app to 1 billion people!
Adventures with Napa Apps in SharePoint 2013
SharePoint Apps Sample Code
SharePoint Branding - Themes, Master Pages, and Page Layouts
SharePoint Apps in Office and SharePoint Store
SharePoint-hosted Apps vs. Cloud-hosted Apps
Building SharePoint QuickPoll App
SharePoint Apps - List Custom Form
SharePoint 2013 Apps
SharePoint 2013 Provider App hosted on Office 365

Other Things That I Wrote
Simply Intranet - Upgrade to SharePoint 2013
SharePoint Branding - Themes
SharePoint 2013 Publishing
SharePoint 2013 Channels
The Story of SharePoint 2013
Geolocation
SharePoint 2013 Small Business Website
SharePoint and Linkedin
SharePoint SkyDrive
Customize Content Query Web Part
MySite
SharePoint 2013 Search box and Search Results web parts






Viewing all 174 articles
Browse latest View live




Latest Images