Kraken SharePoint Code Has Been Downloaded
Over 2,100 Times Since We Released It In April 2016
Kraken is a set of open source libraries for SharePoint development. Kraken code is battle tested. It's been around since long ago; we started calling it Kraken in 2010 and older versions were known as Behemoth (SP2007) a.k.a. SPARK. The library includes code for full trust, sandbox solutions, client applications (CSOM), and most recently provider hosted apps.
Kraken is used as the underlying core library for most code written by Liquid Mercury Solutions. Specifically, we use it in Beowulf, CloudPower, and Chimera - but it's also used in our custom development projects.
If you like what Kraken does, but you aren't a prgrammer, please check our CloudPower our PowerShell management tools for SharePoint and SharePoint Online.
Five Things You Can Do To Help Us Make Kraken Great
Kraken is a labor of love, and releasing this much code into the wild wasn't an easy decision for us to make. You can reassure us we did the right things by doing one or more from the list below. Some are free, some won't take much or your time, and every action is sincerely appreciated.
#1 Give Liquid Mercury Solutions a 5 star review on Google:
You can use the link below to give us a good review. Write a Review is shown on our company profile in the right-hand column.
Providing a review for our DC location helps us the most, because DC is the biggest market for SharePoint work in our area and also the biggest user base (so far) for Kraken.
If you have a negative criticism, please reach out to us and give us the opportunity to make it right before you post a bad review. These things can really hurt and we all have our jobs
depending on this. Not being able to eat or pay our mortgages would be really out of proportion with our code having a few bugs. Please play fair.
#2 Buy us a pizza or some beer.
Did you find Kraken to be really valuable to a SharePoint project you were working on? We're not against taking a donation if you want to show your support.
Funds will be used directly to support the developers who helps make Kraken a reality. We don't expect to make tons of money this way, so whatever you contribute will buy nice things to feed our programmers, have a nice party, or that kinds of stuff. If you donate, we promise to send you a thank you letter and tell you exactly what we did with the money - probably with pictures. We may even put the results of your contribution up on our blog. ^_^
We're currently looking into Patrion and whether code qualifies as a work of art.
#3 Visit our Blog and leave a comment.
Writing blogs is hard work, with little reward. All our articles come from real Liquid Mercury staff members, so please tell our writers if you found their posts helpful.
#4 Visit our Google+ page and +1 our posts.
#5 You can help us make Kraken even better!
Latest Version of Kraken.SharePoint.Client is 0.2.0
Here's some things we've updated since our first release in April 2016:
- 0.2.0: Introduces additional overloads for getting all items from a list with pagination. Updated code projects to VS2015 Update 3.
- 0.1.55: Fix: OK I did something boneheaded and included the field properties without loading the collection.
- 0.1.54: Fix: The collection has not been initialized. in UpdateItem because now somehow we are asking for field internal name before ever getting it from CSOM. Must've rubbed something out during the refactoring that included consolidation of several executeQuery and introduction of ExceptionHandlingScope.
- 0.1.53: Fix: NullReferenceException on updateitem because null check and operation were transposed in code; added a null check and warning to LoadProperties method just in case.
- 0.1.52: Experimental: Combine createitem from 2 callbacks to one in order to resolve property not loaded. Still calls csom 2nd time for extended values in the property hash table.
- 0.1.51: Experimental: rewriting some ExceptionHandlingScope so they are properly implemented, added correct method to capture error messages.
- 0.1.50: Experimental: rolling back some exception handling scope for item creation because it was conflicting withscopes in other methods
- 0.1.49: Fix: Corrects a bug introduced in 0.1.45 that CreateItem/UpdateItem did not properly load BaseType because of a bug where it tried to get this from item instead of list. Added more verbose trace logging to item creation.
- 0.1.48: Fix: Obscure issue for Calculated fields and those with a (default value that is a formula) where the presence of FriendlyDisplayFormat in the SchemaXml seems to be causing "cannot complete this action" when you try to update the field or retrieve any list property related to the 'corrupted' field schema.
- 0.1.47: Experimental: Isolated problem to loading properties of a list that aren't allowed. Modified LoadAllProperties, LoadProperties, and EnsureProperty to include a debugging mode that will execute a query after each property so we can isolate which property causes the issue.
- 0.1.46: Experimental: Second attempt; rewrote exception handling scope fromt eh ground up for UpdateItem.
- 0.1.45: Experimental: First attempt to add exception handling scope to item add/update functions. Still getting "cannot complete this action" on call to UpdateItem but believe it is coming from an earlier CSOM call.
- 0.1.44: Experimental: Testing a fix for IsDocumentLibrary where sometimes trying to load list.BaseType throw "cannot complete this action"
- 0.1.43: Fix: web extension CreateOrUpdateFriendlyUrl did not propertly call context.Load for Id from the term set. Doesn't need to call context.ExecuteQuery twice. Additional logging to indicate success on finding prent friendly url's term.
- 0.1.42: Fix: web extension CreateOrUpdateFriendlyUrl fails to properly return new friendly Url due to Uri formatting issue.
- 0.1.41: Minor fix: web extension CreateFriendlyUrl renamed to CreateOrUpdateFriendlyUrl; now outputs Uri instead of string; output params fixed to provide a value on both create and update.
- 0.1.40: New commands: Added web extensions for working with global and local navigation properties as well as creating new friendly urls in navigation term set. Changes from 0.1.39 and earlier have been tested and seem to be working OK.
- 0.1.39: Experimental: Added list extension IsDocumentLibrary(); eliminated ClientContext extension Init() in favor of ClientObject extension EnsureProperty() because it's purpose is more intuitive and will often result in fewer lines of code. Made sure that BaseType is always loaded in in List and ListItem extensions UpdateItem().
- 0.1.38: Experimental: Identified NullReferenceException from 0.1.37 only occurs in doc libs when Title field is empty. Adding code to use FileLeafRef instead where needed.
- 0.1.37: Experimental: Fix for NullReferenceException in List extension UpdateItem.
- 0.1.36: Experimental: Added same error checking logic at the List extension UpdateItem level.
- 0.1.35: Experimental: Additional logging and error checking for ListItem extension item Update().
- 0.1.34: Minor bugfix for Content type extension AddFieldLink; some fixed to FieldTypeAlias
- 0.1.33: Content type extension AddFieldLink now loads the FieldLinks collection in content type so properties can be used properly.
- 0.1.32: Fixed issue in web extention GetSiteColumn where attempt to read URL safe for SharePoint 2010 causes a CSOM error.
- 0.1.31: All FieldLink creation (add Site Column to content type) extensions now return a FieldLink object on success or null on fail, saving another call to CSOM to get this later.
- 0.1.30: Fixed an issue in FieldProperties affecting validation of optional nullable properties. This bug was having an impact on commands for creating and setting field and site column properties.
- 0.1.29: New commands: Added GetWebTemplates extension to quickly get OOTB or custom web templates for the site collection.
- 0.1.28: Fixed a bug in web extensions TryGetList that caused it to fail under certain conditions where the list does not exist but SharePoint returned a ServerException that didn't meet the evaluation criteria.
- 0.1.28: Added executeQuery param to web.GetContentTypesInGroup
- 0.1.27: Fix for missing property load in web.GetContentTypesInGroup; added prototype class to implement workfor extension methods
- 0.1.26: Fixing logs for list extension method EnsureRemoteEvent so they correctly report the event they are attaching.
- 0.1.25: Added pseudo-enum class StandardNavigationProviderNames.
While Kraken has been around a while, it is still actively being developed and improved, since it is used in our products and other work we do.
Currently Published Nuget Projects / Visual Studio Solutions:
If you like, you can scroll down a bit where we go into detail about each package and what it includes.
How to Start Using Kraken
Literally. Install the package in your project, then add a "using" statement for one of the following namespaces, and go to town! (Update: Tom recently changed some of the namespaces in Kraken client project so that extensions will start showing up the minute to reference "Microsoft.SharePoint.Client".) The libraries were designed to use extension methods as the primary entry points for most of the useful functionality, so you'll start to see those functions attached to SharePoint objects that you already use.
- Kraken.SharePoint - sandbox and full trust server-side code
- Kraken.SharePoint.Client - CSOM code
- Kraken.SharePoint.Apps and Kraken.Apps - for provider hosted apps
If you want to know more, download the source. It's full of comments. We'll try and get some documentation published soon.
Full source code is now hosted on GitHub at https://github.com/LiquidHg/kraken and is publicly available. Thanks to everyone who downloaded and supported us. We hope you will consider contributing to our project.
At the present time the source itself is not embedded in the src folder for the packages. That's not by design; we just lack enough manpower to get it done yet. We're looking to change that very soon.
We could REALLY use your help. Visit our page about
areas of improvement to see what we know we can do better.
Summary of Kraken Projects
Kraken.Core.FullTrust - anything that isn't specifically SharePoint but might be useful in development of SharePoint projects. This project is reserved for code that might require elevated privileges or "full trust" to run on a SharePoint server.
Kraken.Core.SandboxTrust - again anything not specifically SharePoint. We use this project for code that can run in limited trust environments, such as Sandbox Solutions or SharePoint hosted apps.
Kraken.Security - a certain class of reusable security functions which are useful in both limited trust applications as well as client-side code. They were seperated into their own project so that they can be consumed in both server-side and client-side models without having to pull the entire server-side code base.
Kraken.SPFarmLibrary - Core WSP package for building farm trust solutions for SharePoint. Has everything we've got in one package.
Kraken.SPLoggingCategories - WSP package for ULS logging categories. This was seperated into its own solution because of dependencies that force it to be installed to the farm using unusual methods. This project is included in Kraken.SPFarmLibrary.
Kraken.SPSandboxLibrary - Proejct that can be uploaded as a sandbox solution. In general, this assembly is referenced directly in other Sandbox packages, rather than being uploaded as its own WSP.
Kraken.SharePoint.Client - Code library extending the functionality of Microsoft.SharePoint.Client (CSOM). Most methods in this library are implemented as extension methods of existing CSOM objects, which makes it easy to start using it in your own projects quickly.
Kraken.SharePoint.Cloud - Older code library that leverages the SharePoint web services and other legacy methods for accessing SharePoint over a network. It doesn't come up very often, but we occassionally find places where things still need to be done this way. This project is included in Kraken.SharePoint.Client.
Kraken.SharePoint.Apps - This is our library of useful code for writing provider hosted apps for SharePoint. Right now it includes a compiled version of TokenHelper and other classes commonly included in provider apps. We've also added useful classes for writing remote events with behavior similar to suspended events, and an EF project for pushing trace logs to SQL Azure. Other functionality is in the works and will be added as we pull more reusable utility classes out of our individual app projects.