Encouraging two-way communications

Share + Learn + Comment   Encouraging two-way communications

Discover our team’s valuable knowledge, experience, opinions, and advice. And let us know what you think!

Blog

  • Avoiding validation when editing a page with a form on it

    David Webb
    September 2, 2010

    My project team has been wrestling with a rather annoying "feature" of custom MOSS 2007 forms. We have ASP.NET validation controls (RequiredFieldValidators, and RegularExpressionValidators) on the pages, which makes perfect sense when you're collecting form data. 

    However, while editing the page, placing the form on the page, and setting whatever properties are required, the validation executes, and sometimes prevents you from saving the page. If you can enter valid data in each field, that's a workaround -- but some of the fields are dropdowns and populated from a list, and during editing, they aren't populated, so there's no way to enter valid data.

    I found that there is a property on the SPContext object which indicates whether the form is in Edit mode. You can use this in the CreateChildControls method to enable/disable the validator controls; basically, you only want them to be enabled when the form is in "Display" mode. Here's a sample:

    // enable validation only if the form is in regular display mode 

    this.rfvProductType.Enabled = SPContext.Current.FormContext.FormMode == Microsoft.SharePoint.WebControls.SPControlMode.Display; 

    this.rfvOrigin.Enabled = SPContext.Current.FormContext.FormMode == Microsoft.SharePoint.WebControls.SPControlMode.Display;

    Now, when you edit the form, the validation won't be triggered at all until the page has been edited. Works great!

     

  • Keeping score without losing sight

    Steven Fitzgerald
    August 20, 2010

    In 1992 Robert Kaplan and David Norton wrote what became a pretty famous business article called “Using the Balanced Scorecard as a Strategic Management System.” The idea proposed in the article was pretty straightforward and I would even say intuitive: to really understand how your business is doing, you need to understand more than the financial performance—understanding non-financial performance is the key to predicting future performance. That skips over a great deal of detail, but it’s certainly a central thrust.

    The balanced scorecard model seeks to balance financial performance with three non-financial aspects of the business:

    • relationships with customers
    • internal business processes
    • learning and growth

    A fascinating lesson here is related to the need to balance emphasis on the factors that affect the here-and-now, as well as the long-term growth and achievement of strategic objectives. When the emphasis is on short-term financial measures, you risk heading off track from what you want to achieve strategically. In my experience, one exacerbating element of this is the very human trait of wanting to focus on the stuff that you can readily measure and ignore what is less quantifiable (which can sometimes be the more strategic, longer-term factors).

    The tyranny of the billable hour

    Our past focus on maximizing individual consultant billable hours is one good example of over-emphasizing financial measures. It was something that was readily measurable and perhaps fit into a less complete understanding of what we were really trying to achieve as a company. Now we are focused on project throughput (or project flow) and we’ve learned that a focus on the easily measured billable hours per person drove the wrong outcomes for Habañero and our clients. In fact, the billable utilization measure that used to be a core leading indicator of success is now not even part of our operations discussion. We found focusing on it drove the wrong behaviors in the company.

    Tying this into to Habañero’s purpose

    We have been working hard lately on refining our purpose as a company. Part of the rationale for this work has been to get clearer about exactly why we exist and translate that into something we can take action on. This will certainly impact our balanced scorecard view of the company and increase clarity and confidence in our longer term strategies. The elements of purpose that are really standing out are:

    1. relationships of all sorts, including relationships with people here and our relationships with our clients
    2. our desire to make an impact in those relationships
    3. our desire for those impacts to improve people’s lives (if even in a small way)

    As this work evolves for us, we will be able to use it to refine our balanced scorecard view of the company and refine the operational focus it drives.

  • We're hiring in Calgary!

    Yes, we're hiring folks!

    Demand in the Calgary and Edmonton markets is only growing and Habañero has an imperitive to grow with it. If you are talented, highly-motivated, collaborative, and want to work at a company that expects you to deliver solutions that will delight clients, consider a career with Habañero. It is also really important that you like to have fun with the people you work with - both your clients and co-workers.

    The current openings we have in Calgary are:

    We have a lot of exciting opportunities with new and existing enterprise clients that continues to provide the challenge we are constantly striving for. Click here to find out more about what we do. If you're interested in any of these positions, feel free to contact me directly or to email careers@habaneros.com.

  • Using SharePoint:SPSecurityTrimmedControl to hide the SharePoint 2010 ribbon also hides the scrollbar

    Dave Kachman
    August 14, 2010

    We were using SharePoint 2010 to create an intranet recently with users of varying permission levels. Since we had reduced the contents of the Site Actions menu so much for the majority of users, the request came in to just hide the ribbon for users with particular permission levels.

    We used the <SharePoint:SPSecurityTrimmedControl> around the <div id=”s4-ribbonrow”> element using a specific combination of permission in the 'PermissionsString' property of the <SharePoint:SPSecurityTrimmedControl>.

    This worked great to hide the ribbon for users with particular permission levels, but provided one unintended consequence; the page was left without scrollbars even though the content required it.

    Upon researching (the Microsoft SharePoint Product Group had a great post on how things are set up on a typical SharePoint master page here), it was discovered that Microsoft turned scrolling off of the body of the page so that the ribbon was always present, then in some Javascript included in the ribbon, scrolling was restored in the <div id=”s4-workspace”>.

    Now this prescribed behavior works well except when you hide the ribbon.

    Our solution was to use a small little jQuery script that’s registered using a delegate control on the master page (for more information on delegates go here). The script we used is found below:

    $(document).ready(function () {
    	var $ribbon = $('.s4-ribbonrow');
    	if (0 === $ribbon.length) {
    		$('body').addClass('sv-ribbonNotPresent');
    	}
    });
    

     

    The CSS class ‘sv-ribbonNotPresent’ referenced above is defined as follows:

    .sv-ribbonNotPresent {
    	overflow: visible !important;
    }
    

     

    The CSS class added to the body at the end just makes sure that one rule in v4master is overriden, which is the one preventing scrollbars from scrolling the ribbon as well as the contents of the 's4-workspace' div.

    This is a simple little bit of script and one CSS class that will ensure that scrolling ability of the content is maintained without the ribbon in place.

  • In a SharePoint 2010 custom list, rendering a complicated content type as the first item causes a Javascript error when adding a new list item or editing a list item

    Dave Kachman
    August 13, 2010

    The Issue:

    I came across this issue because we wanted to add an AJAX enabled field (consisting of attached jQuery plugins and hidden fields) as the first element in the list rendered as part of a SharePoint modal.

    The script error was in a system script file called sp.ui.rte.js and giving the following error message:

    Message: Invalid argument
    Line: 2
    Char: 141541
    Code: 0

    Note, that we were minifying our scripts, so line 2 char 141541 was due to the minification. Upon taking off minification, it seemed to be caused by a jQuery selection statement trying to select the first item in the list and that item being null.

    Research:

    In our searches for some other posts with the same issue, we found similar issues being found in the following article.

    This article shows a way to reliably reproduce the script error. They wanted to hide the title column in their custom list, leaving people pickers or managed meta data columns making up their list, which generated the script error.

    Our theory was that SharePoint’s script is expecting a certain type of entry (i.e. a simple field like a string only field) in this list at the beginning, and if a complicated field stood in its place, then the script error would occur.

    Upon debugging, as a workaround, we needed to ensure that our complicated field wasn’t the first one rendered in the list.

    We took a completely valid other content type in the list (which was a single line text column, like Created Date…avoid columns like the ID) and rendered it first in the custom list code, then used CSS to hide the row of the table. Once we ran through this code, the script error disappeared. Also, because we used CSS to hide the row containing this content type, it didn’t mess with any of our other styles for the table.

    Note: you cannot use the server side “Visible” property to hide this field, because that will prevent the control from rendering at all, resulting in the same issues as before. We wanted this to render, we just didn’t want to display it.

    Special thanks to @spsherm for his help with unraveling this one!

  • Team GSD rocks the Habañero Cup!

    If someone asked me 10 years ago where I would be in my career in August 2010 there is no chance I would have talked about what was going on today. See, the company I work with is extraordinary. We have an extraordinary spirit grounded in our values but borne of our collective passions and personalities. Out of this spirit comes some interesting and sometimes completely wack ideas that fire up the organization in interesting ways.

    Enter the Habañero Cup!

    The 'Cup' is modeled after our experiences in high school intramural teams. Everyone is assigned to a team and we are given a list of activities and associated points that we can earn by completing those tasks. Simple, right? Absolutely. There is brilliance baked into the activities focusing teams on a combination of individual and team activities. All of these activities make a meaningful contribution to Habañero:

    • "getting things done" that we know we need to get done;
    • promoting and enabling internal initiatives important to us right now;
    • promoting and enabling market-facing initiatives important overall;
    • getting us focused on the important but not-so-urgent things that often fall off the sides of our desk but are so critical to our long term success, and;
    • having fun supporting team building and company pride.

    The real genius is in how this all comes together for Habañero. The teams are competing throughout Q3 and the awarding of the Habañero Cup will happen at a company-wide family picnic in Vancouver in the latter part of September. We bring together the entire company (and all of the people whom support us in what we do) to embrace and celebrate the larger concept of team at Habañero; the entire Habañero "family" which is all of us and our families.

    So ... what were we doing today? Today was all about team building and company pride. And it was brilliant!

    And that team name "GSD"? Well, that's an attitude we have in our Calgary office and Colin created a brilliant logo to represent the attitude.

     

    team gsd logo

  • The Happiness Project: Part 2

    Jasvir Shukla
    August 12, 2010

    What is the happiness project? Read on to find out, but if you're still curious, check out the background of how we ended up here.

    How it works:

    The happiness project is an internal site where any employee at Habañero can enter how they are feeling and why. Once the feeling is entered, a photo from Flickr is suggested, and people can accept that photo or change it. It's pretty simple really!

    The fun part is waiting to see what photo turns up, subtly sharing your feeling with others in the company, and seeing what others are feeling. 

    Here are some examples of recent feelings within the company:

     

     

    Some things that I took away from doing this project include:

    Enable conversations

    We start a lot of conversations in life with 'How are you?' Usually, we get pretty generic replies like "good" or "fine" and leave it at that. I found this project took that basic interaction to the next level as people thought about how they really are feeling, and came up with creative words to describe it. The site became a great way to find out a new little tidbit about someone, which we could then use to start a conversation with them, or just bug them about it! 

    There were also sub-conversations going on in the site itself. We had certain situations arise in the office (not mentioning any names, but someone accidentally ate someone else's salad!), and this site contained much of the sub-text. It was a funny way for some frustration and steam to get blown off, and for others to get in on the conversation.

    Laughter is good medicine

    I can't believe how much laughter and fun this project created in the office. I didn't expect such a simple site to create so much humour! People are pretty creative, and we all like a healthy dose of laughing at, and with, each other. With this site, I'm reminded that Habañero is a pretty healthy and fun place to work.  

    Link to the real world

    We added a kiosk in the kitchen dedicated to the happiness project, next to (where else?) the water cooler. This not only sparked conversation throughout the day as people are getting snacks, lunch and beverages, but also reminded people to look at the site and add updates. It was positive reinforcement in the place where we know people are going to stop and take a look. Kitchen Kiosk

    This is also where I would get solicited and unsolicited feedback on the site itself. I found it had the dual purpose of supporting usability testing in the wild and engaging people on their breaks! 

    Where next?

    We have a list of improvements in the hopper, and are waiting for down time to start churning out those changes. Specifically, we want to make it easier for people to see several updates at once and even gauge the mood of the office. We've also toyed with making this more public, but for now, we're happy to see the cultural impact it's having inside Habañero.

    If you have any suggestions, I'd love to hear about them. Leave a comment!

  • Using SQL to delete SharePoint Configuration objects

    David Webb
    August 6, 2010

    I'm currently working on an Internet project, and every time we deploy it, the process is supposed to remove all existing timer jobs and reinstall them. However, because of a bug we haven't fixed yet, the removal of the timer jobs doesn't work, but the reinstall does--so we were getting hundreds of extra (duplicate) timer jobs created in our SharePoint environment. This causes problems of its own, because the timer jobs all run at once, and start contending with each other to do the same work.

    There is an STSADM command (DeleteConfigurationObject) which will remove objects of whatever type you like. However, you need to provide the GUID of the objects, one at a time. Looking up the GUID for hundreds of duplicate timer jobs, and plugging them into STSADM might just be a bit time-consuming, right?

    So as an old database guy, I figured there had to be an easier (and SQL-based) way to clean these critters up. The first step is to figure out where in the SharePoint database they are stored. I knew from looking in SharePoint Central Admin that timer jobs were identified by GUIDs. I wrote a query to generate a select statement against every table which had one or more GUID columns, looking for the specific GUID that I found in Central Admin. This is the query:

          select 'select * from dbo.' + tables.name + ' where ' + columns.name + ' = ''12345678-90AB-CDEF-1234-1234567890ABCD'''
          from sys.objects as tables
          inner join sys.columns as columns
            on tables.object_id = columns.object_id
          where columns.system_type_id = 36                -- type "36" represents a GUID
          and  tables.Type = 'U'                                      -- "U" represents a user table

    Substitute the GUID of one of the jobs you want to find instead of the one above in my query.

    Run this query (try all the SharePoint-related databases, unless you know specifically where you want to look!) and it will generate a list of select statements. You then cut and paste those statements into a new query window, run them 50-100 at a time, and see which ones return any data. 

    Eventually, I found that the dbo.Objects table in our MOSS_Config database is the one that holds the timer job info. A little more poking at individual rows shows that the "Name" column contains the user-specified name of the timer job. In our case, these started with either "generate_sitemap" or "stock_quote".

    The next step is to run a query which will return all of the GUIDs of the rows which represent the timer job(s) you are looking for. While you're at it, you may as well format the returned rows as an STSADM command. This is the query to do it:

          select 'stsadm -o deleteconfigurationobject -id ' + convert (varchar(50), id) from dbo.objects
          where name like 'generate_sitemap%' or name like 'stock_quote%'

    Run this query. Cut and paste the output into a standard text file, and save it as a *.bat file. You can now execute the batch file, and it will repeatedly invoke STSADM to delete the objects you want to clobber.

    Easy, huh?  :-)

     

  • The social web - a culture shock for IT organizations?

    If Mitch Joel brought the reality check to "The Art of Marketing" event, Gary Vaynerchuk (Wikipedia Blog / WineTV / Crush It!) brought the shock value. I couldn't honestly tell you if his talk had anything to do with his book ("Crush It! Why Now is the Time to Cash in on Your Passion") but his cutting critique of marketing professionals was compelling.

    The main points of Gary's talk were:

    • Brands need to start caring. There is nowhere to hide so we need to start listening and communicating with our customers in the channels they choose.
    • Get over it. The social web is driving major cultural shifts in business and it is only going to accelerate. You can choose to stand on the sideline in hopes it is a fad but you will just fall further and further behind.
    • The tools have changed but this is no easy game. Taking advantage of the opportunities presented by the social web require the same principles that have always led to success; 10% inspiration and 90% perspiration. This is hard work.

    I've been in IT for a long time and few interactions with IT organizations reassured me that they were being run like a business. I am sure many are, and likely many of the ones I interacted with. However, the points noted above are just as important for IT organizations that are being run like a business and they should consider the impacts on customer relationships.

    What is the brand of your IT organization? As Jeff Bezos says, your brand is what people say about you when you aren't in the room. Do you know and care about what they are saying? Do you have a way to measure brand sentiment? What do you do with the information?

    Is your IT organization spending more time rationalizing, explaining, and defending than strategizing, collaborating, and solving? Your business users are savvy, time-constrained, and driven. Be assured they will find the shortest route to resolution and value, and it is your choice whether you are directing that journey. And if your barriers to competitive entry are forcing their hand, be aware users will work to go around and tear down those barriers even while working with you. The information, tools, and expertise is too readily available outside the office.

    Transforming (or fine tuning) your IT organization into a highly responsive, authentic, value-focused, and business metrics accountable organization is imperative. Start the change now.

    Follow Gary on Twitter @garyvee

    Previous TAOM blog posts:

  • Hyper-v clustering using R2 CSV on iSCSI - Part 1: Configuring the iSCSI SAN

    This multi-part series will take you through building a Hyper-v cluster using Windows 2008 R2 Core and an iSCSI SAN.

    With the release of Windows 2008 R2, things in the Hyper-v world got a lot better. Unlike R1, a shared VM storage LUN is now supported, and the CLI functionalities on Core have improved greatly.

    This article will walk you through the process of building up a highly available, and performance balanced Hyper-v server configuration.

    The areas I will cover include

    • Windows 2008 Enterprise R2 – Core installation
    • Managing and Configuring R2 Core
    • Setup and configure two iSCSI LUNs on an MD3000i iSCSI SAN
    • Install and configure Windows clustering
    • Configure CSV on the cluster
    • Configuring Hyper-v
    • Using SCVMM and Live Motion
    • Creating a highly available VM on the Hyper-v cluster
    • Configuring Hardware Shadow Copy providers to support backups (MS DPM 2010)

    What you will need to start

    • A minimum of two similar (ideally identical) servers
    • Must use the same architecture of x64 CPUs and support Hyper-v (either AMD or Intel)
    • A minimum 4 Network ports on each server
    • An iSCSI SAN (The Dell MD3000i is used in this walkthrough)
    • Windows 2008 R2 installation media and licenses or Windows Hyper-v Server 2008 R2

    Recommended optional components

    • A minimum of 3 GB Ethernet switches that support jumbo frames
    • Microsoft SCVMM 2008 R2
    • Microsoft DPM 2010 RTM

    Part 1: Configuring the iSCSI SAN

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. Next page »

Please Upgrade Your Browser

This site's design is only visible in a graphical browser that supports web standards, but its content is accessible to any browser or Internet device.