Alexey Sadomov, PhD, Sharepoint MVPhttp://sadomovalex.blogspot.com/
   Efficient way to troubleshoot issues, which are not    reproduced on dev environment   Page is opened in context of l...
   Example: trace info about thread principal and    currently logged Sharepoint user
   Example: trace info about thread principal and    currently logged Sharepoint user
   Enable features of C# 3.0 in _layouts pages via    web.config:   All features of C# 3.0 become available (e.g. lambda...
   Sharepoint 2013 preview:       Web sites are created with .Net 4.0 app pools       Default compiler is set to versio...
   Use when can’t solve problem with standard tools   Requires preliminary investigation of Sharepoint code:       JetB...
   Real life example:     Create instance of SPSite in        SPSecurity.RunWithElevatedPrivileges() method       Open ...
   Analyzing code of SPContext:
   Analyzing code of SPContext:
   Use knowledge of Sharepoint code and reflection for solving the    problem:
   ReflectionHelper code:
   Can be used for generating and executing a method at run time,    without having to generate a dynamic assembly and a ...
   Example: dynamic method for calculating factorial
 How it can be used in Sharepoint? Example: use Telerik RadEditor in all sub sites in web application  without feature a...
   Where problem is coming from? RadHtmlListField class:
   Solution:     Define new class inheritor of RadHtmlListField     Define OnLoad() by the same way as in RadHtmlListFi...
   Example: create dynamic method for skipping one tier in virtual members calls
   Camlex – open source project which simplifies creating of CAML queries for    SharePoint by using expression trees   ...
   Example of usage:   Direct translator:
   Camlex 3.0 Reverse Engineering – creates expression trees based on strings   Reverse Engineering translator:
   Camlex Re + ExpressionToCode = Camlex Online: http://camlex-online.org/ Simplifies usage of Camlex for developers who...
   Add conditions to existing string queries using lambda expressions:
   Expand ViewFields, GroupBy, OrderBy:
 Built-in to OS, doesn’t need VS for writing and running C# programs May be useful:     if you already have a code whic...
   Example: enumerate sub-sites using C# code in PowerShell
   http://sadomovalex.blogspot.com/   Use C# 3.0 features in application layout pages in Sharepoint:    http://sadomoval...
Upcoming SlideShare
Loading in...5
×

Using advanced C# features in Sharepoint development

902

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
902
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
9
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Using advanced C# features in Sharepoint development

  1. 1. Alexey Sadomov, PhD, Sharepoint MVPhttp://sadomovalex.blogspot.com/
  2. 2.  Efficient way to troubleshoot issues, which are not reproduced on dev environment Page is opened in context of living site, e.g. http://example.com/_layouts/test.aspx Do not require updates of wsp packages Do not require installations of dlls into the GAC Can be easily removed from production after troubleshooting without leaving security holes C# 2.0 is available by default for server scripts
  3. 3.  Example: trace info about thread principal and currently logged Sharepoint user
  4. 4.  Example: trace info about thread principal and currently logged Sharepoint user
  5. 5.  Enable features of C# 3.0 in _layouts pages via web.config: All features of C# 3.0 become available (e.g. lambdas, query expressions, etc.): see Overview of C# 3.0
  6. 6.  Sharepoint 2013 preview:  Web sites are created with .Net 4.0 app pools  Default compiler is set to version 4.0  It is possible to use features of C# 4 (e.g. dynamic types) in embedded server scripts without additional configurations
  7. 7.  Use when can’t solve problem with standard tools Requires preliminary investigation of Sharepoint code:  JetBrains dotPeek  Telerik JustCompile  Reflector Where to search Sharepoint dlls:  GAC  14/ISAPI  inetpub...mywebapp_app_bin
  8. 8.  Real life example:  Create instance of SPSite in SPSecurity.RunWithElevatedPrivileges() method  Open SPWeb  Code is executed under SHAREPOINTSystem account (app pool identity)  Call standard API which in turns uses SPContext.Current.Site or SPContext.Current.Web  Result: access denied page
  9. 9.  Analyzing code of SPContext:
  10. 10.  Analyzing code of SPContext:
  11. 11.  Use knowledge of Sharepoint code and reflection for solving the problem:
  12. 12.  ReflectionHelper code:
  13. 13.  Can be used for generating and executing a method at run time, without having to generate a dynamic assembly and a dynamic type to contain the method The executable code created by the just-in-time (JIT) compiler is reclaimed when the DynamicMethod object is reclaimed If the dynamic method is associated with specific type, it has access to all members of the type, regardless of access level Dynamic methods and their parameters do not have to be named Allows to avoid some limitations of C#: e.g. although dynamic methods are static methods the relaxed rules for delegate binding allow a dynamic method to be bound to an object, so that it acts like an instance method when called using that delegate instance
  14. 14.  Example: dynamic method for calculating factorial
  15. 15.  How it can be used in Sharepoint? Example: use Telerik RadEditor in all sub sites in web application without feature activations  RadEditorFeature – overrides rendering template for RichTextField with Telerik control  RadEditorFeatureIE – “flag” feature, depends on RadEditorFeature Technically it is enough to activate RadEditorFeature once For new sites:  Activate features manually  Use feature stappling for OTB site definitions  Modify onet.xml file for custom site definitions
  16. 16.  Where problem is coming from? RadHtmlListField class:
  17. 17.  Solution:  Define new class inheritor of RadHtmlListField  Define OnLoad() by the same way as in RadHtmlListField using reflection  Always return true from ShowEditorOnPage() method Inheritance chain:  AllBrowsersHtmlListField –> RadHtmlListField –> MOSSRadEditor The problem: how to call MOSSRadEditor.OnLoad() from AllBrowsersHtmlListField.OnLoad() without caling RadHtmlListField .OnLoad()?  I.e. we need to skip one tier in the inheritance chain and call virtual method OnLoad(), but not from base class, but from base of base class Answer: no how in standard C# Can dynamic method help here? Yes
  18. 18.  Example: create dynamic method for skipping one tier in virtual members calls
  19. 19.  Camlex – open source project which simplifies creating of CAML queries for SharePoint by using expression trees Uses expression trees and lambda expressions for generating CAML Simplifies creation of dynamic CAML queries when conditions are calculated in runtime Doesn’t require knowledge of CAML from developers Supports native .Net types and Sharepoint-specific types http://camlex.codeplex.com/
  20. 20.  Example of usage: Direct translator:
  21. 21.  Camlex 3.0 Reverse Engineering – creates expression trees based on strings Reverse Engineering translator:
  22. 22.  Camlex Re + ExpressionToCode = Camlex Online: http://camlex-online.org/ Simplifies usage of Camlex for developers who didn’t have experience with it yet Quick refactoring of existing hard-coded CAML queries to Camlex Fully reversible CAML query schema opens many interesting applications in future Example of combining of several non-trivial OSS projects
  23. 23.  Add conditions to existing string queries using lambda expressions:
  24. 24.  Expand ViewFields, GroupBy, OrderBy:
  25. 25.  Built-in to OS, doesn’t need VS for writing and running C# programs May be useful:  if you already have a code which want to reuse  have existing C# code which is hard to move to PowerShell  for developers who know C#, but only started work with PowerShell  if you want to run quick test, but don’t want to run VS and compile dll C# 3.0 can be used: -Language CSharpVersion3 Can specify existing assemblies or source code files
  26. 26.  Example: enumerate sub-sites using C# code in PowerShell
  27. 27.  http://sadomovalex.blogspot.com/ Use C# 3.0 features in application layout pages in Sharepoint: http://sadomovalex.blogspot.fi/2010/12/use-c-30-features-in- application-layout.html Use Telerik Rad Editor Lite without features activation: http://sadomovalex.blogspot.fi/2011/12/use-telerik-rad-editor-lite- without.html Generating Dynamic Methods with Expression Trees in Visual Studio 2010: http://blogs.msdn.com/b/csharpfaq/archive/2009/09/14/generating- dynamic-methods-with-expression-trees-in-visual-studio-2010.aspx Camlex project site: http://camlex.codeplex.com/ Camlex online: http://camlex-online.org/ ExpressionToCode: http://code.google.com/p/expressiontocode/ Materials from followings sites are used for presentation: http://newswallpapers1.blogspot.com, http://arts-wallpapers.com, http://www.fanpop.com, http://wallpaperswide.com, http://starwars.wikia.com
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×