Tag Archives: sharepoint

Stories from the WIT Trenches: Wendy Neal

[Stories from the Women in Tech Trenches is a series of posts exploring the personal stories of real women in technology. Every woman in tech overcame, at the very least, statistical odds to be here; this blog series aims to find out why, and what they found along the way. This week we met up with Wendy Neal, belovedly known in the SharePoint community as SharePointWendyIf reading her story inspires you to share yours, please email me.]

Wendy

I started my career as a web developer, and when my current company brought SharePoint into the organization in 2007, I was completely hooked. I like to blog about my SharePoint experiences, and enjoy speaking at user groups and conferences to share what I’ve learned over the years.

1. Can you take us back to your “eureka!” moment—a particular instance or event that got you interested in technology?

I’m not sure there was one single moment where the light bulb turned on and I realized I wanted to pursue a career in technology.  I do remember taking a BASIC computer programming class in high school and thinking it was kind of neat.  I even wrote a couple simple video games for fun.

It wasn’t until I was working as an office manager for a small electronics company in the mid ‘90s that I realized I really enjoyed working with computers, and more specifically, creating websites after I built the local office website.  The whole Internet thing was brand new, and it fascinated me.

I knew I wanted to create websites, however I didn’t have a bachelor’s degree, so I wasn’t getting any job offers. I decided to go back to college to finish my degree. I declared my major to be Computer Science and attended school part time for the next 3 years while working full time until I obtained my degree.

2. Growing up, did you have any preconceived perceptions of the tech world and the kinds of people who lived in it?

I don’t think I had many preconceived notions about the world in general back then. I grew up in a small town in rural Iowa and probably had no idea what was going on in the world around me. I only knew a couple people who worked in the technology field and I had no idea what they did. Besides, I was too busy planning my career as a professional football player (in elementary school), and after that I wanted to be a pro beach volleyball player (high school).

These were also the pre-internet days, and my family didn’t even have cable TV until I was in high school.  The fact that I didn’t know any better was probably one of the reasons why I didn’t have any reservations about pursuing a career in technology once I finally realized that was the direction I wanted to go.  I just decided that’s what I wanted to do and I did it.

3. As a SharePoint architect, reputed speaker, and evangelist, what led you to this career path? When did you first start working with tech? Was it by choice?

My first job upon graduating college was working as a web developer for a company that provided clients with stock market web sites and solutions.  I loved it!  I worked with Microsoft’s classic ASP and also did a little SQL and JavaScript programming, then moved to ASP.Net when that first came out.  After four years at that company, we got purchased by another firm and they closed the office that I worked at. 

I then started working for my current employer, GreatAmerica Financial Services, starting as a Microsoft .Net software developer, then gradually moving into the world of SharePoint Development.  Eventually I was doing nothing but SharePoint-related work on a daily basis, including development, branding, administration, and even training our users.

I became heavily involved in the SharePoint Community in the summer of 2011.  The people I had admired from afar up to that point, who gave their time endlessly, really inspired me.  I wanted to give back and help others like those who have helped me over the years; so I started a blog, which led to writing articles for prominent SharePoint sites like NothingButSharePoint.com, and then to speaking at user groups and conferences.  I’m even currently working on an upcoming jQuery and SharePoint book.

4. Did you experience any personal or systemic setbacks at any point of your academic or professional career?

It seemed I had always had weird health issues off and on since I was a teenager that no medical doctor could ever diagnose. In the fall of 2009 my symptoms manifested, and I became very ill and missed about a month of work. I had never felt so horrible in my life. I think it was by sheer will and my fear of hospitals that I forced myself to start eating and slowly regained my strength. Thanks to a wonderful naturopathic physician I was finally diagnosed with multiple food allergies and hypothyroidism. Now, with a simple change in diet to eliminate my food allergens, and a few natural supplements to control my hypothyroidism, I feel like a new person.

I also feel that being physically and mentally healthy for the first time in so many years opened new doors for me.  It boosted my confidence levels and allowed me to venture down the road of public speaking.  I felt like I could try new things and not have to worry about canceling plans or backing out at the last minute for feeling sick.

5. Whom do you look to as mentors and/or sources of inspiration?

One of the people I admire most is my late Aunt Wanda. She fought various forms of cancer for over 17 years, eventually succumbing to the disease in 2000.  Many times she was told by doctors that she only had months to live, and she fought to stay alive each time. And she did it all with a positive attitude; I never saw her in a bad mood, no matter how miserable she was feeling due to her illness and treatments.  It has taught me that the mind is very powerful, and that you can literally do anything if you set your mind to it. Even when people tell you otherwise, if you believe then you can.

6. Why do you think the rate of attrition for women in software engineering is higher than that of women in most other tech fields?

I think it’s because the ratio of women to men working in the software engineering field is extremely low, even lower than some of the other tech fields. For example, I’m the only female on our team of eight developers. I think a young woman starting out in this scenario can feel isolated and alone at times. If she has no female mentors or role models to look up to, she may feel stuck as far as understanding how she can advance her career. Often times a man will get promoted after he saves the day or performs some other heroic feat for the company. Women, on the other hand, have a fear that if they make a mistake they’ll be demoted or devalued, so they build systems that don’t crash in the first place. This is great; however, they rarely get recognized for that fact, which can leave them feeling unappreciated and unnoticed when promotion time comes around.

7. Do you have any suggestions for how to get more girls interested in computers and computer science? Is this important to you?

I think there may be a misconception among girls that all careers in computer science are either hard or boring or that computers are just for geeks.  If girls knew that there were many opportunities out there besides the perceived “geeky” jobs like programming, it may open their minds to the computer science field.

I think education and mentorship at a young age are the key to getting more girls interested in technology.  In my opinion all girls should take an intro to computer programming or engineering course in high school.  They may realize it’s not quite what they thought it was.

8. Do you have any advice for women interested in computers and computer science? Is this important to you?

I’d say go for it, and don’t let anyone hold you back!  Don’t listen to the naysayers, and just do it if that’s what you love. The technology field definitely needs more women, because they bring a unique perspective and diversity to the workplace. Women are typically good at multitasking and relationship building, and having more women in the industry also brings more viewpoints to the table. Hopefully companies are recognizing this and trying to recruit more women into computer and technology roles.

9. Do you have anything to add that you haven’t had a chance to mention?

Don’t be intimidated by the possibility of working in a “man’s world.”  Especially if you want to be a developer. You will likely be one of a few women, if not the only one, working on a team of men. Be comfortable with that. Don’t be afraid to speak your mind and hold true to your convictions when you think you’re right. Your coworkers will respect you for that. And if they don’t, then you’re probably working for the wrong company. Find a company that has integrity and supports a diverse work culture, or start your own.

All Kinds of Things You Can Do With SPUser Objects

The SPUser object is a really useful tool, but sadly not very intuitive. Here are some of my favorite SPUser snippets.

People picker list columns don’t return a user object, which is frustrating, but not foreign to those of us with picker experience. An ID is generally returned by a lookup field. Not so for people pickers, which return a domain\user string that is frequently pre-pended by nonsense.

This is how you get a user directly from the list item:

protected SPUser GetUserfromItem(SPListItem userItem)

{

SPFieldUser userField = (SPFieldUser)userItem.Fields.GetField(“User”);

SPFieldUserValue fieldValue = (SPFieldUserValue)userField.GetFieldValue(userItem[userField.Id].ToString());

return fieldValue.User;

}

Now let’s look at a neat little method that grabs some properties by current user! As a side note, there are a lot of issues that are purportedly resolved by setting the context to null – I have never found this helpful. Never. In my lifetime.

//User Properties by user

private bool GetProperty(string userName)

{

//Your return value is a bool

bool found = false;

//Create a profile manager

UserProfileManager profMan;

//Get your site in a “using” so there’s no disposing

using (SPSite site = new SPSite(SPContext.Current.Site.ID))

{

//Make everything unsafe. Just kidding. This is so that you have permissions to edit the profile property.

//If you don’t plan on making changes, you can access the property without this.

Web.AllowUnsafeUpdates = true;

//Okay. Get your web on!

using (SPWeb newWeb = site.OpenWeb())

{

//Get the context and set the profile manager

SPServiceContext context = SPServiceContext.GetContext(site);

profMan = new UserProfileManager(context);

//Get your user profile object

UserProfile prof = profMan.GetUserProfile(userName);

//This is important. Remember to check the Property.Value. Otherwise you are checking to see

//if the property itself is null. And since you know it exists – guess what? It isn’t null. Continue reading All Kinds of Things You Can Do With SPUser Objects

Everything You Need to Know About OfficeWriter: The Whitepaper

Looking for a comprehensive overview of OfficeWriter? You’ve come to the right place. We’ve partnered with Andrew Brust of Blue Badge Insights to give you an inside look at how OfficeWriter can benefit your company’s business intelligence.
OfficeWriter Whitepaper
Microsoft Office and Data: A Love Story
Excel and Word are the Will and Kate of the Office software world, but if you try to use them for data analysis, they’ll morph into Milli-Vanilli. OfficeWriter prevents that from happening.
In this whitepaper, you’ll learn:
  • How OfficeWriter’s API and templates provide bridges between Microsoft Office & databases
  • How OfficeWriter enhances SQL Server Reporting Services
  • How OfficeWriter turns SharePoint lists & libraries into full-fledged Office docs
That is simply the beginning. Get a full overview of OfficeWriter today.

SPTechCon Boston 2012 Wrap Up

Going through SPTechCon withdrawals? So are we. That’s why we’re bringing you a (relatively) quick recap from the Twittosphere. We can’t thank everyone who came out to booth #505 enough. We enjoyed meeting/tweeting all of you and learning from the SharePoint community! If you weren’t able to join in the exciting conversation or view OfficeWriter demos on how it can enhance reporting with SharePoint, fear not we have more demos online and the chance to download a free evaluation of OfficeWriter so you can take it for a test drive yourself. In the interim, take a look inside the four days of sessions, networking, and SharePoint learning.

[To view the wrap up on Storify]

Continue reading SPTechCon Boston 2012 Wrap Up

Simple PowerShell Deployment Scripts

Stsadm is the standard for MOSS 2007. Although still available in SP2010, it is deprecated and should not be used. So let’s start with some basics of PS for SP.

  1. One does not simply use PowerShell: The commands are specifically geared for the SharePoint Management Shell. If you open Management Shell as an administrator and type each command in, it’ll work fine. However, when it comes to running scripts there are some issues.
  • You have to load the Microsoft.SharePoint.PowerShell snapin, like so:  “Add-PsSnapin Microsoft.SharePoint.PowerShell”
    • This may give you an error: “The local farm is not accessible.” You need to have your account enabled as a SharePoint Admin (see below)
  • Make sure you’ve set the execution policy. This one is easy, just use the “Set-ExecutionPolicy” command. The possible values are:
    • AllSigned – You can only run trusted signed scripts.
    • RemoteSigned – If the script is downloaded, it must be signed, otherwise just run it.
    • Restricted – This one is self explanatory. No one gets to run scripts. No nobody. Not nohow.
    • Unrestricted – Again, self explanatory. As a very wise English professor once told me, “Unrestricted is the opposite of restricted.” I never forgot that…
  • You always need root: You have to be an SP administrator in order to run SP commands from PowerShell. You can check your local permissions by:
    • Right clicking on SP Management Shell and running it as an administrator. This will give you access to admin privileges, but if your login isn’t a SP admin, then you can’t do any of this in regular PowerShell.
    • Typing “Get-SpShellAdmin”
    • Looking for your login.
    • If you aren’t on the list, you can use the current Shell to add yourself, like so: “Add-SpShellAdmin -UserName YOUR\UserName”
    • Now you should be able to execute SharePoint scripts in PowerShell.
  • Remember – All Files .Ps1.: The script has to be saved with extension .ps1.
    • You  shoud save as “All File Types” rather than “*.txt,” otherwise it may not work.
  • No execadmsvcjobs: That command is no longer available. So timer jobs have to be waited for a little differently.
  • ## Get the solution
    $Solution = Get-SPSolution -identity $SolutionFileName
    $lastStatus = ""
    ## loop whilst there is a Job attached to the Solution
    while ($Solution.JobExists -eq $True)
    {
     $currentStatus = $Solution.JobStatus
    	 if ($currentStatus -ne $lastStatus)
    	 {
    		Write-Host "$currentStatus…" -foreground green -nonewline
    		 $lastStatus = $currentStatus
    	 }
    	 Write-Host "." -foreground green -nonewline
      sleep 1
     }
     ## completed
     Write-Host ""
     Write-Host " "$Solution.LastOperationDetails -foreground green

    The Script
    I wrote a simple script that prompts for file name, webapp name, and what function you’d like to perform. It is based on the script found on Nik Patel’s SharePoint World blog. The difference between Nik’s and mine is that mine doesn’t check for everything before performing operations. If you choose to use it, you have to be aware that you might get an error; however, it is a very simple version and much easier to use/understand/modify.

    #####
    # Script to deploy Webparts/Solutions. Does not make use of feature installation
    # Kate Mogel 2012
    #
    # To use:
    # Place in folder with WSP file. Open powershell and cd into solution folder
    # Run script as admin, refering to local file (e.g. ./DeployScript.ps1)
    # Enter full file name (e.g. solution.wsp), web app name, and choose an operation
    #####
    param(
    [string]$solName = "$(Read-Host 'Enter WSP File name ')",
    [string]$webName = "$(Read-Host 'Enter WebAppName. i.e. http://SP2010APP ')",
    [string]$whichFunct = "$(Read-Host 'Enter IS to install, RS to remove, US to upgrade ')"
    )
    
    function main{
    
     #Check for snapin. Add if not present
     $snapin = Get-PSSnapin | Where-Object {$_.Name -eq 'Microsoft.SharePoint.Powershell'}
     if ($snapin -eq $null)
     {
            Add-PSSnapin Microsoft.SharePoint.Powershell
     }
    
    #Get location
    $solLoc = Get-Location 
    
      #Check the operation
      if($whichFunct -eq "IS")
      {
     	addSol
      }
      if($whichFunct -eq "RS")
      {
          Uninstall-SPSolution -Identity $solName -WebApplication $webName
      }
      if($whichFunct -eq "US")
      {
          Update-SPSolution -Identity $solName -LiteralPath $solLoc\$solName -GACDeployment
      }
    
    }
    
    #Function to add and install solution
    function addSol{
    	$Sol = Get-SPSolution | where-object {$_.Name -eq $solName}
    	if($Sol -eq $null){
    	    Add-SPSolution -LiteralPath "$solLoc\$solName" -Confirm:$false
    	    Install-SPSolution -Identity $solName -WebApplication $webName -GACDeployment
     	}
    }
    #Run Main Method
    main

    Okay. Go deploy your WSP.

    What’s New In Office 15

    Photo Credit: Techmash.co.uk

    Overview

    Microsoft is pushing to make Office more of a service. In their ideal world everyone would be using Office 365 and there would be no on-premises environments. Since Office will be more of a service Microsoft is providing a few updates.

    Better Experience Across Devices

    Microsoft is putting emphasis on having your Office experience be very similar across different platforms and devices. With a push toward Office being more of a service, they realize you may be accessing Office from tablets, desktops, mobile phones or web browsers. Keeping this in mind, they have put a lot of work into improving the user experience.

    • SharePoint has better support for iPads and other mobile devices and is focused more on using standards such as HTML5 and removing non-cross-system/browser technologies such as ActiveX, Flash and Silverlight.
    • Office interfaces have been revamped with better support for touch interfaces. If you are using an office application in touch mode, then menus will appear the same, but the spacing will change to better support touch.
    • Settings can sync to the cloud to make your user experience easier. For example, if you are on page 40 of a 100 page word document and you switch from your desktop to the web, it will reopen at page 40.
    • Application Streaming – Office can be running in only a few minutes.

    What is new in Word and Excel

    “Agaves”

    Microsoft’s attempt to unify the experience across platforms brings up an interesting area of development. What can you write that will run in a web browser, on a desktop client and a mobile phone? The answer is not VBA macros or VSTO add-ins. Microsoft has introduced a new platform of development code-named Agave. You can think of an Agave as an IFRAME which can be embedded right into your document. Microsoft exposes an API through which your Agave can communicate with Office.

    For Word and Excel it looks like there will be only two types of Agaves: Task Pane Agave and In-Document Agave.

    • Word will support only the Task Pane Agave.
    • Excel will support both the Task Pane Agave and the In-Document Agave.

    Examples of Outlook Agaves:

    • Displaying a map when an e-mail contains an address
    • Displaying the Yelp review when someone talks about a restaurant
    • Auto-populating a new appointment window when someone suggests a meeting time
    • Quick link to bug tracker based on bug numbers

    Keep in Mind:

    • Agaves only run at a document level, and are distributed with the document.
    • In order to use Agaves in Outlook, Exchange 15 is required on the server.

    SharePoint _API

    The big think in SharePoint 15 from a developer’s standpoint is _API. SharePoint now exposes much of the SharePoint API through REST services, such as
    http://localhost/_api/Web
    http://localhost/WebURL/_api/Search
    http://localhost/WebURL/_api/Taxonomy
    http://localhost/WebURL/_api/BCS

    SharePoint Apps

    The SP15 Technical Preview Managed Object Model Software Development kit includes a bunch of changes that indicate app support (SPApp, SPAppInstance, SPAppCatalog etc).

    Items to Note:

    • Ribbon is minimized by default (toggle with a pin icon)
    • Outlook has metro-style nav at the bottom
    • Outlook switched “contacts” to “people”
    • You can share documents online using Windows Live

    How to Migrate Lists from MOSS 2007 to SQL Server 2008 R2

    These list migrations have been tested on MOSS2007 to SQL 2005 and 2008 R2.

    How to migrate non-Lookup items:

    The lists can be migrated as templates, as explained here:

    1. Create the tables in SQL. A simple script to do so:

    use MYDB
    CREATE TABLE myTable
    (
    ID int PRIMARY KEY,
    name varchar(50),
    someData varchar(50),

    )

    2. Once the templates are converted and installed, and the tables are set up, a client object program has to be used to push them into SQL.  Unfortuantely, SharePoint’s client OM does not work in MOSS, so you’ll have to transfer the templates first. For my program I chose a console application. Here’s a simplified script for a non-specific list:

    using System.Collections.Generic;
    using Microsoft.SharePoint;
    using System.Data.SqlClient;
    using Microsoft.SharePoint.Client;
    using SP = Microsoft.SharePoint.Client;
    using System.Data.Sql;
    //Note that I cut out the first half of the references since they're all standard system assemblies
    namespace ListToSQL
    class Program
     {
    string connString = "Data Source=ucla2010db;Initial Catalog=REACTOR;Integrated Security=SSPI";
    
    	static void Main(string[] args)
     	{
    		Program prog = new Program();
     		prog.GetListItems();
     	}  
    
             private void GetListItems()
             {
    
    	  string SPSite = "http://MySite/siteName";
    
    	  using (SP.ClientContext context = new SP.ClientContext(SPSite))
     	  {
     			SP.Web web = context.Web;
     			SP.List myList = web.Lists.GetByTitle("MyList");
     			SP.CamlQuery qry = new SP.CamlQuery();
    
    			//No need to actually filter the query. We want all the items
     			qry.ViewXml = @"";
    
     			SP.ListItemCollection listColl = myList.GetItems(qry);
     			context.Load(listColl,
    				items => items.Include(
     				item => item["Title"],
     				item => item["Date"],
     				item => item["OtherField"]));
     				context.ExecuteQuery();
    
     			BulkUpdateSQL(BuildTable(listColl),"myDataTableName");
                }
            }
    
           private DataTable BuildTable(SP.ListItemCollection contextList)
          {
               DataTable dt = new DataTable();
    
               //Select any ListItem at all and loop through the field names
               ListItem colItem = contextList[0];
    
               foreach (string name in colItem.FieldValues.Keys)
               {
    	       //Make the field names into column names
                     dt.Columns.Add(name);
               }
    
               foreach (ListItem item in contextList)
               {
                     //Create a new row for each ListItem
                     dt.Rows.Add(dt.NewRow());
    
                     foreach (string name in item.FieldValues.Keys)
                     {
    	            //Add each FieldValue item to the row
                          dt.Rows[dt.Rows.Count - 1][name] = item[name];
                     }
               }
    
             return dt;
           }
    
           private void BulkUpdatePI(DataTable dt, string destName)
           {
                 using (SqlConnection conn = new SqlConnection(connString))
                 {
                     conn.Open();
                     using (SqlBulkCopy copy = new SqlBulkCopy(conn))
                     {
     /* Note that you can use ColumnMappings [i.e. "copy.ColumnMappings.Add("Title", "name")"]
      * With either ordinal or string-based mapping,
      * But every column you don't map will get ignored if you explicitly map
      */
                            copy.DestinationTableName = destName;
                            copy.WriteToServer(dt);
                     }
              }
    }

     

    TADA! Lists in SQL!

    But what about… LOOKUPLISTS!?

    The only way to do this from MOSS2007 and maintain the lookup info is to export the list to Excel:

      1. In the Data View list view there is an option to export to excel.
      2. Save the file in a location accessible by your DB
      3. From there, go to the DB you want the data in
      4. Right click the management folder and select “Import Data”
      5. In the Import Data Wizard, select “Microsoft Excel” from the dropdown
    • This will prompt you to enter the file name for the excel file. Do that.
  • Leave “first row has column names” checked, since that is the SP export default
  • Click next (but you already knew that)
  • Select the following:
    • Destination:

    Whatever type of DB your MOSS server is, if you are  unsure, use SQL Native Client.

    • Server Name: The name of your MOSS server. If you are unsure, try “MOSS.”
    • Authentication: Most likely windows
    • Database: The database you wanto to import the excel file into.
    • And… Next
  • Now you can copy the data or write a specific query. I tend to just copy all the data so it’s in SQL if I need it
  • On the “Select Source Tables and Views” screen you will see bizarrely named source options. Select the first (possibly only) option. You can change the mappings or preview the table from this screen.
  • Then hit finish. You can schedule the operation or run it now.
  • Great.
  • We’re still not done.
  • From there you can go to your 2010 server and basically perform the same import operation, only add the MOSS Excel table into your new database.
  • This doesn’t actually create primary key lookups, it only imports the data as-is, but now you have it, so you can manipulate it as needed!
  •  

    Paul Forsthoff Reviews OfficeWriter’s Word Export Plus Solution for SharePoint

    The following is an excerpt from a review written by Paul Forsthoff, Senior Practice Consultant at EMC Global Services. Paul Forstoff reviews OfficeWriter’s Word Export Plus Solution for SharePoint Read the full review here.

    I recently had the opportunity to check out SoftArtisans’ OfficeWriter product. The OfficeWriter product exposes an API that allows information from custom ASP.NET applications to be consumed and used to dynamically and programmatically build Microsoft Word documents and Microsoft Excel spreadsheets.

    [Read the full review here.]