Monday, September 29, 2014

New features released for app Processlynx Custom Action and Ribbon Manager

As defined in the roadmap for the Processlynx Custom Action and Ribbon Manager a new list of features are launched that could help site administrators and developers to create their Customization in SharePoint Site, this tool has been very usefull to support my custom solution using Office 365 and SharePoint on-premise environments where is not possible to access Farm solutions and Sandbox solutions are not allowed. 
To better support the client requirements and don't break the customer policies and avoid endless time and documentation for deployment of solutions this app has support me to better response Collaborative enviroments in big corporations with very restricted environments 

For more infor about the 

Processlynx Custom Action and Ribbon Manager:

Processlynx Custom Action and Ribbon Manager Demo "Office Store": 

Processlynx Custom Action and Ribbon Manager new features:

  • Versioning and Restore of UserCustomActions
  • Export of UserCustomAction Metadata using JSON
  • Import of UserCustomAction using JSON
  • Prefix and Suffix in UserCustomAction Names
  • Copy of existing UserCustomAction
Here a list of all features from the App:

Create User Custom Actions
The app Manage the User Custom Action, this new model helps site administrators and developers to create their new solutions in SharePoint sites when there is not access to Farm Solutions or in Office365 enviroments.
Ribbon Manager Editor
The app provide a user friendly interface to create complex custom Ribbons with Code and images associated.
Recycling Bin (host-web and app-web)
The app provide a Recylcing bin where administrators can delete the User Custom Action and restored. The recycling bing can be located and defined as "Host-web" or "App-web".
Language Support
The app supports the following languages:

  • English
  • German
  • French 
  • Portuguese
Code Source Editor
The app uses a code source editor to help developers to create their custom Action code that could be associated to items/links/actions in the SharePoint Custom Actions/Ribbons
App Log
The app provides and Log feature that helps Administrator to track possible permissions or code issues in the solution.
Copy User Custom Actions
This option copy existing User Custom Action and provides a form for the new User Custom Action.
Export/Import User Custom Actions
This Export/Import option uses JSON structure to Export/Import the content of the user Custom Actions. This exported JSON can be used to import the Custom Action in other SharePoint sites using a very simple user interface.
Prefix and Suffix User Custom Actions
The App provides interfaces where users can define Prefix and Suffix for new User Custom Actions using the App solution.
This can be useful to manage custom action created by the tool and separate from external Custom Actions.
The app provides 2 different views of the User Custom Actions with Modern UI View and Table View. 
Theme integration
The app uses the same Theme from the Host-web site to better integrated the look and feel of the solution to the SharePoint Site.
The app provides a simple help for the creation of the custom actions and ribbon using the interface from the solution.

Versioning and Restore of UserCustomActions

This new feature list all User Custom Action versions with their changes, it's is possible to restore the different version with the associated code.

Export of UserCustomAction Metadata using JSON

This feature export the JSON data of the User Custom Action, this content can be used to export complex User Custom actions for example Ribbon with complex strucutre and code associated.

When the option is selected the JSON data is display in a new form to be copy and content changed.

Import of UserCustomAction using JSON

This feature import the JSON data of the User Custom Action, this content can be used to create complex User Custom actions for example Ribbon with complex strucutre and code associated from existing User Actions in SharePoint Site.

Pick the exported JSON data used from to export the existing content of the User Custom Action and paste in the "Import User Custom Action" form.
After click save a new User Custom Action should appear in app View.

Prefix and Suffix in UserCustomAction Names

This option give the site administrator/developer to create complex Custom Actions using the app and define by default a Prefix and Suffix Name when a new action is created.
This feature can be useful when you need to manage Multiple Custom Actions. the option helps you to define the ones created by the App and the others created by external features.

When the option is selected in the configuration tab, a new form appears where you can add the Prefix and Suffix of the new User Custom Actions created by the tool.
For this example was created a user custom action by the App call "Example" with a simples script.

After the Action is created should be displayed in the view with the Title of the Action.

When the edit option is selected the CustomAction the Name propertie is changed with the Prefix and suffix defined in the new configuration option:

Copy of existing UserCustomAction

This action can be useful to reuse/recreate complex custom actions/Ribbon and make the necessary changes to better response the client needs.

When the option is selected a Form is create where the site administrator/developer can provide a new name for the Custom Action.

After the Title is added the copy User Custom Action should appear in the view of the app.

Hope you enjoy this new article,
Kind regards, 
André Lage

Wednesday, September 24, 2014

It is SharePoint Permission call FullMask or "NearFullMask" in CSOM?

This Post is about SharePoint JSOM and RESt and how SharePoint deals with FullMask Permission in Client Side Object Mode and what means High and Low Properties in BasePermission Object on SharePoint Object Model.

This topic was first talked and promissed in the following post:
How to Convert REST Call to SharePoint JSOM Object (ECMAScript)

when we configure permission of user permission it is possible to define some type of permissions templates to users or some Web Object like "UserCustomActions", the same way we do with declarative XML.
But when i was making and my SharePoint App "SharePoint App Processlynx Custom Action and Ribbon Manager Launch" and was validating the permission field found out that FullMask is not really FullMask.... here are my findings.

Here are the results about the “BasePermissions” Issue in SharePoint Client Object Model (SP.BasePermissions) and REST:

This are the values of all possible “PermissionKinds” im SCOM (split in two parts – the low and high “PermissionKinds”) :
For the low “PermissionKinds” from 1 to 32:
01: 0000000001: 0000000000000000000000000000001: ViewListItems
02: 0000000002: 0000000000000000000000000000010: AddListItems
03: 0000000004: 0000000000000000000000000000100: EditListItems
04: 0000000008: 0000000000000000000000000001000: DeleteListItems
05: 0000000016: 0000000000000000000000000010000: ApproveItems
06: 0000000032: 0000000000000000000000000100000: OpenItems
07: 0000000064: 0000000000000000000000001000000: ViewVersions
08: 0000000128: 0000000000000000000000010000000: DeleteVersions
09: 0000000256: 0000000000000000000000100000000: CancelCheckout
10: 0000000512: 0000000000000000000001000000000: ManagePersonalViews
12: 0000002048: 0000000000000000000100000000000: ManageLists
13: 0000004096: 0000000000000000001000000000000: ViewFormPages
17: 0000065536: 0000000000000010000000000000000: Open
18: 0000131072: 0000000000000100000000000000000: ViewPages
19: 0000262144: 0000000000001000000000000000000: AddAndCustomizePages
20: 0000524288: 0000000000010000000000000000000: ApplyThemeAndBorder
21: 0001048576: 0000000000100000000000000000000: ApplyStyleSheets
22: 0002097152: 0000000001000000000000000000000: ViewUsageData
23: 0004194304: 0000000010000000000000000000000: CreateSSCSite
24: 0008388608: 0000000100000000000000000000000: ManageSubwebs
25: 0016777216: 0000001000000000000000000000000: CreateGroups
26: 0033554432: 0000010000000000000000000000000: ManagePermissions
27: 0067108864: 0000100000000000000000000000000: BrowseDirectories
28: 0134217728: 0001000000000000000000000000000: BrowseUserInfo
29: 0268435456: 0010000000000000000000000000000: AddDelPrivateWebParts
30: 0536870912: 0100000000000000000000000000000: UpdatePersonalWebParts
31: 1073741824: 1000000000000000000000000000000: ManageWeb
65: 0000065535: 0000000000000001111111111111111: FullMask

And for the high “PermissionKinds” from 33 to 64:
37: 0000000016: 0000000000000000000000000010000: UseClientIntegration
38: 0000000032: 0000000000000000000000000100000: UseRemoteAPIs
39: 0000000064: 0000000000000000000000001000000: ManageAlerts
40: 0000000128: 0000000000000000000000010000000: CreateAlerts
41: 0000000256: 0000000000000000000000100000000: EditMyUserInfo
63: 1073741824: 1000000000000000000000000000000: EnumeratePermissions
65: 0000032767: 0000000000000000111111111111111: FullMask

As you can see the “FullMask” don’t cover all permissions. In the low “PermissionKinds”, the permissions from “Open” to “ManageWeb” and in the high PermissionKinds, the permission “EnumeratePermissions”, are not included.

The “FullMask” should be like this to cover all “PermissionKinds”:
65: 2147483647: 1111111111111111111111111111111: FullMask

To only cover all now available permissions, the “FullMask” could be also like this:
For the low “PermissionKinds”:
65: 2147425279: 1111111111111110001101111111111: FullMask

And for the high “PermissionKinds”:
65: 1073742320: 1000000000000000000000111110000: FullMask

In the (Server) SharePoint Object Model (Not Client) everything is correct:
0000000000000000001: 000000000000000000000000000000000000000000000000000000000000001: ViewListItems
0000000000000000002: 000000000000000000000000000000000000000000000000000000000000010: AddListItems
0000000000000000004: 000000000000000000000000000000000000000000000000000000000000100: EditListItems
0000000000000000008: 000000000000000000000000000000000000000000000000000000000001000: DeleteListItems
0000000000000000016: 000000000000000000000000000000000000000000000000000000000010000: ApproveItems
0000000000000000032: 000000000000000000000000000000000000000000000000000000000100000: OpenItems
0000000000000000064: 000000000000000000000000000000000000000000000000000000001000000: ViewVersions
0000000000000000128: 000000000000000000000000000000000000000000000000000000010000000: DeleteVersions
0000000000000000256: 000000000000000000000000000000000000000000000000000000100000000: CancelCheckout
0000000000000000512: 000000000000000000000000000000000000000000000000000001000000000: ManagePersonalViews
0000000000000002048: 000000000000000000000000000000000000000000000000000100000000000: ManageLists
0000000000000004096: 000000000000000000000000000000000000000000000000001000000000000: ViewFormPages
0000000000000008192: 000000000000000000000000000000000000000000000000010000000000000: AnonymousSearchAccessList
0000000000000065536: 000000000000000000000000000000000000000000000010000000000000000: Open
0000000000000131072: 000000000000000000000000000000000000000000000100000000000000000: ViewPages
0000000000000262144: 000000000000000000000000000000000000000000001000000000000000000: AddAndCustomizePages
0000000000000524288: 000000000000000000000000000000000000000000010000000000000000000: ApplyThemeAndBorder
0000000000001048576: 000000000000000000000000000000000000000000100000000000000000000: ApplyStyleSheets
0000000000002097152: 000000000000000000000000000000000000000001000000000000000000000: ViewUsageData
0000000000004194304: 000000000000000000000000000000000000000010000000000000000000000: CreateSSCSite
0000000000008388608: 000000000000000000000000000000000000000100000000000000000000000: ManageSubwebs
0000000000016777216: 000000000000000000000000000000000000001000000000000000000000000: CreateGroups
0000000000033554432: 000000000000000000000000000000000000010000000000000000000000000: ManagePermissions
0000000000067108864: 000000000000000000000000000000000000100000000000000000000000000: BrowseDirectories
0000000000134217728: 000000000000000000000000000000000001000000000000000000000000000: BrowseUserInfo
0000000000268435456: 000000000000000000000000000000000010000000000000000000000000000: AddDelPrivateWebParts
0000000000536870912: 000000000000000000000000000000000100000000000000000000000000000: UpdatePersonalWebParts
0000000001073741824: 000000000000000000000000000000001000000000000000000000000000000: ManageWeb
0000000002147483648: 000000000000000000000000000000010000000000000000000000000000000: AnonymousSearchAccessWebLists
0000000068719476736: 000000000000000000000000001000000000000000000000000000000000000: UseClientIntegration
0000000137438953472: 000000000000000000000000010000000000000000000000000000000000000: UseRemoteAPIs
0000000274877906944: 000000000000000000000000100000000000000000000000000000000000000: ManageAlerts
0000000549755813888: 000000000000000000000001000000000000000000000000000000000000000: CreateAlerts
0000001099511627776: 000000000000000000000010000000000000000000000000000000000000000: EditMyUserInfo
4611686018427387904: 100000000000000000000000000000000000000000000000000000000000000: EnumeratePermissions
9223372036854775807: 111111111111111111111111111111111111111111111111111111111111111: FullMask

In the “Microsoft.SharePoint.Client.dll”  there is a limitation value in the BasePermission” class:
In the function “Set”:

And in the function “Has”:

So the possible value of “FullMask” must be increased for the high values from 32767 to 2147483647 and for the low values also from 65535 to 2147483647 to cover all permissions or for the high values from 32767 to 1073742320 and for the low values also from 65535 to 2147425279 to cover only the now available permissions.
Only then the “PemisionKind FullMask” will really cover all available permissions.
But maybe Microsoft for security reasons limited this values....

Thanks to my colleague “Selim Gezgin” for collecting all this info about this topic.

Kind regards, 
Andre Lage

Wednesday, September 10, 2014

35º Meeting of the Portuguese SharePoint User Group

The next Saturday, 13 of september will be the 35º Meeting of the Portuguese SharePoint User Group.

If you are in Lisbon in this date and if you like SharePoint the event will be made in the Portuguese Microsoft Offices located in the following link:

Link for the event:

Here a overview of the Sessions:

Manage, govern and drive adoption of SharePoint Online with PowerShell and CSOM
To achieve a successful deployment SharePoint Online for the Enterprise
requires to be driven by well-defined Governance policies and procedures.
Automation plays a key role to increase manageability and drive adoption in a controlled an structured way.

In this demo-oriented session you will learn how to manage, govern and
monitor the adoption of SharePoint Online sites
by using Windows PowerShell, CSOM and automation.
Nuno Oliveira Costa, Microsoft

Bio-Sketch: Working in SharePoint related technologies since version

2003.He joined Microsoft since 2010, and he spends most of his days supporting

premier Portuguese customers, helping them to improve their business
by having a healthy SharePoint Infrastructure and a strong knowledge in SharePoint onprem and Online technologies.
João Oliveira, Microsoft

Bio-Sketch: Background as consultant, developing SharePoint solutions

for Intranet as well as public-facing portals.

As PFE EMEA, I support mainly Portuguese and European customers with SharePoint both onprem and Online, by delivering proactive services
(SharePoint RAPs, Workshops, onsite custom support) as well as reactive services.

Collaborative SharePoint and JavaScript "Real World"
Overview of different techniques in Javascript and JSOM/REST to support and create solutions for collaboratives Sites (Office365/SharePoint 2013/SharePoint 2013 Foundation).

-Overview of SharePoint Javascript Object Model (JSOM) and REST
-Support Javascript plug-in in SharePoint
-Jquery, AngularJS, Knockoutjs,
-Object Oriented inJavaScript and Business solutions
-Site Customization using Javascript
-Manage Scriptlinks, Ribbons and Custom actions as plataform of development
-Manage Code, versions and cache issues
-Client Side Rendering (CSR)
-Manage Minimal Download Strategy with JavaScript
-Intregration of SharePoint-Hosted App parts to Host-Web
-Support Tools
André Lage, Datalynx

Bio-Sketch: SharePoint MVP, Systems Architect, Technical Leader and Consultant on SharePoint Corporate Portals with international focus.

Supports the major communities and Microsoft Sharepoint Forums Microsoft, and also participates in Sharepoint community,

Focusing on SharePoint technologies and development of SharePoint applications in Office Store or Codeplex.

Speaker in different Conferences about SharePoint such us, Techdays in Portugal, Community days in Spain, Collaboration Days in Switzerland, ask the expert "SharePoint" in Swiss Techdays, speaker on SharePoint Iberian Conference in Spain and speaker on SharePoint User group in Portugal.