Monday, September 10, 2012

Configuring Apache Reverse Proxy with CouchDB

There's an esoteric title. Having not found anything straightforward during many plaintive querying pleas, thought I'd mention how I did it.

First, the topography I wanted was a single apache server fronting multiple CouchDB instances. CouchDB is kinda/sorta a web server as well so you really don't want to bind it to port 80. Rather you want apache on port 80 doing its thing and then a CouchDB instance each using its own port for each namespace you want to manage. This namespace becomes the pivot point for the reverse proxy.

First you will want to load the apache reverse proxy modules. I found the best help on that subject here.

Next, the actual reverse proxy entries. Here the key is CouchDB uses a URL based naming scheme starting with the database name. If you create a database called 'company', then you will access it with 'http://localhost:5984/company'.

Note that port 5984 is the 'default' port CouchDB uses.

Back to the original question-- why do I need an apache reverse proxy with my CouchDB? Because I want apache to handle familiar port 80 url requests and use Javascript to communicate with the CouchDB instances on the same machine using different ports (each CouchDB instance needs its port). This of course is denied due to cross-site scripting rules.

So using the 'company' example, the solution is to add this to your httpd.conf:

ProxyRequests Off
<Proxy *>
Order deny,allow
Allow from all
<Location /company>
ProxyPass http://localhost:5984/company
ProxyPassReverse http://localhost:5984/company

Wednesday, July 11, 2012

Getting the SharePoint Tasks to Order like MS Project Tasks

When you create a schedule in MS Project, each task you create has a number associated with it to help you keep track of its ordinal position within the plan. This is so helpful that most folks associate this behavior as part of any task list.

So it may come as a surprise that the default SharePoint task list doesn't.

Now, that's not entirely true, as each task in a SharePoint task list does in fact have an ID. But it's not the same as the ordinal value within MS Project. Rather, it is the unique ID value for that item within the SharePoint task list. Worse yet, the default view for a task list sorts on this SharePoint ID value. This means the very first time you share an MS Project plan to SharePoint, the task ordering will match within the SharePoint task list. However, as you move things around within MS Project, you will notice the SharePoint task list becomes more and more detached from your expected sorting.

The solution? Put in your own ordinal support with our IntelliGantt Add In and Web Part. Here's how:

First create an Ordinal column in your SharePoint task list:

Next, within your shared MS Project plan, click on the settings to bring up the big fields dialog. Note the 'Ordinal' field at the top of the list:

Click on the checkbox cell in the 'To SharePoint' column. This will send the MS Project Task ID values to the SharePoint Ordinal column. (The Add In does not support 'From SharePoint at this time):

Save the settings. Now we will want to send the MS Project task ids to SharePoint. So click the 'Upload' button in the add in:

Now when we view the plan in SharePoint we will see the exact same MS Project task ids in the Ordinal column:

So why did we have to call it 'Ordinal' again? Because SharePoint already has its own ID field. In fact, we have one more thing to do-- change the view associated with the task list to sort by our Ordinal value instead of the built-in SharePoint ID:

Done! Now the task order in your SharePoint task list and IntelliGantt Web Part will always match the same task order in MS Project

Monday, April 16, 2012 Now Supported

A quick note that the IntelliGantt Add In for MS Project 2010 Standard or Professional now supports Office 365 and This means you can share projects to internal SharePoint sites using your regular windows credentials, to external SharePoint sites using Forms Based Authentication or to sites using Claims Based Authentication. The nice thing about all these options? You don't have to worry about selecting the right one, our IntelliGantt Add In figures it out for you.

Our IntelliGantt Web Part has of course been working with SharePoint online for a while. Now that the IntelliGantt Add In communicates with SharePoint online as well, the best way to sync and interact with tasks is ready. You have full mapping features available so that you can choose whether a field is updated bidirectionally, or is only owned by MS Project. This means no one will ever overwrite your start and due dates in MS Project again.

Here is the 'proof' screenshot:

But really, there's no better way than to check it out.

Monday, April 09, 2012

Better Way to Set Web Part Height

We've had customers ask us the best way to set the height of our IntelliGantt Web Part for SharePoint, which at first we thought was kind of odd as every SharePoint web part supports height and width adjustment as part of its Appearance. However, we quickly noticed that a Silverlight web part behaves differently. For example, if you set a specific height, then you get an unnecessary vertical scroll bar that is quite hackneyed. Worse yet, if you used the vertical scroll bar you noticed the specified height of the web part was duplicated with empty space as you scrolled down. This is due to a CSS style sheet being used (overflow:auto) that you cannot unset (ie. overflow:hidden).

So after a bit of experimentation we decided to introduce another way- our own 'Pixel Height' field so that behavior matches expectations. What you will want to do is set the 'Appearance' height to 'No, adjust height to fit in zone'. Then, in our 'IntelliGantt' category, you can specify the height in pixels you prefer. With this, we can explicitly tell SharePoint the height to use for the web part-- and no vertical scroll bar. For example:

Wednesday, March 28, 2012

Merging SharePoint Events and Tasks in One View

In our last post we saw how we can publish a specific set of tasks from MS Project 2010 to a SharePoint Calendar list using our IntelliGantt Add In for MS Project 2010. In this post we will publish the rest of the tasks from MS Project to a task list located in a sub site to where we published our calendar events. The idea here is to parcel out tasks from MS Project to targeted destinations that are tailored for audiences (or SharePoint members in this case).

Here is the current state of our MS Project plan:

We will now send all the tasks under the 'Tasks' summary task to a separate SharePoint list. I highlighted the current settings selection to make sure it's changed back from the 'Calendar' settings we created in the last post. These settings are tailored for the rich information of task lists.

Make sure the 'Tasks' summary task is selected since this establishes our data source in MS Project and the set of tasks we will send to SharePoint. Once selected, the 'world' in the 'Sites' ribbon group lights up for you.

The steps to connect the 'Tasks' summary task to a SharePoint task list are the same as before. Provide a URL to a SharePoint site and select a task list. Notice that we are connecting to a sub site of our Demo site (where we shared the Calendar events) called Agency1. Agency1 could have completely different permissions tailored for a working group or an external resource.

By double-clicking on the selected task list IntelliGantt performs the inital share operation and, as a result, the tasks in MS Project now have hyperlinks pointing to their corresponding tasks in SharePoint.

The next question you might be asking is 'I can see the entire plan in my MS Project, but how can others see the entire project just in SharePoint?'. Great question! For that we bring in our IntelliGantt Web Part. We can place it on any SharePoint page within our demo site to see all of its tasks.

But this isn't exactly what we want. We need to see our events from the Calendar and our tasks from the Agency1 subsite. No problem. We can configure the IntelliGantt Web Part to do exactly that. Edit the web part and find the 'IntelliGantt Initialization' category. In here we will include the template ID for a calendar and define which SharePoint lists we will be using. As we remember from the last post, the template ID for a calendar is 106.

Next, we will update the 'Selected List Names' to reference both the Calendar from our current site and the Task List from our Agency1 subsite. Below is the image for both customizations:

Now when we view the IntelliGantt Web Part on our SharePoint page, we see a unified view of our Calendar events and our Agency1 tasks.

The default view for the calendar shows only the events in the current month. If you would rather see all events in the calendar, we need to change the default view to be 'All Events'. To do so, go to your SharePoint Calendar, change the view to 'All Events' and modify it so that 'Make this the default view' is checked.

Now when we view the web part we will see all the events and all the tasks:

Thursday, March 22, 2012

MS Project Tasks to SharePoint Calendar Events

When we built the new IntelliGantt Add In for MS Project 2010 Standard or Professional one of the features we were most excited about was the ability to choose a summary task within a project and send it to any SharePoint list. By default the add in will give you a choice of task lists, however, you can actually choose any SharePoint list. As it happens we've had numerous people asking if the IntelliGantt Add In can pubilsh project tasks/milestones to a SharePoint Calendar list. The answer is an emphatic Yes! Here's how you do it.

Let's start with a basic MS Project plan. There are two summary tasks, one called 'Milestones' containing milestones and one called 'Tasks' containing tasks. We've gone so far as to link the milestones to task endpoints just to give them a bit more weight.

Now we would like to get these milestones into a SharePoint Calendar to share and highlight these very important dates.

First we will select the 'Milestones' summary task to establish our root. Next, we will click on the illuminated 'world' image in the 'Sites' ribbon group. We use the dialog that pops up to connect to a SharePoint site.

By default this listing shows only the task lists, so we click 'OK' to save the site connection and move to the list connection dialog where we have more options. Click on the newly illuminated world image in the 'Lists' ribbon group. That will bring up a dialog with a few more options.

Click the 'Template ID' checkbox and enter the server template ID for a calendar list-- 106. Note that the calendar list appears in our list selection box. (For a table of more SharePoint server template IDs go here).

We're not quite done yet though. Since the default settings are geared toward task lists, we need to create a setting that is geared towards calendars. So select the 'Calendar' list and then click the 'Settings' button. The current settings dialog pops up. We will need to create new settings so click the 'Create' button.

I recommend we name the new settings something crazy, like 'Calendar'.

Finally, we will clear all the fields that our Calendar list doesn't support and map 'Start' and 'Finish' MS Project fields to something the Calendar list does support-- EventDate and EndDate.

Now we are ready to send the milestones to the Calendar list. Select the Calendar list and (optionally) choose to clear the calendar before we send the new data. Finally, click 'OK'.

In MS Project we see that all the sub tasks of the 'Milestone' summary task now have hyperlinks associated with them. Each hyperlink points to their corresponding event in the SharePoint calendar list we chose.

Let's see what things look like up in SharePoint. First a view of the milestones in the March calendar:

And then a view of the milestones in the April calendar:

Remember that we did set up the display name as bi-directional (ie. To SharePoint and From SharePoint). Therefore, changes we make to the calendar names in SharePoint can be brought back into MS Project. Also, changes to the milestone dates in MS Project can be sent to the SharePoint Calendar list as well.

Finally, if you would like to share the 'Tasks' to a SharePoint task list, simply click on the 'Tasks' summary task, connect it to a site and then a list.

Wednesday, March 21, 2012

MS Project Deadlines to SharePoint Tasks

Just a quick note to let folks know that we received a request to support the Deadline field in our IntelliGantt Add In for MS Project 2010. So now it is! It is a date time field in project and can be mapped to a date time field in your task list that you can create. By default we suggest calling it 'Deadline', though you can map it to any date time SharePoint list column.

Also, not only Deadline, but all date time fields in MS Project will pay attention to the formatting options of your date time SharePoint list columns and change behavior based on the display options. If your SharePoint date time column shows date only, then the IntelliGantt Add In will compare year, month and day only when evaluating whether the field should be updated. If the SharePoint date time column shows date and time, then the IntelliGantt Add In will compare year, month, day, hour, minute and second when evaluating whether the field should be updated. In this way we make the sync cycle smarter so that only necessary updates happen. The end result is if you have turned on 'Notify when changed' within the SharePoint list, you won't be bombarded with useless update information.

Linking to SharePoint Lookup Fields

We implemented a simple user request with respect to how the IntelliGantt Web Part works with lookup data in your task lists. The issue was we were displaying the data, but unlike the native SharePoint list information, the lookup fields were not navigable. For example, all the assignments would show as expected, but you couldn't click on a name and see the user's profile. This has been addressed with build 1.0.163 we released today.

For example, here is a screenshot of the updated web part showing the Assigned To field. The visual cue for the names has changed as now they are both blue and underlined.

Clicking on a name will match the same behavior as in SharePoint and take you to that user's profile scoped to the current SharePoint site.

However, we couldn't help ourselves from adding a little smarts. If you have a link to a discussion showing, rather than going to a single page showing that that item's instance data, we instead take you to the 'Flat' view of the entire discussion. This let's you quickly see what people are saying about a particular task.

The discussion link in the web part:

The browser directed to the flat discussion layout:

Tuesday, March 06, 2012

Bringing Textile Markers to SharePoint Text Fields

We recently put in a color splash into our IntelliGantt Web Part so that customers could start introducing their own custom fields and have them perform as key performance indicators. What you do is tell the IntelliGantt Web Part which custom field you want to key off of and then provide the colors to use. Typically this is a choice field and the color series matches the choice values.

Another customer of ours wanted to ability to highlight tasks within the web part. I thought 'hey, the new color splashes would be cool.' But what they really wanted was a bit more text formatting. Something like making the title bold, or in italics or underlined. I first started thinking about HTML markup around the text fields, naturally, but how to store that in SharePoint and still have it be readable? Not going to happen.

Then I remembered something we had on the drawing board as a result of our experience creating products for Basecamp. They use a simple Textile markup that can both instruct programs how to change text decorations and maintain readability for normal humans. So we applied the bold, italic and underline markers to all our text fields and the results look good:

What we've done is added a bit of processing to SharePoint text field resolution such that

  • If text begins and ends with *, then it is bold
  • If text begins and ends with _, then it is italics
  • If text begins and ends with +, then it is underlined

Any text field can contain these textile markings. We do have one issue with Summary Tasks because they do not accept * characters. I suppose we can offer a SharePoint errata to the Textile specification, but for now summary tasks can italicized or underlined

Wednesday, February 08, 2012

Limiting the Number of Tasks in a SharePoint Task List

Is it really possible to have too much of a good thing? If we are talking about tasks in a SharePoint list, or really tasks in multiple SharePoint lists, then the answer can be 'yes'. Sure, the IntelliGantt Web Part can scale to tens of thousands of task items in one view, but there is the simple matter of loading all that data. Even on a gigabit network, it can take time to pull everything into view.

So we put our heads together with a few of our customers and came up with a setting we call 'Depth Level'. In a nutshell it limits the number of tasks the IntelliGantt Web Part will acquire from SharePoint by putting a limit on the number of times it digs into a Summary Task (or folder in SharePoint 2007). As a result, even though your selection of SharePoint tasks may number in the millions, you quickly retrieve a minimum amount of data (the top level of items) to show useful summary information (start dates, end dates and percent complete).

Let's take a look at how it works. Below is a screenshot of a SharePoint site containing two task lists with considerably less than one million tasks. However, notice that there are summary tasks containing child tasks.

We can configure the IntelliGantt Web Part so that it gets just the top level summary tasks by setting the Depth Level. To do so, we shall edit the web part properties. Inside the 'IntelliGantt' category, we see the 'Depth Level' field.

You may wonder what Collapse Level is right above Depth Level. Collapse Level is different in that it sets how deeply to open the hierarchy initially, but will not affect the actual volume of data retrieved from SharePoint. Collapse Level is the right choice when you want a summary view, but also would like to burrow into all the details. The Depth Level is for a summary view that can load Right Now.

Let's set the Depth Level to 1...

... and see what we end up with.

The only thing the image doesn't convey is just how fast it popped up.

Tuesday, January 24, 2012

Working with Master Projects

We just posted a new video showing the IntelliGantt Add In for MS Project 2010 working not only with individual projects but with a master project as well. Basically a single MPP file is connected to a SharePoint task list. Then a second MPP file is connected to a second SharePoint task list. Finally, the two MPP files are added as subprojects to a master project. The master is then sent to a third SharePoint task list. Better yet, the IntelliGantt Web Part is used to display both projects, their hierarchy and task dependencies in a single view.

The cool thing about this video that doesn't come across (because I didn't want it to take tooooo long) is that all the connection information is self-contained. Each MPP file will remember its connection information, and the master project will remember it's SharePoint connection information. Why is this so great? Because it means the project managers can focus on their mpp plans, someone else can create a master using the two (or three, or four... there is no limit) and no data will be overwritten-- everyone can carry one oblivous to how many times an mpp file may be shared and where it goes.

This has immediate ramifications for projects that have 'backup' project managers that take over when a primary project manager goes on vacation. They simply check the mpp file out from SharePoint and continue on as normal. The IntelliGantt Add In will remember the connection information and they just need to click 'Refresh' once in a while. Or, better yet, they can turn on the auto-synchronization feature.

The key is the IntelliGantt Add In can adjust which text field it is using to store this SharePoint connection data. By default it's set to use Text11, however you can use any of the 30 available custom text fields. When you choose a custom text field to use, the settings files defined for the new Active Data Field are loaded into you dropdown list. Each active data field can have its own list of settings files-- basically whole new silos of sharing information and possibilities.

Just remember to be a bit parsimonius with who gets to update a tasks hyperlinks property. After all, there's only one of those!

Thursday, January 19, 2012

First Peek at IntelliEvent for SharePoint Calendars

A client liked our Gantt chart solution for SharePoint Task and Project lists they asked if we could do the same thing for SharePoint Calendar lists. With the IntelliGantt Web Part we could actually configure it just so by tweaking this setting and adjusting that knob that we could basically show a calendar. Now we've gone the rest of the way and created a new package expressly for calendars and events.

Here is what it looks like:

The IntelliEvent Web Part will find all the Calendar lists in a SharePoint site and display them on the adjustable timeline. You can include calendars from other sites as well to create rollup calendar views. Of course everything is still editable by either clicking in a cell or dragging on the chart.

We've also changed a few other things to make the IntelliEvent Web Part calendar friendlier like solid colors for the timeline, calendar specific information in the popups and a default 'calendar centric' view.

Thursday, January 12, 2012

Displaying Fields in the Gantt Chart

We love to hear feedback from our customers. Big or small, short or tall, everyone has an interesting perspective. What has percolated up, with the substantial aid of one of the largest organizations on the planet, is the ability to select what piece of data to show next to tasks on the gantt chart. This makes it easier to keep track of what task is on what row as you look at data in the task list grid since the task title can be right next to the pretty task image. Here's a look at the first fruits of our labor enhancing the IntelliGantt Web Part. We designed it so once field at a time can be shown by the task. However, you will be able to pick any field from the SharePoint list to display. For example, below I have selected the title:
In this image I have added the assigned resources:
Here are the due dates:
And finally the percent completes for all the tasks:
You'll notice that the data is well formatted for human readability. We actually look at the type of field we are working with by using the corresponding SharePoint column and adjust the display according. You'll also notice that while the text usually appears to the right of a task, we do see if a better fit is to the left and adjust accordingly. Though you can't tell with the picture, the scrolling action is great and with the text smoothly scooting across the screen. This feature (and a few more) will be available next week.