SPNote

SharePoint Notes

Set Email Notification values on a UserProfile

In OOTB SharePoint 2010, all the three options for Email Notifications are checked. This may help customers for collaboration but some others may think that they receive lots of unnecessary emails and get annoyed. If your company size is big enough like me (30,000+), your IT department manager will make a request for disabling all or some of them.

The request was to disable the last option.

  • Uncheck “Send me suggestions for new colleagues and keywords”

After searching on this, I found out that there is a nice one using PowerShell but I couldn’t find the how the option value is saved because the value has changed to a different value when I save it into the UserProfile. In addition, I wanted to add some features such as examining values, applying multiple sites and saving some information into a log file.

The simple application looks like below.
image

At first, I thought updating the options for the UserProfile should be easy but if you tried some combinations, you will realize saved values are somehow different than the value should be.

You may think the option value will be saved like this
[V] Notify me when someone leaves a note on my profile
[V] Notify me when someone adds me as a colleague
[   ] Send me suggestions for new colleagues and keywords
=> option  value: 110

image
# Binary and Decimal values

Surprisingly, you will notice the Email Notification setting value is 100 (SP) instead of 110 (UI) when you read it from SharePoint. I could figure out after trying several times with combinations

Now I am going to explain how the value is saved.

  1. Without conversions – think the other way
    1. Checked: 0, Unchecked: 1
    2. Concatenate the option values in opposite order
      - Concatenate them in descending order (from 3 to 1)
      image
  2. Convert UI one (110) to SharePoint one (100)
    1. Reverse the each options
    2. Reverse characters
      image

The option value 110 (UI Version) is saved into 100 (SP Version) and I have no idea why the developer is saved it this way. You may find a method for doing this from SharePoint dlls(Please let me know if you find it).

Some tips from my exprience are

  1. SPSEmailOptins value is null (default)
    - The value null means 111 (all of them will be checked)
    - Check the value is null when you read the value
      You can read the value once you saved it.
  2. Login as farm administrator account
    - you can add another account at UserProfileServiceApplication > Administrators for testing.
    image
  3. Check if user exists from UserProfileManager
    - UserProfileManager.UserExists(accountName)

I had a hard time configuring My Site and testing this app. My Site configuration was hard and took some time. I will write an article about it later.

SharePoint 2010 사용자 권한 EventFiring

안녕하세요?

Will 입니다. 이번에는 다름이 아닌 SharePoint 2007에서 사용 하던 EventFiring에 대해서 쓰도록 하겠습니다.

기본적으로 리스트에 값들을 업데이트를 하고 내용을 채워 넣을 때 EventReceiver를 통해서 값들을 변경 하고 업데이트를 하고 하는데요.

이런경우 관리자가 아니면은 제약이 많은 경우가 많습니다. 그래서 SharePoint 2007에서는 해당 업데이트시 DisableEventFiring() 함수를 사용해서

권한의 제약을 풀고 업데이트를 하고 나서 EnableEventFiring() 함수를 사용해서 다시 권한의 제약을 활성화 하는 경우가 있는데요. SharePoint2010

에서는 해당 함수가 사라진것은 아닌데 경고창이 뜹니다. 해당 함수를 찾을 수 없다 등등..... 에러를 뿌리지는 않는데 해당 함수가 따로 변경 되었습니다.

 EventFirngEnabled 라는 속성으로 바뀌면서 해당 값에 True, False를 넣어 주면은 됩니다. 예로 들어서

EventFiringEnabled = false;

list.update();

EventFiringEnabled = true;

 

위와 같은 식으로 사용 하시면은 됩니다.

 

SharePoint 2010 Microsoft.SharePoint.Publishing.dll 사용시 Error

안녕하세요? Will입니다.

이번에는 제가 Navigation의 기능을 쓰기 위해 Microsoft.SharePoint.Publishing.dll 을 사용 했는데 빌드 시 Error가 나타나서 해당 Error에 대한

해결 방안을 쓰도록 하겠습니다.  해당 dll이 존재 하지 않는 다는 황당한 문구의 Error입니다. 분명히 참조를 시켜놧는데요.....

Error 내용 : The type or namespace name 'Publishing' does not exist in the namespace 'Microsoft.SharePoint' (are you missing an assembly reference?) 

Warrings 에서 보니깐 해당 dll은 System.Web.DataVisualization 이라는 dll 의 어느 Class를 사용 해서 Error가 난듯 합니다.

Warrings : The primary reference "Microsoft.SharePoint.Publishing, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c, processorArchitecture=MSIL" could not be resolved because it has an indirect dependency on the framework assembly "System.Web.DataVisualization, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" which could not be resolved in the currently targeted framework. ".NETFramework,Version=v3.5". To resolve this problem, either remove the reference "Microsoft.SharePoint.Publishing, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c, processorArchitecture=MSIL" or retarget your application to a framework version which contains "System.Web.DataVisualization, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35". 

그래서 해당 Dll을 검색 하여서 찾으니 아래의 폴더에 있군요. C:\Program Files (x86)\Microsoft Chart Controls\Assemblies\System.Web.DataVisualization.dll

드라이브는 설치에 따라서 틀립니다. 해당 dll 을 참조 해주고 다시 빌드를 하니 에러가 사라지며 잘 사용 되네요.

그리고 옛날에 Silverlight.dll 사용시에도 에러가 낫엇는데 해당 dll을 참조 하면은 Error 가 사라집니다.

SharePoint 2010 Custom Action

안녕하세요? Will 입니다.

이번시간에는 Custom Action에 대해서 자료를 올려 보도록 하겠습니다. SDK에 올라와 있는 자료를 가지고 원래는 글을 쓸려고 하였으나.

SDK자료가 에러가 나는 관계로 간단히 Custom Action을 만들어 보도록 하겠습니다.

1. VS2010으로 Project에서 새로운 프로젝트를 생성 하도록 하겠습니다. SharePoint2010에 있는 ContentType을 생성 하도록 하겠습니다.

2. VS2010 의 Feature.xml의 이름과 ContentType에 있는 이름을 알아서 변경 합니다.

3. Elements.xml 파일의 내용을 채웁니다.

Location 은 상태라고 생각 하시면은 됩니다. View모드냐 Edit모드냐와 같이 상태 모드입니다.

RegistrationId 는 문서라이브러니냐 아님 일반 리스트(100)냐 등등과 같이 리스트 값들이 지정되어있습니다. 아래 소스는 문서라이브러리(101)로 설정 하엿습니다.

RegistrationType 은 리스트냐, ContentType 이냐 등과 같은 걸 정의하는 곳입니다.

Title은 이름 그대로 타이틀입니다.

UrlAction 은 해당 타이틀이 선택 될때 동작할 내용을 적어 넣는 것입니다. 이번에는 간단히 test라는 알러트 창을 띄우겟습니다.

[code:xml;ln=off]

<?xml version="1.0" encoding="utf-8"?>
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
  <CustomAction Id="Ribbon.Library.Actions.AddAButton"
   Location="ViewToolbar"
   RegistrationId="101"
   RegistrationType="List"
   Title="Add a Ribbon Button">
    <UrlAction Url="javascript:alert('test');"/>
  </CustomAction>
  </Elements> 

[/code]

4. 내용을 채우고 나서 빌드를 하고 배포를 합니다.

SharePoint2010 SDK  의 내용 중 에러가 나는 곳이 CommandUIHandlers 안에 CommandUIHandler 의 프로파티 중 CommandScript 자체를

VS2010에서는 프로파티로 인식을 못합니다. 그래서 SDK는 에러가 납니다.

 소스는 아래에 첨부 합니다.

CustomAction.zip (37.64 kb)

SharePoint 2010 Columns

안녕하세요?

Will입니다. 이번에는 저번에 2007에서 개발한 소스를 가지고 SharePoint 2010 에서 다시 사용 할 수 있는지

체크를 해보도록 하겠습니다.

VS2010 의 Class Library를 사용해서 만들어 보았습니다 밑에 포스팅 되어 있는 내용을 참고로 하시면은 됩니다.

그리고 나서 배포를 해보았습니다. 배포후 아래와 같은 결과 하면을 볼 수 있습니다.

결과 1) 새글 추가

 결과2) 내용을 채우 겠습니다.

결과 3) 내용을 쓰면은 0의 값이 들어 가는걸 확인 할 수 있을 것입니다. 

 결과 4) 그리고 나서 DisplayMode에서 확인한 결과 버튼이 잘나오네요.

 결과 5)버튼을 클릭 해 보았습니다.

 

결과 6) 그리고 닫으니.... 허걱 값이 안변하네요! 아마 중간에 확인을 눌렀을시 이벤트가 동작 해야 되는데 닫기를 눌럿더니 값이 안변한것 같습니다.

결과 7) 하지만 F5을 눌러 Refresh를 하니 아래와 같이 값이 들어가 있는 걸 확인 할 수 있습니다.  

SharePoint 2010은 ClientScript로 Ajax처리가 되어 있어서 값의 변화가 있을 시 제로드를 하기 때문에 기존의 값이 변하지 않는 것을 확인 할 수 있습니다.

하지만 자체 DB에 저장되어 있는 값은 +1이 되어 있는 것을 확인 할 수 있습니다.  해당 문제에 대해서는 조금 더 SharePoint 2010을 분석한 후에 추후에

수정 하도록 하겠습니다.  밑에 SharePoint 2010 개발 소스를 올립니다. 참고 하시고 소스에는 주석으로 저희 사이트 이름을 소스에 꼭 넣어서 사용해 주시기 바랍니다.

 질문은 메일로 보내주시거나 코멘트를 다시면은 답변을 드리도록 하겠습니다.

 

SPNote.SharePoint.Fields.zip (38.15 kb)