EventReceiver - vytvoření kontextového menu

Zadání
potřebuji vytvořit Feature pro aktivaci kontextového menu v aktuálním webu pro knihovnu typu "Kontakt".

Řešení
Vytvořím EventReceiver, který aktivuji pomoci Feature ve Scope = Web. Tzn. akce se založí pouze pro knihovny v aktuálním webu.

Kód EvenReceiveru
FeatureActivated

public override void FeatureActivated(SPFeatureReceiverProperties properties)
{
    SPWeb web = (SPWeb)properties.Feature.Parent;

    SPContentType contentType = web.Site.RootWeb.ContentTypes["Kontakt"];
    SPUserCustomAction action = web.UserCustomActions.Add();

    action.RegistrationType = SPUserCustomActionRegistrationType.ContentType;
    action.RegistrationId = contentType.Id.ToString();
    action.Location = "EditControlBlock";
    action.Sequence = 450;
    action.Title = "Moje menu";
    action.Rights = SPBasePermissions.EditListItems;
    action.Url = "/_Layouts/MojeUrl..aspx";
    action.Update();
}

FeatureDeactivating

public override void FeatureDeactivating(SPFeatureReceiverProperties properties)
{
    SPWeb web = (SPWeb)properties.Feature.Parent;

    SPContentType contentType = web.Site.RootWeb.ContentTypes["Kontakt"];
    foreach (SPUserCustomAction action in web.UserCustomActions)
    {
        if (action.Name != null && action.Title.Equals("Moje menu"))
        {
            action.Delete();
            web.Update();
            break;
        }
    }
}

Odkazy
MSDN: SPUserCustomAction members

SharePoint podpora přímo do Microsoftu

Řešení problémů a rady přímo z Microsoftu.
Top Support Solutions for Microsoft SharePoint Server

HttpHandler - chyba 417

Problém
Po nasazení HttpHandleru se v aplikaci objevila chyba:

The request failed with HTTP status 417: Expectation failed.

Řešení
Upravit Web.Config

<system.net>
 <settings>
  <servicePointManager expect100Continue="false" />
 </settings>
</system.net>

Přidat do kódu:

System.Net.ServicePointManager.Expect100Continue = false;

Odkazy
CodeProject.com: The request failed with HTTP status 417: Expectation failed
MSDN.com: ServicePointManager.Expect100Continue Property

HttpHandler pro SharePoint 2013

Zde je postup, jak vytvořit HttpHandler pro SharePoint 2010/2013.

Založit soubor AjaxHandler.cs

using System;
using System.Web;
using Microsoft.SharePoint;

namespace MyNamespace
{
    public class AjaxHandler : IHttpHandler
    {
        public bool IsReusable
        {
            get { return false; }
        }
         
        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "text/plain";
            context.Response.CacheControl = "no-cache";
            context.Response.AddHeader("Pragma", "no-cache");
            context.Response.Expires = -1;
            context.Response.Write("Vysledek");
        }
    }
}

Založit soubor AjaxHandler.ashx do adresáře Assembly/Layouts/MojeReseni/

<%@ Assembly Name="Microsoft.SharePoint, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Assembly Name="MyDLL, Version=1.0.0.0, Culture=neutral, PublicKeyToken=a8b85743f45aceb0" %>
<%@ WebHandler Language="C#"  Class="MyNamespace.AjaxHandler" %>

Odkazy
Deploying an ASP.NET HttpHandler to SharePoint 2010

Html text v error stránce

Potřeboval jsem zvýraznit v standardní SharePoint chybové stránce určitý text, tzn. poslat na chybovou stránku HTML formátovaný text.

Defaultně to nelze, ale našel jsem řešení.

  1. Najít adresář
    C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\LAYOUTS\
  2. Najít soubor
    error.aspx
  3. Upravit obsah souboru
    > Najít control SharePoint:FormattedString s ID = LabelMessage
    > Zaměnit v EncodeMethod hodnotu HtmlEncodeAllowSimpleTextFormatting za NoEncode
    >
    Uložit

A už to funguje.

Odkazy
Více informací o vlastnostech formátování EncodeMethod

EventReceiver - kontrola duplicity položky

Problém
Mám custom list, kde se vkládají kontakty na firmy. Uživatele vkládají název (povinný údaj), IČ (není povinný údaj) a adresa apod.
Potřebuji kontrolovat, jestli už vložené IČ není někde použito.

Řešení
Použít EventReceiver a třídu ItemAdding.

Kód

public override void ItemAdding(SPItemEventProperties properties)
{
    base.ItemAdding(properties);

    //nacte obsah pole
    var tmp = properties.AfterProperties["FieldIC"];

    //pokud není pole prázdne, pokračuje v kontrole
    if (tmp != null && !string.IsNullOrEmpty(tmp.ToString()))
    {
        SPSecurity.RunWithElevatedPrivileges(delegate()
        {
            using (SPSite site = new SPSite(properties.OpenSite().ID))
            {
                using (SPWeb web = site.OpenWeb())
                {
                    bool isExists = false; 
                    //provést kontrolu, jestli IČ již neexistuje    

                    //pokud záznam existuje, vyhodí vyjimku
                    if (isExists)
                    {
                        properties.Status = SPEventReceiverStatus.CancelWithError;
                        properties.Cancel = true;
                        properties.ErrorMessage = "IČ je již v kontaktech použito.";
                    }
                }
            }
        });
    }
}

SharePoint 2013 - Certifikace

Microsoft Certified Solutions Developer (MCSD)

Potřebné zkoušky:

  • Programming in HTML5 with JavaScript and CSS3
    Exam 70-480, Testy
    Zdroje infromací: W3C CSS3 , W3C HTML5

  • Developing ASP.NET MVC 4 Web Applications
    Exam 70-486, Testy

  • Developing Microsoft SharePoint Server 2013 Core Solutions
    Exam 70-488, Testy

  • Developing Microsoft SharePoint Server 2013 Advanced Solutions
    Exam 70-489, Testy

Více informací na microsoft.com/learning

Microsoft Certified Solutions Expert (MCSE)

Potřebné zkoušky:

  • Installing and Configuring Windows Server 2012
    Exam 70-410, Testy

  • Administering Windows Server 2012
    Exam 70-411, Testy

  • Configuring Advanced Windows Server 2012 Services
    Exam 70-412, Testy

  • Core Solutions of Microsoft SharePoint Server 2013
    Exam 70-331, Testy

  • Advanced Solutions of Microsoft SharePoint Server 2013
    Exam 70-332, Testy

Po splnění zkoušek 70-410, 70-411 a 70-412 obdrží zkoušený certifikát Microsoft Certified Solutions Associate (MCSA): Windows Server 2012.

Více informací na microsoft.com/learning

SharePoint 2013 - CU / SP

Zde je seznam Cumulative Update a Service Pack pro SharePoint 2013. Tento seznam se bude postupně rozšiřovat.

October 2013 update

August 2013 update

June 2013 update

April 2013 update

March 2013 update

SharePoint 2007/2010/2013 - nástroje I.

CAML.NET

Tvorba CAML dotazů. Určeno pro vývojáře.
http://camldotnet.codeplex.com/

Camlex.NET

Tvorba CAML dotazů. Určeno pro vývojáře.
http://camlex.codeplex.com/

SharePoint Dispose Checker Tool

Kontrola kódu. Určeno pro vývojáře,
http://archive.msdn.microsoft.com/SPDisposeCheck

SharePoint Event Receiver Manager (2007 & 2010)

Správa Event Receiverů
http://speventreceiverman.codeplex.com/

SharePoint Solution Installer

http://sharepointinstaller.codeplex.com/

SharePoint Learning Kit

Certifikované e-Learnig řešení.
http://slk.codeplex.com/

AutoSPInstaller

Automatická instalace pomoci PowerShellu.
http://autospinstaller.codeplex.com/

SharePoint log viewer

Prohlížení ULS logů.
http://splogviewer.codeplex.com/

SharePoint OCR image files indexing

IFilter pro SharePoint.
http://wssocr.codeplex.com/

SharePoint 2013 - nástroje I.

SharePoint Online for Office 365: Developer Guide

Příručka pro vývojáře.
http://www.microsoft.com/en-us/download/details.aspx?id=17069

SharePoint Designer 2013

Správa prostředí MS SharePoint 2013.
http://www.microsoft.com/en-us/download/details.aspx?id=35491

O blogu

Tento blog je místem, kde sdílím své zkušenosti, části zdrojových kódů, odkazy apod. Zdroje jsou zaměřeny převážně na problematiku portálového řešení SharePoint a vývoj webů v prostředí Microsoft. Mým cílem není úplně obsahnout konkrétní řešení, ale pouze tu část, kterou potřebuji. Pokud se problematika obsáhlejší, jsou pod článkem odkazy na související informace.

O autorovi

Oldřich Zátopek
Zabývám se vývojem webových aplikací internet/intranet na Microsoft technologiích. Hlavní specializace je SharePoint. LinkedIn