Tagged: Sharepoint

Create a link that initiates a Nintex Workflow associated to a Document Set

Nintex Switzerland
It’s been a long time since my last post !
I’ve moved to Geneva for a new job, but I’m still on SharePoint and other Microsoft stuff 🙂

Nintex is used a lot in Switzerland. I had an issue about creating a client-side script that initiates a workflow. I did not manage to do it with “StartWorkflow” from workflow.asmx. As usual with document sets, a specific treatment is needed.

So, this is the link that you can use :
/_layouts/15/NintexForms/InitiateWorkflow.aspx?List={xxx}&ID={yyy}&ItemGuid={zzz}&WorkflowName=MyNintexWorkflow

Where xxx is the list Guid, yyy is the document set ID (as displayed in docsethomepage.aspx?ID=yyy), and yyy is the UniqueId of the document set.

SharePoint : How to filter an external data XsltListViewWebPart in SharePoint Designer ?

sharepoint 2013
sharepoint 2013
Context : You use Business Data Connectivity to retrieve external data in SharePoint, and you wish to display a filtered view of this data in a page.
In SharePoint Designer, you insert a Data View of that external data.

Then, there are 2 ways to filter it :

  • By using the “Filter” button in the office ribbon :
SharePoint Designer Filter
SharePoint Designer Filter

This actually generates a CAML query :

SharePoint_BDC_Filter_External_Data_2

  • By passing a parameter to the finder method of the BDC Model. You can do this manually or by using the “Search” button :

SharePoint_BDC_Filter_External_Data_1b

It generates this code in the View element :

SharePoint_BDC_Filter_External_Data_3

You should use the second solution. Why ? We could consider the CAML query as a “front-end” filter. It means that ALL the records are sent by the BDC, and then the CAML query filter it.
If you retrive thousands of records, it can affect performances.

If you pass a parameter directly to the BDC (finder method), the request sent to the external source will be filtered, and SharePoint will have to deal with less data.

Maybe you will have to create a new finder method in your BDC, but it worth the time spent on it !

SharePoint 2013 : How to repair a broken Search component at low cost

sharepoint 2013
sharepoint 2013
Once upon a time, after a whole server farm reboot, one of my search component was broken. Content crawling was taking forever, and the ULS were not very explicit. In the central administration, I could see this :

SharePoint Components
SharePoint Components

My application server was unable to run the “Content Processing Component”, even if I restart the whole search service (net stop / start OSearch15).

I noticed 2 things that drove me to the solution :
– First, a noderunner.exe process was missing. This confirmed the red cross in the central administration. There was 2 processes instead of 3 (the crawler doesn’t spawn a noderunner.exe process) :

SharePoint Search Processes
SharePoint Search Processes

– On the second hand, there was strictly no logs in the “\15.0\Data\Office Server\Applications\Search\Nodes\\ContentProcessingComponent” directory !

It was like the search topology was ignoring this component. So I decided to re-install the search topology, just by cloning it, and activating it :


$searchApp = Get-SPEnterpriseSearchServiceApplication

$initialTopology = Get-SPEnterpriseSearchTopology -SearchApplication $searchApp -Active

$cloneTopology = New-SPEnterpriseSearchTopology -SearchApplication $searchApp -Clone -SearchTopology $initialTopology

Set-SPEnterpriseSearchTopology -Identity $cloneTopology -SearchApplication $searchApp

And it works, without any service interruption !

SharePoint Components
SharePoint Components

SharePoint 2010 / 2013 : La recherche ne fonctionne plus (sur aucun site)

SPDesigner Il y a de multiples dĂ©finitions pour “la recherche ne fonctionne plus”. Il n’est pas question ici d’indexation, mais de l’impossibilitĂ© pour tous les utilisateurs de tous les sites de lancer une recherche.

 

Contexte : Ferme SharePoint 2010 ou 2013, Windows Server 2008 / 2008 R2.

SymptĂŽme : Le lancement d’une recherche sur un site web aboutit Ă  une erreur (Exception). Dans les fichiers de logs SharePoint, il y a des entrĂ©es du type :

“Tentative d’opĂ©ration non autorisĂ©e sur une clĂ© du Registre marquĂ©e pour suppression”

Dans le journal des événements Windows, il y a :

“Windows a dĂ©tectĂ© que votre fichier de Registre est toujours utilisĂ© par d’autres applications ou services. Le fichier va ĂȘtre dĂ©chargĂ©…”

Diagnostic : le compte de service de recherche essaie d’accĂ©der Ă  une clĂ© de registre, mais il ne peut pas. Une session a pu ĂȘtre ouverte avec ce compte de service sur l’un des serveurs de la ferme (en bureau Ă  distance). Des services ont Ă©tĂ© redĂ©marrĂ©s (ou tentĂ©s de l’ĂȘtre). Puis la session a Ă©tĂ© fermĂ©e. Les ouvertures et fermetures de session provoques des ajouts / suppression de clĂ©s dans la base de registre. Il SEMBLERAIT que les services qui ont Ă©tĂ© redĂ©marrĂ©s cherchent Ă  accĂ©der Ă  ces clĂ©s, alors qu’elles Ă©taient supprimĂ©es une fois la session fermĂ©e. Cette situation est expliquĂ©e ici : blogs.msdn.com.

Solution (Dans le cas du service de recherche) :

  • Dans services.msc : RedĂ©marrer les services “SharePoint Server Search 14” et “SharePoint Foundation Search V4” (si dĂ©jĂ  dĂ©marrĂ©s)
  • Dans IIS : Recycler le pool d’application “SecurityTokenServiceApplicationPool” sur tous les serveurs SharePoint
  • Dans l’administration centrale de SharePoint : Aller dans “GĂ©rer les services sur le serveur”, et redĂ©marrer : “Service de paramĂštres de site et de requĂȘte de recherche”.
  • En dernier recours, un reboot de serveur serait une solution, mais provoquerai une coupure de service, ce qui n’est pas toujours souhaitable.

Comment ne pas réitérer cet incident ?

Ne pas se connecter avec les comptes de service pour relancer les services eux-mĂȘmes.

Il y aurait Ă©galement une GPO (“Do not forcefully unload the user registry at user logoff”) Ă  modifier (Lien externe), mais ceci nĂ©cessite un accord avec les administrateurs du domaine (risque de GPO locales Ă©crasĂ©es).

DevOps + SharePoint ?

I think the structure of SharePoint is naturally “DevOps oriented”. Actions to create web applications and configure services through a web interface is a DevOps philosophy ! On standard .NET environnements, such actions require interventions on servers, but SharePoint does this “out-of-the-box”.

But the work of DevOps in a SharePoint environment is not limited to that. In the case of a SharePoint farm hosting several applications, how to ensure that a solution deployment does not impact non-concerned applications ? How to be sure that an application will not be broken by an undisciplined neighbor ?

Because SharePoint is a complex service, the traditional tools of production operators are not sufficient to watch a farm. And on the other hand, development teams should not have to worry about server scalability !

This is the role of DevOps : Being the bridge between developers and production, while maintaining a consistent chain of delivery.

In a future post I will talk about the tools available to the “DevOps SharePoint”.

This is my view about what a “DevOps SharePoint” shoud be :

How to "DevOps" SharePoint ?
How to “DevOps” SharePoint ?

Traduction française :
Je pense que la structure mĂȘme de SharePoint est orientĂ©e DevOps. Les actions de crĂ©ation d’applications web et de configuration de services au travers d’une interface web est une philosophie DevOps ! Ce genre d’actions nĂ©cessiteraient des interventions sur les serveurs, mais ici c’est SharePoint qui contrĂŽle cela “out-of-the-box”.

Mais le travail du DevOps dans un environnement SharePoint ne se limite pas Ă  cela. Dans le cas d’une ferme SharePoint qui hĂ©bergeraient plusieurs applications autonomes, comment garantir qu’un dĂ©ploiement de solution n’impacte pas des applications non concernĂ©es ? Comment ĂȘtre sĂ»r qu’une application ne soit pas impactĂ©e par le dĂ©veloppement du voisin ?

Parce que SharePoint est un service complexe, les outils classiques des opĂ©rateurs / exploitants de production ne suffisent pas Ă  gĂ©rer une ferme. Mais d’un autre cĂŽtĂ©, les Ă©quipes de dĂ©veloppement n’ont pas Ă  se soucier de l’Ă©volutivitĂ© (scalability) des serveurs !

C’est lĂ  le rĂŽle du DevOps : Faire le pont entre dev et prod, tout en maintenant une chaine de livraison cohĂ©rente.

Dans un prochain post je parlerais des outils Ă  disposition du “DevOps SharePoint”.