Pavel Novotný

.NET Framework, SharePoint, Dynamics CRM, RC Helicopters, Honda VFR CrossRunner

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

In-place upgrade Dynamics CRM 2013 na 2015: Could not find file 'C:\Program Files\Microsoft Dynamics CRM\LangPacks\1029\sql\7\StoredProcedures\MSCRM\fn_RollupByAccount.sql'.

Při upgrade Dynamics CRM organizace z verze 2013 na 2015 s českým nebo jiným language packem (alespoň jedním nad základním jazykem), dojde při upgrade k chybě:

System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.IO.FileNotFoundException: Could not find file 'C:\Program Files\Microsoft Dynamics CRM\LangPacks\1029\sql\7\StoredProcedures\MSCRM\fn_RollupByAccount.sql'.

Language pack obsahuje chybu, odkazuje se na soubory, které se jmenují jinak, stačí je přejmenovat a spustit znovu upgrade databáze:

  • p_RollupByAccount.sql => fn_RollupByAccount.sql
  • p_RollupByContact.sql => fn_RollupByContact.sql
  • p_RollupByOpportunity.sql => fn_RollupByOpportunity.sql

Na opravě se údajně pracuje.

Vývoj vlastního CmdLetu v C# - příprava projektu Visual Studia

Vývoj vlastního PowerShell příkazu (CmdLet) je velice snadné a rychlé – ideální pro často opakované akce, případně akce u zákazníka, kde nemusí být vždy vzdálený přístup do jeho infrastruktury. Za posledních pár let už jsem jich napsal desítky a jsem jsem z toho stále nadšen, hlavně tou jednoduchostí, v podstatě jsem tím zcela nahradil jednoúčelové konzolové aplikace, kde již navíc není nutné řešit parsování argumentů, přehledná výpis na konzolovou obrazovku, všechno je již tak nějak vyřešeno. Jako příklad jednoho z CmdLetů bych uvedl snadné nasazení jedné naší aplikace hostované v Azure, kde s každým zákazníkem bylo vždy nutné přihlásit se na portál Azure, vytvořit hosting pro aplikaci, nastavit domény, standard mód, vytvořit a nastavit DB, connection string do aplikace, vytvořit storage provider, přihlašovací údaje zapsat do aplikace, nastavit zálohování, a tak bych mohl pokračovat….. až po finální nahrání zkompilované verze – prostě práce na minimálně 2-4h a to ještě s rizikem chyby. Nyní k tomu slouží dva CmdLety, jeden pro přihlášení k Azure, druhý už pro založení tenantu a provedení všech potřebných akcí zcela automaticky.

V tomto prvním díle ukážu pouze základ, založení Visual Studio projektu a jeho nastavení.

Základem vlastního PowerShell CmdLetu je založený projekt typu Class Library

image 

image

Volba verze .NET Frameworku je závislá na požadované verzi PowerShellu, pokud například skriptujete akce pro SharePoint 2010, musíte nastavit .NET Framework verze maximálně 3.5.

  • PowerShell 2.0 – .NET Framework 3.5
  • PowerShell 3.0 – .NET Framework 4
  • PowerShell 4.0 – .NET Framework 4.5

Dynamics CRM 2013: vytvoření PDF z reportu a přiložení jako přílohy

Na MSDN webu se objevil postup formou javascriptu, jak automatizovaně vygenerovat přílohu PDF z reportu a uložit jí jako přílohu k nějaké entitě, to se samozřejmě může hodit například při generování objednávky nebo faktury z CRM a automatizovanému uložení výsledného PDF soboru k nově vytvořenému odchozímu mailu, tedy bez nutnosti krkolomného postupu: otevřít report, vygenerovat, uložit na plochu PDF, založit email, připojit přílohu….

Více...

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

 Více...

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.

 Více...