SharePoint: Výpis všech workflow v chybovém stavu přes celou obsahovou databázi

SELECT         dbo.WorkflowAssociation.Id AS AssociationID, dbo.Workflow.InternalState, dbo.Workflow.Status1, dbo.Workflow.Created AS Started, dbo.Workflow.TemplateId, dbo.Lists.tp_Title AS ListTitle, dbo.AllUserData.nvarchar1 as ItemTitle,
                          dbo.Webs.Title AS WebTitle, dbo.Webs.FullUrl AS WebUrl, dbo.Workflow.SiteId, dbo.Workflow.WebId, dbo.Workflow.ListId, dbo.Workflow.ItemId, 
                         dbo.Workflow.ItemGUID, dbo.AllUserData.tp_GUID
FROM            dbo.AllUserData RIGHT OUTER JOIN
                         dbo.Workflow ON dbo.AllUserData.tp_GUID = dbo.Workflow.ItemGUID LEFT OUTER JOIN
                         dbo.Sites RIGHT OUTER JOIN
                         dbo.WorkflowAssociation ON dbo.Sites.Id = dbo.WorkflowAssociation.SiteId LEFT OUTER JOIN
                         dbo.Webs ON dbo.WorkflowAssociation.WebId = dbo.Webs.Id LEFT OUTER JOIN
                         dbo.Lists ON dbo.WorkflowAssociation.ListId = dbo.Lists.tp_ID ON dbo.Workflow.TemplateId = dbo.WorkflowAssociation.Id
WHERE        (dbo.Workflow.Status1 = 1 OR
                         dbo.Workflow.Status1 = 3 OR
                         dbo.Workflow.Status1 = 6 OR
                         dbo.Workflow.Status1 = 7) AND (dbo.Workflow.ItemId > 0)
ORDER BY Started

 

SharePoint: Unable to display this Web Part / System.StackOverflowException: Operation caused a stack overflow

Pokud SharePoint na nějakém webu zobrazuje místo obsahu webparty následující hlášku:

Unable to display this Web Part. To troubleshoot the problem, open this Web page in a Microsoft SharePoint Foundation-compatible HTML editor such as Microsoft SharePoint Designer. If the problem persists, contact your Web server administrator

 [more]

a v ULS logu je výjimka:

Error while executing web part: System.StackOverflowException: Operation caused a stack overflow.
at Microsoft.Xslt.NativeMethod.CheckForSufficientStack()
at SyncToNavigator(XPathNavigator , XPathNavigator )
at (XmlQueryRuntime , IList`1 , Double , XPathNavigator )
at (XmlQueryRuntime , XPathNavigator )
at Root(XmlQueryRuntime )
at System.Xml.Xsl.XmlILCommand.Execute(Object defaultDocument, XmlResolver dataSources, XsltArgumentList argumentList, XmlWriter writer, Boolean closeWriter)
at System.Xml.Xsl.XmlILCommand.Execute(IXPathNavigable contextDocument, XmlResolver dataSources, XsltArgumentList argumentList, XmlWriter results)
at System.Xml.Xsl.XslCompiledTransform.Transform(IXPathNavigable input, XsltArgumentList arguments, XmlWriter results)
at Microsoft.SharePoint.WebPartPages.DataFormWebPart.ExecuteTransform(XslCompiledTransform xslCompiledTransform, XsltArgumentList xmlArguments, Boolean bDeferExecuteTransform)
at Microsoft.SharePoint.WebPartPages.DataFormWebPart.PrepareAndPerformTransform(Boolean bDeferExecuteTransform)

 

Zpracování XSLT trvalo déle než nakonfigurovaná maximální doba, defaultně je pouze 1 sekunda, což na SharePoint s velkým množstvím dat není mnoho Obličej s očima v sloup

PowerShellem je potřebu upravit timeout (počet sekund) maximální délky zpracování XSLT transformací:

$farm = Get-SPFarm
$farm.XsltTransformTimeOut = 5
$farm.Update()

 

a restartovat IIS příkazem IISRESET.EXE

SharePoint–řešení problémů s alerty (emailovou notifikací)

SharePoint má standardně zapnutý limit počtu alertů na jednoho uživatele, tedy kolik si jich maximálně může sám aktivovat – defaultně je toto číslo nastaveno na 500. Počet se sice zdá na jednu stranu rozumný a skoro uživatelsky nemožné, aby si někdo tolik upozornění aktivoval, ale v praxi je u některých agend málo. Příkladem mohou být například interní objednávky, kdy každá interní objednávka má definovaného řešitele pomocí kategorie (kategorii “IT” řeší IT oddělení, správu vozů administrativa, opravy strojů oddělení správy majetku, atd.), to ale znamená, že nechceme notifikovat všechny lidi, kteří mohou objednávky spravovat, tedy řešitele, ale jenom ty, kterých se daná kategorie objednávky týká – k tomu svádí vytvořit programově event receivery po vytvoření objednávky a pro dané uživatele vytvářet programově alerty na změnu položky… Ale tedy u je kámen úrazu, kdy i poměrně malá společnost je schopna vygenerovat více než 500 objednávek na jednoho uživatele, nehledě na to, že limit 500 alertů na uživatele je přes celou webovou aplikaci, kde může být více podobných agend. Vytváření alertů na jednotlivé položky tedy není z dlouhodobého pohledu dobrá cesta, ale pokud už takový nástroj/doplněk máte, nejjednodušší cestou je zvýšení limitu.

 [more]

Zvýšení limitu počtu alertů na uživatele nelze provést v UI, lze pouze příkazovou řádkou:

STSADM.EXE -o setproperty -url http://intranet.devit.cz -pn alerts-maximum -pv 10000

Pokud naopak chcete zjistit aktuálně nastavenou hodnotu, použijte:

STSADM.EXE -o getproperty -url http://intranet.devit.cz -pn alerts-maximum

 

Aktivované alerty jsou uložení v obsahové databázi, pro vypsání všech aktivních “okamžitých” notifikací lze použít SQL dotaz:

select * from [dbo].[ImmedSubscriptions] (nolock)

Případně přímo filtrovat na uživatele dle emailové adresy:

select * from [dbo].[ImmedSubscriptions] (nolock) where UserEmail = ‚novotny@devit.cz‘

SNAGHTMLf208ff

 

Analogicky lze dohledat i aktivní plánované alerty, tedy tzv. souhrnné denní nebo týdenní:

select * from [dbo].[SchedSubscriptions] (nolock)

SPFastDeploy–rozšíření do Visual Studia pro vývoj SP Online

Do nadpisu jsem původně chtěl vložit ještě trefný suffix “pro prodloužení psychického zdraví vývojáře”, protože tento doplněk ve spoustě případů skutečně šetří nervy při deploy změn a testování – kdo nikdy nevyvíjel nic pro SharePoint, nemůže pochopit Obličej s očima v sloup Zatím ale nemám pořádně vyzkoušeno, zdá se to ale slibné.

Dostupné přímo z VS:

image

 

Lze aktivovat i mód automatického deploye po uložení:

SNAGHTML15366872

 

VS doplněk je dostupný buď přímo ze správy Extensions  Visual Studia nebo ke stažení zde:

http://visualstudiogallery.msdn.microsoft.com/9e03d0f5-f931-4125-a5d1-7c1529554fbd

Zjištění zapomenutého hesla aplikačního poolu IIS

V SharePointu 2007 byla v objektu SPApplicationPool vlastnost Password, od verze 2010 je však již označená jako deprecated, heslo se však zpětně dá zjistit příkazem z command line:

 

cmd.exe /c $env:windir\system32\inetsrv\appcmd.exe list apppool „apppoolname“ /text:ProcessModel.Password

 

Stále tedy platí, nezadávejte nikdy a nikde 2x stejné heslo, nikdy nevíte, kdy a kdo ho je schopen přečíst.

 

Zdroj: http://blah.winsmarts.com/2014-5-Find_an_Application_Pool-and-rsquo;s_password.aspx

SharePoint 2013–nasazení farm solution pro SP2013 v compatibility módu 2010

SharePoint 2013 v kolekcích webů vytvořených nebo migrovaných v compatibility módu 2010, automaticky skrývá všechny features z WSP farm řešení pro verzi 2013. Pokud tedy provádíte upgrade, připojíte starou kolekci webů 2010, nainstalujete nové farm balíčky pro podporu SP2013 a chcete ponechat kolekci ve vzhledu 2010, alespoň do dokončení nutných úprav, feature z nových balíčků neuvidíte. Aby bylo možné aktivovat nové feature na starém UI, je potřeba provést retract balíčku ze všech webových aplikací a znovu provést deploy s atributem CompatibilityLevel:

[more]

Add-SPSolution „c:\DEV\DevIT.SharePoint.FBASuite\DEV2013-SQL\Builds\DevIT.SharePoint.FBASuite.wsp“
Install-SPSolution -Identity DevIT.SharePoint.FBASuite.wsp -WebApplication http://srvdev:555 -GACDeployment CompatibilityLevel {14,15}

 

Tím dojde k automatickému zkopírování všech potřebných souborů z WSP do obou klíčových složek SharePointu:

Pro verzi 2013:

c:\Program Files\Common Files\microsoft shared\Web Server Extensions\15\TEMPLATE\FEATURES\

Pro verzi 2010:

c:\Program Files\Common Files\microsoft shared\Web Server Extensions\14\TEMPLATE\FEATURES\

 

Nyní je feature viditelná i v kolekci webů UI verze 2010.

SharePoint domény k prodeji: sharepoint-extranet.com + sharepoint-forms-authentication.com

Aktuálně nabízím k prodeji dvě domény s SharePoint tématikou, které už dosloužily svým původním účelům:

 

  1. sharepoint-extranet.com
  2. sharepoint-forms-authentication.com

 

Pokud budete mít kdokoliv zájem, neváhejte mě kontaktovat na emailu novotny@pavelnovotny.info

Vyvolávací cena je pouze 1.000 EUR / doména.

SharePoint+SPServices: Jednoduchá kontrola unikátnosti IČ společnosti s možností uložení i v případě duplicity

SharePoint verze 2010 a novější obsahuje v definici sloupce volbu Vynutit jedinečné hodnoty – tato volba zajistí, že pokud máte například seznam dodavatelských společností a chcete vynutit jejich unikátnost pomocí sloupce IČ, můžete jednoduchým zatržením volby funkci aktivovat. Funkce má však několik much a pro tento způsob kontroly se zrovna nehodí, problémy jsou minimálně dva:

  • Co pokud chci jenom kontrolu s možností uložení? Později budu chtít například ukládat i pobočky společností se stejným IČ?
  • Co když uživatel v jednom případě vyplní formát jako 28708636 a druhý jako 287 08 636?

[more]

    V tomto případě je už nutné sáhnout po kustomizaci pomocí javascriptu a vytvořit malý script, který sjednotí formát, ořeže nepovolené znaky a ve finále i zkontroluje duplicitu IČ s možností uložení.

    Pro příklad jsem použil volně dostupnou javascript knihovnu SPServices na http://spservices.codeplex.com/, která obsahuje spoustu užitečných funkcí pro každodenní použití, za zmínku určitě stojí kaskádové seznamy, zobrazení souvisejících informací z lookupu, našeptávač (autocomplete), filtr dropdownu, vyplnění defaultních hodnot atd., více přímo v dokumentaci http://spservices.codeplex.com/documentation

    Prerequisity jsou rovněž popsány v dokumentaci, je potřeba jQuery a SPServices scripty nahrát do knihovny SharePoint a přidat reference do masterpage, případně do samotné stránky formuláře, více v detailní dokumentaci na CodePlexu.

    <script language="javascript" type="text/javascript" src="/jQueryLibraries/jquery-1.11.0.min.js"></script>

    <script language="javascript" type="text/javascript" src="/jQueryLibraries/jquery.SPServices-2014.01.min.js"></script>

    Pak už jen vložit následující script na stránku formuláře, kde chcete provádět kontrolu:

    $("input[title='IČ']").bind('keypress', function (event) {
        var regex = new RegExp("^[a-zA-Z0-9]+$");
        var key = String.fromCharCode(!event.charCode ? event.which : event.charCode);
        if (!regex.test(key)) {
            event.preventDefault();
            return false;
        }
    });
    
    $("input[title='IČ']").bind("change", function () {
        var input = $(this),
            text = input.val().replace(/[^a-zA-Z0-9-_\s]/g, "");
        if (/_|\s/.test(text)) {
            text = text.replace(/_|\s/g, "");
        }
        input.val(text);
    });
    
    $().SPServices.SPRequireUnique({
        columnStaticName: "ICSpolecnosti",
        duplicateAction: 0,
        ignoreCase: true,
        initMsg: "IČ musí být unikátní.",
        initMsgCSSClass: "ms-vb",
        errMsg: "Společnost se zadaným IČ již existuje!",
        errMsgCSSClass: "ms-formvalidation",
        showDupes: false,
        completefunc: null
    });

    Výsledek:

    image

    Script lze samozřejmě jednoduše upravit tak, aby mimo zobrazení upozornění, byl uživatel při uložení záznamu také vyzván dialogem k potvrzení, že je si vědom duplicity a zda opravdu chce nový záznam s tímto IČ opravdu založit.