Haaron Gonzalez – Blog in English Rotating Header Image

Support

How to make some other security groups the default ones in SharePoint and SharePoint Online

This week had the opportunity to learn how to configure some other security groups in SharePoint to be the default ones on a given site. Had the scenario where some Site Collection Administrators needed to create beforehand new security groups and assign the members. Then when new sub site was created admin selected the specific security groups, but what happen with the other sites that already exists?  In those cases we use the /_layouts/permsetup.aspx page to redefine the default groups.

So, just navigate to the site and use the system page, then just pick and choose the groups you want.

Old school SharePoint tip

Good day colleagues, while supporting SharePoint 2010 custom application, suddenly new requirement out of the blue came up.  They said, stakeholder says that it will be great if this form can be accessed in a kiosk inside the plant, can you make it happen? Oh, and please remove the navigation stuff like the left and top links so kiosk will display only the form, no navigation or any other thing that may confuse people.

As a developer, you will think, not a problem I can use some CSS to hide some classes. But there is another simple way to get around about this, just add the:

http://yoursiteURL/Pages/DTCode.aspx?IsDlg=1 parameter in the query string of your URL and that will remove top navigation, top ribbon section, quick launch and will leave the whole page just for your web part.

 

Unsupported expression in good old InfoPath

Even though Is been announced that InfoPath is deprecated, but supported until April 2023 you can read more here  the reality is that there is a significant amount of customers that still rely on the InfoPath form based solutions for dealing with data entry challenges in the organization on a daily basis. As a consultant, I currently support multiple clients on InfoPath Form related issues.

Today I want to talk about a recent discovery and of course share the solution.

This is a custom list with an InfoPath list form used for storing OA’s (Operational Activities) assignment information, of course, this list has a bunch of fields for specifying the type, who is assigned to, location and most importantly how many hours per week (52 weeks) during the year each OA will take.

Operational Activities InfoPath based Form

Notice the Duration in Hours field, basically this field is automatically calculated based on the number of hours specified on each week. How many weeks do we have during a year? 52 weeks. So, you can guess that the formula to calculate the duration field will be something like this:

Formula for counting the hours on all the week’s during the year

 

 

 

But as soon you want to publish the Design Checker throws an error stating an Unsupported expression error.

Unsupported Expression Issue in InfoPath

After some research found out that the problem was more related to the size of the expression. So, be careful of creating huge long calculation expressions. What I did was to create 4 fields that represent each Quarter and add the formula to calculate the weeks for Q1, Q2, Q3 and Q4. Then I modified the formula in the Duration field to use the 4 quarter fields, something like: Q1+Q2+Q3+Q4.

Bottom line, you never stop learning a technology, even though is a deprecated one.

Prevent Document Download in SharePoint Online

Good day colleagues, wanted to share with you all how to configure a document library that doesn’t allow users to download his content. In our scenario here is to expose a document library to a group of people inside the company, but the requirement was that these people shouldn’t be able to download the content, this is just a document library for content consumption, no collaboration at all and of course read only for visitors.

It is simple to achieve the desired outcome because there is a permission already in the system that allows us exactly what we need, but it has some limitations that you should know first before you commit to deliver what business ask us to do.

As general understanding please read the following descriptions about the permissions already available in SharePoint, please read to the end because you will see what permissions makes sense for us to use.

  • Full Control – Has full control.
  • Design – Can view, add, update, delete, approve, and customize.
  • Edit – Can add, edit and delete lists; can view, add, update and delete list items and documents.
  • Contribute – Can view, add, update, and delete list items and documents.
  • Read – Can view pages and list items and download documents.
  • View Only – Can view pages, list items, and documents. Document types with server-side file handlers can be viewed in the browser but not downloaded.

Yes, the View Only permission gives us the required behavior. In other words, this permission allows us to visualize documents inside a browser (of course with the help of Office Web Apps or Office Online Server) and documents cannot be downloaded. The question here is: What are the documents we can visualize in the browser using Office Online Server? The answer is Only Office Documents and what Office Documents are we talking about? Word, PowerPoint, Excel.

This means that:

PDF or any other file type that is not an office document can be downloaded ☹

Let’s explore how to configure this:

  1. Create a security group that has the View Only permission
  2. Create and configure a document library
  3. Test with another user that the download is not possible

Let’s see it in action here in this video, since now, thanks for reading, thanks for watching, thanks for sharing.

Formulas to get the first and last row on a repeating table in InfoPath

You know, you wake up knowing that is going to be a wonderful day working for a customer with the software products you love. During today on-site support session, you found out that is needed to write some good old XPath formulas on an InfoPath form.

There is a repeating table with the columns necessarily to describe travel information like Departure Date, Return Date, City, you named and the requirement was to expose the initial Departure Date and the last Return Date of the entire trip, so, what do we mean with entire trip? I maybe start a trip from San Diego to Mexico City, and then another trip from Mexico City to Seattle and then from Seattle to Las Vegas. Clearly, the Departure Date and Return Date are not associated with just one row “trip” in the repeating table because I have at least more than one row for describing all the trips.

The data structure of the repeating table is:

 

 

structure

So, here are the formulas to get the first and last row on a repeating table.

../my:TravelInfo/my:TravelInformation[count(preceding-sibling::my:TravelInformation) = 0]/my:DepartureDate

../my:TravelInfo/my:TravelInformation[count(following-sibling::my:TravelInformation) = 0]/my:ReturnDate

Fortunately, the approach work as a charm. No C# code saved the day today. Pure old good XPath did it. InfoPath, you are definitely the sunshine of my love, especially now that you will be supported until 2026 baby.

 

A quick tale from the SharePoint support trenches

Basically, the customer had a workflow, build in SharePoint Designer 2010 that will use some of the out of the box Actions like the Pause for Duration and Send Email. The issue was that once the workflow paused for a minute it wasn’t able to resume the work, leaving the workflow always running “In Progress”. Doing some research found KB2674684 SharePoint 2010: Workflow failed to run after pause and according to the description made me remember my good old ASP.NET developer days.

The bottom line is that SharePoint on premise is ultimately a Microsoft ASP.NET solution that works with multiple windows services and related Microsoft technologies/servers. From the web perspective Web Server Controls, Web User Controls, HTTP Handlers, Web Services, AJAX, ASPX pages, assemblies, web.config, page directives and so on are just pieces that work together to deliver a page that end users to consume.

Turns out that if you have the Workflow Timer Service started on a server that is running as an Application Server role “App” and you don’t have the SharePoint Foundation Web Application service started “basically the WFE role”, workflows will fail rehydrating the workflow when resume from a pause action, the reason why?, is because in order to rehydrate a paused workflow SharePoint needs to read some settings from the running web application web.config file, but because we have only the “App” role and not the “App/WFE” role running, it fails loading from the required Web Application the web.config file, because THERE IS NO web.config to load for that particular web application in the App server. The App Server without the SharePoint Foundation Web Application Service started only has available the Central Administration web application, not those additional web applications that WFE have available in IIS as a web site.

According to the article there are three methods for solving this issue:

  • Method 1: Locate one Web Front End server, which has Web Application service running, run the following PowerShell command to copy workflow-related configuration from the web.config to the configuration database so it will be available from every server in the Farm.

$webapp = Get-SPWebApplication -identity http://<web app name>

$webapp.UpdateWorkflowConfigurationSetttings()

  • Method 2: Start the Web Application Service on all servers that have the Workflow Timer Service is running.
  • Method 3: Disable the Workflow Timer Service on servers that are not running the Web Application service.

I decided to use Method 3 because we have dedicated App server and dedicated WFE server.

By the way, if you have Nintex Workflow installed in your farm, what just explain also apply. Nintex Workflow should run only n WFE servers, so make sure you Workflow Timer Service is stopped on all app servers in your farm.

Thanks for reading!

How to restore the SharePoint Web Services IIS Web Site if accidently deleted

What NOT to do
What NOT to do
Extend Web Application to Another IIS Web SIte

This week one of my clients had a particular issue that I found very funny. Turn out that someone a.k.a MySite killer decide to use “SharePoint Web Services” IIS web site to host a new extended web application.  As you may know, “SharePoint Web Services” IIS web site it’s a common web site that other service applications use, so it’s very important to leave intact and without any changes. SharePoint Configuration Wizard a.k.a PSConfig.exe provisions this web site.

But you know, things happen, for those who are new to the platform and are not familiar with the UI they can make mistakes thinking that Use and existing IIS web site is the same that Use an existing application pool. And also once noticing that extended web application is not working you can always remove extended zone and guess what? You will erase the Root folder that SharePoint Web Services IIS web site is pointing and that’s too not good.

Found this amazing article but didn’t work, the reason was that Root folder is missing and IIS web site is not properly referenced. I decide to copy Root folder from other server, dropped on C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\WebServices\ and run it again. It works properly.

Now client SharePoint farm it’s working just fine.

Hope it helps!