Radi Atanassov

SharePoint MCM, MVP, MCT and owner of OneBit Software

“Activate on Default” confusion and features scoped at Web Application level

When creating SharePoint features in Visual Studio 2010, one of the settings that defaults to True is “Activate on Default”.

image

There is a lot of confusion as to what this setting actually does:

  • It ONLY applies to features scoped at Farm and Web Application levels. You can still modify it for other features, but it doesn’t do anything.
  • Any feature (Farm or WebApplication) with that setting set to True will automatically activate when you deploy the WSP solution, no matter which way you deploy it (Install-SPSolution, stsasm.exe, Central Administration)

This setting is not related to the deployment configuration settings in Visual Studio 2010:

clip_image001

These features will still activate, even if VS’s deployment configuration is set to “No Activation”.

Where can this be an inconvenience?

When you create features that deploy Timer Jobs at the Web Application level, you really want to have “Activate on Default” set to False. Otherwise, your feature will be activated on ALL web applications. I did some tests and found out that even if your WSP Solution is not global and is deployed to a specific Web Application, your feature will still get activated. Dangerous, you really want your Timer Jobs to be running where they are meant to run, i.e. don’t deploy Timer Jobs to Central Administration unless you really need to.

If you are ever trying to find out why your Timer Jobs are “attached” to all web applications, this might be why.

I’m a SharePoint Server MVP!!!

It was near the end of my working day, I was just about to do code reviews and catch-ups with my team, when I got the email:

“Congratulations! We are pleased to present you with the 2011 Microsoft® MVP Award!”

My excitement is warranted – it is my first time. I feel honoured and would like to thank everyone who contributed towards my nomination and my eventual award.

I am grateful for all the people who inspire, challenge, listen, support, influence and motivate me to do my work. To me this award is really about you.

Just like the Master award, and like every other achievement, its not an end, but a start to new goals and targets. Becoming a SharePoint MCM was a real achievement, but it was more a beginning to new paths – people expect you to know, do the right thing, always solve the problems, give the right advice. Being a Master means you always have to be up-to-date, always know what's new, always aim to provide the best possible architecture and solution to customers, write the best code even, you must know what buttons to push and what levers to pull, and if you don’t know you must know where to get the answers. To me, becoming an MVP is similar – there’s a community out there and MVP’s support it. They develop it and inspire individuals. I’ve been “crowned” an MVP - now it’s my job to make the great community greater.

 

SharePoint Forums - Why they matter

WARNING: "How cool am I?" post.

I've always wanted to spend some time on the SharePoint forums, just to see the fun and benefits of being a "regular".

I put some initiative into it and, I have to say, the forums are more than what I expected.

Here is why I think the forums are important for the community and every SharePoint expert out there:

  • When preparing an answer, you think about the issues and concepts around the asked question. This educates you. I answer to people, and when I do so I look over my notes on the topic. I have a huge arsenal of material on SharePoint concepts from which I pull out info and I always look up on a search engine to find anything recent. Going over knowledge and blogs is a learning experience. The end result - I am a better SharePoint expert.
  • You see trends of problems. This helps you understand common misconceptions so you can address them through blogs or open-source solutions. You see the biggest problems of the product, and the most often encountered headaches. You end up knowing more about your ecosystem.
  • You help people and they say thanks. And this makes you feel good. It also raises your profile, which is important for the self-development of everyone.
  • And of course, you get the opportunity to ask a question. If you are lucky, someone might even answer within minutes. No support ticket could do this for you.

A screenshot from my activity (taken today):

image

Which forums do I like? I'm currently a big fan of SharePoint 2010 General Questions and Answers as the questions cover everything and anything. People seem to ask all kinds of stuff here, configuring, development, architecture, search , PowerShell, you name it. I also poke around the others, but that one is my favorite.

How much time does it take? Not much - I answer questions while I wait for something else. Either a person, a task, a system job or an email. Answering a question takes a few minutes if you know the answer. What could cost you time is researching a problem, but hey, that is my job. I should know, so I don't mind looking into issues or concepts that I don't know the answer to. Either way, it is time which I am happy to give.

Last point - people ask me questions ALL the time. I always give them the answer, but ask them to post the question to the forums so everyone could benefit from my answer.

So don't think about it, post a question :)

See you on the forums!

SQL Disk Space Errors in SBS 2003 R2

I was working on a VM and stumbled upon a TEMPDB issue. I was getting disk is full errors…:

C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\tempdb.mdf: Operating system error 112(There is not enough space on the disk.) encountered.

Could not allocate space for object '<temporary system object: >' in database 'tempdb' because the 'PRIMARY' filegroup is full.

This may occur for other databases as well, or for that matter, other files.

I had a look around and had appropriate disk space, so I new that wasn't the issue. SQL services we're running under a service account, so I started looking around to make sure the service account has enough rights to use large amounts of space. I couldn't expand the TEMPDB size manually in SQL Server Management Studio and Quota's in AD/Group Policy we're not configured, so that wasn't the problem.

If you right-click on the drive where TEMPDB is located, you will see that SBS has quota enabled by default (in my case it was the C: drive and that would have the setting ON by default).

Here's the Quota tab where you could disable it:

clip_image001

Turning quota management off will allow the service account to use up disk space and enlarge its TEMPDB. This should be only turned off on a development environment or if you really know what you are doing. It is also best practice to relocate the TEMPDB on a different disk for performance reasons.

Hope this helps!

Как да изберем консултантска фирма?

Мойте съвети за всеки, който възлага проект към консултантска фирма:

·         Проучете хората, които ще работят по проекта – от колко години са в фирмата, какви са им отговорностите, по какви проекти са работили, какъв е перформанса на всеки от тях и защо са подходящи за ролята по проекта. Срещнете се с всеки един от тях.

·         Кой е лидерът на проекта, който отговаря за цялостния процес, комуникация и project management?

·         Кой е архитекта, отговорен за техническата посока и качество на изработка? Той в състояние ли е да води екипа и има ли техническите познания?

·         По колко други проекта работи всеки един от участниците? Имате право да знаете.

·         От предложението на консултантската фирма, ясен ли е процесът на работа? Той включва ли прототип, анализ на бизнес изискванията, документ който ги потвърждава, фази на проекта, план за тестване и премахване на бъгове, реалистични срокове? Гаранция?

·         Какви сертификати има фирмата и работниците по проекта? Това е спорно изискване – всеки може да има ISO 9001 и MCP сертификати, и работата пак да е некачествена. За мен тези неща не показват знания и опит, но показват дисциплина – някой се е захванал и отделил време да свърши една работа. Хубаво е, когато това е систематично – ако всичко е реализирано в близки дати, най-вероятно е постигнато за определена цел, като спечелването на определен проект.

·         Готови подобни решения – консултанта има ли такива? Обадете им се, попитайте ги как се чувстват относно решението. Доволни ли са от цялостният процес и ангажиране? Това може да се струва коварно на някой, но е често срещана практика в чужбина. Всеки има право да знае.

·         Качество на документите на консултантската фирма – това показва колко е организирана една фирма, и колко сили полага в изглаждането на детайли. Разгледайте офертите и предложенията – има ли правописни и граматични грешки, документа форматиран ли е добре, добре ли описва темата на комуникация? Вобще личи ли си професионализъм, или работата е джаста-праста?

·         Попитайте фирмата дали ще има подизпълнители. Имате право да знаете, но ако има ситуацията се усложнява. Кой е отговорен за какво? Зависими ли са всичките участници?

Ако има нещо нередно, отидете при следващата фирма. В крайна сметка Вие давате парите и имате право на избор.

Ради Атанасов
Консултант, архитект и разработчик на SharePoint решения.

Цената на upgrade – не я пренебрегвайте!

Една от най-важните качества за всяка нова версия на всеки нов продукт е начина на ъпгрейд от предишна версия. Същото се отнася и за внедрени решения на която и да е платформа. Целта на нови версии на софтуер е да носят нови възможности от които модерният бизнес се нуждае. Системи с които се интегрира едно решение също може да се нуждаят от подновяване, или дори нов хардуер. IT светът е много динамичен, няма спор. Искам да си кажа мнението за цената на ъпгрейд и как един текущ проект задължително трябва да вземе тази цена в предвид.

Много компании не предвиждат цената на подновяване на едно решение. Сблъсквал съм се с клиенти, които се интересуват от пълната цена сега на момента, и винаги гледат тя да е най-минилана, като се отстраняват всички допълнения към един проект освен директната разработка. Но ако не се вземе в предвид цената на подновяване и променяне в бъдещето, да кажем след година, тази цена е напълно безсмислена. Според мен всяко решение трябва да бъде създадено с мисълта за ъпгрейд, разширяване и подновяване. Трябва да има документация, качествена архитектура, МНОГО качествен код, план за възстановяване след дизастер и всичко да е минало през пълноценен тест –именно тези неща се пренебрегват. Всичкото това струва пари, но добрият управител трябва да му е наясно защо се правят тези неща. Ако един мениджер не му е ясно и няма опит с IT проекти, абсолютна отговорност е на консултанта да обясни тези неща.

Защо качествен код? Защото некачествен код не се разширява, а се пренаписва! Ако имах всички долъри, които бивши клиенти биха спестили с намирането на малко повече финанси за надценката за високо качество на работа, щях да мога да купя Африка и да нахраня целият им народ.

Ето пример: случвало ми се е много често да работя по проекти, където липсва добра аркитектура, а самите хора които са писали кода ги няма. Решението гърми и дава грешки, а хората са си взели парите. Клиентът е недоволен, защото бизнеса му се разширява и допълнителната тежест над решението е необмислена. И какво казват новите разработчици, които поемат ъпгрейда: кодът е много зле написан, няма документация, архитектурата е слаба и трябва да се пренапише. А системата дори не е тествана за извънредни ситуации... Най-големия ужас, за човекът който е дал парите за този проект преди година. Дали преди година тези неща са взети в предвид?

Как да убиете WSS v3 сървер с прост Site Definition и без никакъв код..

Регистриране на Event Receiver за Content Type в Feature с XmlDocument... всичко звучи като по учебник, до момента в който не се усетите, че сте забравили NamespaceURI.

В документацията на XmlDocument пише следното:

NamespaceURI

Optional Text. Specifies the URI to the schema namespace for the contents of this XmlDocument element.

 

Ами не е точно optional… Ако този Feature е дефиниран за активиране от Site Definition, и се пробвате да създадете сайт на база на Site Definition-a, получават се много интересни забележителности: CPU на 100%, SQL поглъща всичката памет (не че имам много...)и всички услуги са неизползваеми. User interface-а не показва нищо друго, освен екрана за чакане, а през това време зад сцената става армагедон.

Ето и малко CAML:

  <ContentType ID="0x0101006BD6DAD38F7947799A6F2EE72F5C3C11"

             Name="Test Content Type"

             Group="Custom Content Types" Version="0">

    <FieldRefs>

      <FieldRef ID="{fa564e0f-0c70-4ab9-b863-0177e6ddd247}" Name="Title" />

    </FieldRefs>

    <XmlDocuments>

      <XmlDocument>

        <spe:Receivers xmlns:spe="http://schemas.microsoft.com/sharepoint/events">

          <Receiver>

            <Name>UniqueNamingEventReceiver</Name>

            <Type>ItemUpdated</Type>

            <SequenceNumber>10000</SequenceNumber>

            <Assembly>SUGBG.Website.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=205b31e1c60edcc4</Assembly>

            <Class>SUGBG.Website.UniqueNameReceiver</Class>

            <Data></Data>

            <Filter></Filter>

          </Receiver>

        </spe:Receivers>

      </XmlDocument>

    </XmlDocuments>

  </ContentType>

 

И ето дефинирането в Site Definition Site Features елемента (това е в ONET.XML):

      <SiteFeatures>

        <!-- Test Content Type -->

        <Feature ID="11BFEA71-1C5E-4A24-B310-BA51C3EB7A1" />

 

Интересно е, че същият CAML е ок ако feature-a е активиран от менюто в SharePoint.

Eто и дефиницията, която работи:

<ContentType ID="0x0101006BD6DAD38F7947799A6F2EE72F5C3C11"

             Name="Test Content Type"

             Group="Custom Content Types" Version="0">

    <FieldRefs>

      <FieldRef ID="{fa564e0f-0c70-4ab9-b863-0177e6ddd247}" Name="Title" />

    </FieldRefs>

    <XmlDocuments>

      <XmlDocument NamespaceURI="http://schemas.microsoft.com/sharepoint/events">

        <spe:Receivers xmlns:spe="http://schemas.microsoft.com/sharepoint/events">

          <Receiver>

            <Name>UniqueNamingEventReceiver</Name>

            <Type>ItemUpdated</Type>

            <SequenceNumber>10000</SequenceNumber>

            <Assembly>SUGBG.Website.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=205b31e1c60edcc4</Assembly>

            <Class>SUGBG.Website.UniqueNameReceiver</Class>

            <Data></Data>

            <Filter></Filter>

          </Receiver>

        </spe:Receivers>

      </XmlDocument>

    </XmlDocuments>

  </ContentType>

 

Това не го пиша, за да създавате пакети, които могат да убият сърверите ви, а за да не си губите времето, което аз загубих в откриването на проблема.

Пуснах официален бъг към Майкрософт, ще ви разкажа ако се стигне до интересен резултат.

(за тези, които спорят, че CAML си е чист код... прави са. Заглавието лъже.)