Tuesday, November 5, 2013

Customize list views and forms using client-side rendeing in SharePoint 2013

http://code.msdn.microsoft.com/office/SharePoint-2013-Customize-0663543f
http://msdn.microsoft.com/en-us/library/jj220061.aspx
http://elczara.wordpress.com/2013/09/06/client-side-rendering-in-new-form-for-sharepoint-online-and-on-premise/
http://elczara.wordpress.com/2013/08/28/client-side-rendering-in-view-form-for-sharepoint-online-and-on-premise/
vs2012->file->new->project c# ->office/SharePoint->apps->apps for SharePoint 2013-> "AnnouncementCSR"
Click on 'Ok' Button
Click on 'Validate' Button 
Click on 'Sign-In' Button
Click on 'Finish' Button.
AnnouncementCSR -> Right Click -> Add -> New Item -> Select 'List' Template and name it as 'Announcements' 
Click on 'Add' Button
Click on 'Finish' Button.

AnnouncementCSR -> Scripts -> add "AnnouncementsCSR.js"
and add below javascript to AnnouncementsCSR.js file
(function () {
    overrideAllItems();
    overrideNewForm();
})();

function overrideAllItems() {
    var allItemsOverride = {};
    allItemsOverride.BaseViewID = 1;
    allItemsOverride.ListTemplateType = 10000;
    allItemsOverride.Templates = {};
    allItemsOverride.Templates.Header = allItemsRenderAnnouncementsHeader;
    allItemsOverride.Templates.Footer = allItemsRenderAnnouncementsFooter;
    allItemsOverride.Templates.Item = allItemsRenderAnnouncements;

    allItemsOverride.OnPreRender = allItemsOnPreRender;
    allItemsOverride.OnPostRender = allItemsOnPostRender;

    SPClientTemplates.TemplateManager.RegisterTemplateOverrides(allItemsOverride);
}

function allItemsOnPreRender(ctx) {
    //alert("allItemsOnPreRender: " + JSON.stringify(ctx));
}

function allItemsOnPostRender(ctx) {
    // alert("allItemsOnPostRender" + JSON.stringify(ctx));
}

function allItemsRenderAnnouncementsHeader(ctx) {
    var newItemFormUrl = ctx.newFormUrl;
    var newItemLink = "<a onclick='NewItem2(event, '" + newItemFormUrl + "'); return false;' href='" + newItemFormUrl + " target='_self' data-viewctr='0'>New Item</a>";
    return "<div style='border:solid 1px #aaa; padding:4px; background-color: #ddd;' >" + newItemLink + "</div>";
}

function allItemsRenderAnnouncements(ctx) {
    var itemStyle = "width:600px;margin:12px;";
    var titleStyle = "background-color:black;color:white;padding:2px; padding-left:12px;font-size:1.25em;border-top-left-radius:16px";
    var bodyStyle = "border:black 1px solid;background-color:#ddd;color:#333;padding:4px;border-bottom-right-radius:16px";

    return "<div style='" + itemStyle + "'>" +
               "<div style='" + titleStyle + "'>" + ctx.CurrentItem.Title + "</div>" +
               "<div style='" + bodyStyle + "'>" + ctx.CurrentItem.Body + "</div>" +
           "</div>";
}

function allItemsRenderAnnouncementsFooter(ctx) {
    return "<div style='height:4px;background-color:black' />";
}

function overrideNewForm() {

    var newFormOverride = {};
    newFormOverride.BaseViewID = "NewForm";
    newFormOverride.ListTemplateType = 10000;

    newFormOverride.Templates = {};

    newFormOverride.Templates.Fields = {
        'Title': { 'NewForm': newFormTitleField },
    };

    SPClientTemplates.TemplateManager.RegisterTemplateOverrides(newFormOverride);
}


function newFormTitleField(rCtx) {

    var _myData = SPClientTemplates.Utility.GetFormContextForCurrentField(rCtx);
    var _inputId = _myData.fieldName + '_' + _myData.fieldSchema.Id + '_$TextField';

    window.addTitle = function () {
        var autoTitle = "New announcement made at " + (new Date()).toLocaleDateString();
        var titleField = document.getElementById(_inputId);
        titleField.value = autoTitle;

    }

    return "<div style='border:1px solid #ccc;padding:4px;background-color:#eee;'>" +
           "<div><input value='Add Auto Title' type='button' onclick='addTitle()' style='margin:0px;margin-bottom:4px;padding:4px;color:red;backgroundcolor:#bbb;' /></div>" +
           SPFieldText_Edit(rCtx) +
           "</div>";

}

AnnouncementCSR -> Lists -> Announcements -> AnnouncementsInstance -> Elements.xml
add below data to Element.xml
<?xml version="1.0" encoding="utf-8"?>
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
       <ListInstance Title="Announcements"
                             OnQuickLaunch="TRUE"
                             TemplateType="10000"
                             Url="Lists/Announcements"
                             Description="My List Instance">
              <Data>
                     <Rows>
                           <Row>
                                  <Field Name="Title">Microsoft Releases SkyDrive App For Xbox 360</Field>
                                  <Field Name="Body">Microsoft today announced the release of SkyDrive app for Xbox 360 gaming console. This new app will allow you to enjoy the photos and video you upload on SkyDrive from web or apps through Xbox 360.</Field>
                                  <Field Name="Expires">01/01/2014</Field>
                            </Row>
                           <Row>
                                  <Field Name="Title">Microsoft Surface tablet arrives at Best Buy today</Field>
                                  <Field Name="Body">Microsoft's Surface  will be available for sale at Best Buy's Web site today starting at 2 p.m. PT. The device will then make it way to Best Buy retail outlets and select Best Buy Mobile stores this Sunday, December 16.</Field>
                                  <Field Name="Expires">07/15/2014</Field>
                           </Row>
                           <Row>
                                   <Field Name="Title">Microsoft Expands Distribution for Microsoft Surface</Field>
                                  <Field Name="Body"> Microsoft Corp. today announced plans to make Microsoft Surface available at additional retailers as soon as mid-December. In addition, the company announced the extension of the Microsoft holiday stores, including the transition of several of the stores into permanent Microsoft retail outlets.</Field>
                                  <Field Name="Expires">07/15/2014</Field>
                           </Row>
                           <Row>
                                  <Field Name="Title">Microsoft Surface tablets announced, powered by Windows 8</Field>
                                  <Field Name="Body">After days of speculation and rumors, Microsoft's major announcement has just been unveiled at a press event in Los Angeles: a Surface tablet. We suspected the company might be working on its own tablet, and Microsoft CEO Steve Ballmer revealed the device on stage at Milk Studios in Los Angeles today.</Field>
                                  <Field Name="Expires">07/15/2014</Field>
                           </Row>
                     </Rows>
              </Data>
       </ListInstance>
</Elements>

AnnouncementCSR -> Lists -> Announcements -> Schema.xml
 go to <View BaseViewID="1" and change the <JSLink> as 
<JSLink Default="TRUE">clienttemplates.js|~site/Scripts/AnnouncementsCSR.js</JSLink>

go to <View BaseViewID="1" and add ViewFields as follows as 
                           <ViewFields>
                                  <FieldRef Name="Title"></FieldRef>
                                  <FieldRef Name="Body"></FieldRef>
                                  <FieldRef Name="Modified"></FieldRef>
                           </ViewFields>


AnnouncementCSR -> Lists -> Announcements -> Schema.xml
 go to <Forms> tag and add JSLink to DisplayForm, EditForm, NewForm forms as follows 
<Forms>
<Form Type="DisplayForm" Url="DispForm.aspx" JSLink="~site/Scripts/AnnouncementsCSR.js" SetupPath="pages\form.aspx" WebPartZoneID="Main" />
<Form Type="EditForm" Url="EditForm.aspx" JSLink="~site/Scripts/AnnouncementsCSR.js"  SetupPath="pages\form.aspx" WebPartZoneID="Main" />
<Form Type="NewForm" Url="NewForm.aspx" JSLink="~site/Scripts/AnnouncementsCSR.js" SetupPath="pages\form.aspx" WebPartZoneID="Main" />

</Forms>

AnnouncementCSR -> AppManifest.xml
change the start page url as "AnnouncementCSR/Lists/Announcements/AllItems.aspx" 

AnnouncementCSR -> Right Click -> Deploy
Thank You.

No comments:

Post a Comment