Category Archives: Uncategorized

Cloud Plumbing Interview

http://www.cloudplumbing.com/episode/mark-rowe-interview

Share on Facebook

Info on May-June CTP for Azure.

http://blogs.msdn.com/b/appfabric/archive/2011/05/14/announcing-the-windows-azure-appfabric-ctp-may-and-june-releases.aspx

Has an intro to Topics and Queue’s as well from David Ingham. Good way to get ahead of the curve!

Share on Facebook

Atlanta Code Camp!

Helping organize the Atlanta code camp this year with a host of Atlanta’s other UG leaders
Doug Ware, Dan Attis, Sergey Barskiy, Jim Wooley.

We need Volunteers still!
Code Camp – Click Here!
June 25th at SPSU!

Share on Facebook

TechED

TechED was wonderful this year. I got to meet many of the new Azure MVP’s. INETA seemed to be a big hit to the people who were actively involved, so that was revitalizing. BOF session #1 I got to speak a little bit about azure:

http://www.microsoft.com/events/series/teched2011.aspx?tab=Videos&seriesid=190&webcastid=17713

TechEd 2011 Birds-of-a-Feather (Session 01): How Do Organizations Plan for the Cloud?

Share on Facebook

Cloud Speech in Atlanta on the 21st.

Microsoft and Magenic want to show you the best way to include cloud computing into your technology solution set. Dan Sandlin (Azure Solution Specialist) will discuss which projects are right for cloud computing and which ones you should avoid, as well as how to select your first cloud project and the ROI of Azure. Sergey Barskiy (Magenic Principle Consultant) will discuss how cloud is more than just an enormous virtual machine and the building blocks of Azure.

Windows Azure offers flexibility, growth opportunities and long term stability, but only when approached the right way. Come learn where to start.

We will gather at the Ravinia Club in Atlanta on Thursday, April 21 from 7:30-10:30 am. Breakfast will be served.

Event Details

Date:
Thursday, April 21
7:30-10:30am

Location:
2 Ravinia Drive #100
Atlanta, GA 30346

View Map on Bing

Get Directions

Share on Facebook

Couldn’t Uninstall Microsoft ASP.NET Web Pages when trying to install WebMatrix MVC3

A few different links helped, this one to enable verbose logging. Verbose Logging.
I didn’t do the post registry delete, I just changed their keys back to their proper values:
HKLMSOFTWAREPoliciesMicrosoftWindowsInstaller
Set Installer Debug Values. Go to registry and reset these to desired values.

This Post by Matt Garven finally worked, I couldn’t link it but it is the first workaround to this post: Microsoft Connect: Matt’s Post:
Posted by matt.garven on 3/10/2011 at 10:35 PM
We experienced the same issue – I was unable to install because an old version of “Microsoft ASP.NET Web Pages” was still installed. However, the uninstaller was failing for the old version.

It seems VS 2010 SP 1 modifies the framework paths in the registry to contain a trailing backslash, which causes the uninstaller for the old version of “Microsoft ASP.NET Web Pages” to fail.

Steps to workaround are:

1. Remove the trailing backslash from the following registry keys:
HKEY_LOCAL_MACHINESOFTWAREMicrosoftASP.NET4.0.30319.0Path
HKEY_LOCAL_MACHINESOFTWAREWow6432NodeMicrosoftASP.NET4.0.30319.0Path

2. Uninstalled the old version of “Microsoft ASP.NET Web Pages”.
3. Add the trailing backslash back to those keys.
4. Install MVC 3.

Good stuff.

Share on Facebook

INETA – Membership Director

Taking some time away from blogging due to some new responsibilities that I need to get caught up on.

I’ll be back by April, hitting Azure.

Share on Facebook

Integration Users Group KickOff Speech

Main Overview of speech

Once I have re-edited the BizTalk Exposed endpoints to allow for Create, Update and Delete I will publish the source code.

Share on Facebook

Sharepoint Client Object model access from WCF (SOA) service.

Customers.svc

  <%@ ServiceHost Language=”C#” Debug=”true” Service=”MIA.Speech1.WcfService.Customers” CodeBehind=”Customers.svc.cs” %>

Customers.svc.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.Text;
using MIA.Speech1.Helpers;

namespace MIA.Speech1.WcfService
{
public class Customers : ICustomers
{

public List GetAllCustomers() {
return ClientObjectModelHelper.GetAllCustomers();

}

public Customer GetCustomerByID(string id) {
return ClientObjectModelHelper.GetCustomerByID(id);
}

public List CreateCustomer(string lastName, string firstName, string email, string address1) {
Customer c = new Customer();
c.Address1 = address1;
c.LastName = lastName;
c.FirstName = firstName;
c.EmailAddress = email;
return ClientObjectModelHelper.CreateCustomer(c);
}

public bool UpdateEmailAddress(string id, string emailAddress)
{
Customer c = new Customer();
c.idBDC = id;
c.EmailAddress = emailAddress;
return ClientObjectModelHelper.UpdateEmailAddress(c);
}

public bool UpdateName(string id, string lastName, string firstName)
{
Customer c = new Customer();
c.idBDC = id;
c.LastName = lastName;
c.FirstName = firstName;
return ClientObjectModelHelper.UpdateEmailAddress(c);
}
}
}

ICustomers.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.Text;
using MIA.Speech1.Helpers;

namespace MIA.Speech1.WcfService
{

[ServiceContract]
public interface ICustomers
{
[OperationContract]
List GetAllCustomers();

[OperationContract]
Customer GetCustomerByID(string id);

[OperationContract]
List CreateCustomer(string lastName, string firstName, string email, string address1);

[OperationContract]
bool UpdateEmailAddress(string id, string emailAddress);

[OperationContract]
bool UpdateName(string id, string lastName, string firstName);
}

}

Customer.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.Serialization;

namespace MIA.Speech1.Helpers
{
// Use a data contract as illustrated in the sample below to add composite types to service operations.
[DataContract]
public class Customer
{
[DataMember]
public string idBDC { get; set; }
[DataMember]
public string FirstName { get; set; }
[DataMember]
public string LastName { get; set; }
[DataMember]
public string EmailAddress { get; set; }
[DataMember]
public string Address1 { get; set; }
}
}

ClientObject Helper.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.SharePoint.Client;
using Microsoft.SharePoint;

namespace MIA.Speech1.Helpers
{
public static class ClientObjectModelHelper
{

public static List GetAllCustomers()
{
using (ClientContext spContext = new ClientContext(ConstantsHelper.SPSiteURI))
{
spContext.AuthenticationMode = ClientAuthenticationMode.Default;

// To Show a list of lists
Web web = spContext.Web;
spContext.Load(web);
spContext.Load(web.Lists);
spContext.ExecuteQuery();
ListCollection ls = web.Lists;
StringBuilder sb = new StringBuilder();
foreach(List eachList in web.Lists)
{
sb.Append(String.Format(“[{0}]n”, eachList.Title));
}
string s = sb.ToString();

//Use CamlQuery to get just the item you want.
Microsoft.SharePoint.Client.List list = spContext.Web.Lists.GetByTitle(ConstantsHelper.CustomerListName);
ListItemCollection items = list.GetItems(new CamlQuery());
spContext.Load(items);
spContext.ExecuteQuery();
//A View
//query.ViewXml = String.Format(“{0}”,lastName);

//return (from a in items.AsEnumerable()
// select new Customer()
// {
// id = Int64.Parse(a.FieldValues[“id”].ToString()),
// EmailAddress = a.FieldValues[“EmailAddress”].ToString(),
// LastName = a.FieldValues[“LastName”].ToString(),
// FirstName = a.FieldValues[“FirstName”].ToString(),
// Address1 = a.FieldValues[“Address1”].ToString()
// }).ToList();
List lc = new List();
foreach(ListItem l in items)
{
Customer c = new Customer();
c.Address1 = l.FieldValues[“Address1”].ToString();
c.EmailAddress = l.FieldValues[“EmailAddress”].ToString();
c.FirstName = l.FieldValues[“FirstName”].ToString();
c.idBDC = l.FieldValues[“BdcIdentity”].ToString();
c.LastName = l.FieldValues[“LastName”].ToString();
lc.Add(c);
}
return lc;
}
}

public static Customer GetCustomerByID(string BDCIdentity)
{
using (ClientContext spContext = new ClientContext(ConstantsHelper.SPSiteURI))
{
Web web = spContext.Web;
spContext.Load(web);
spContext.Load(web.Lists);
spContext.ExecuteQuery();
Microsoft.SharePoint.Client.List list = spContext.Web.Lists.GetByTitle(ConstantsHelper.CustomerListName);
ListItemCollection items = list.GetItems(new CamlQuery());
spContext.Load(items);
spContext.ExecuteQuery();
Customer c = new Customer();
//LINQ doesnt seem to work properly.
//ListItem myCustomerItem = items.Where(b => b.FieldValues[“BdcIdentity”].ToString() == BDCIdentity).FirstOrDefault();
foreach (ListItem myCustomerItem in items)
{
if (myCustomerItem.FieldValues[“BdcIdentity”].ToString() == BDCIdentity)
{
c.idBDC = myCustomerItem.FieldValues[“BdcIdentity”].ToString();
c.EmailAddress = myCustomerItem.FieldValues[“EmailAddress”].ToString();
c.LastName = myCustomerItem.FieldValues[“LastName”].ToString();
c.FirstName = myCustomerItem.FieldValues[“FirstName”].ToString();
c.Address1 = myCustomerItem.FieldValues[“Address1”].ToString();
return c;
}
}
return c;
}
}

public static List CreateCustomer(Customer c)
{
using (ClientContext spContext = new ClientContext(ConstantsHelper.SPSiteURI))
{
Microsoft.SharePoint.Client.List list = spContext.Web.Lists.GetByTitle(ConstantsHelper.CustomerListName);
spContext.AuthenticationMode = ClientAuthenticationMode.Default;
spContext.ExecuteQuery();
ListItemCreationInformation newItem = new ListItemCreationInformation();
ListItem newCustomer = list.AddItem(newItem);
newCustomer[“Address1”] = c.Address1;
newCustomer[“EmailAddress”] = c.EmailAddress;
newCustomer[“LastName”] = c.LastName;
newCustomer[“FirstName”] = c.FirstName;
newCustomer.Update();
spContext.ExecuteQuery();
list.GetItems(new CamlQuery());
return GetAllCustomers();
}
}

public static bool UpdateEmailAddress(Customer c)
{
using (ClientContext spContext = new ClientContext(ConstantsHelper.SPSiteURI))
{
List list = spContext.Web.Lists.GetByTitle(ConstantsHelper.CustomerListName);
spContext.AuthenticationMode = ClientAuthenticationMode.Default;
CamlQuery query = CamlQuery.CreateAllItemsQuery(); ;
ListItemCollection listItems = list.GetItems(query);
// Should only take
spContext.Load(listItems, items => items.Where(a => a.FieldValues[“BdcIdentity”].ToString() == c.idBDC));
spContext.ExecuteQuery();
if (listItems.Count > 0)
{
//Should only be one returned.
listItems[0].FieldValues[“EmailAddress”] = c.EmailAddress;
listItems[0].Update();
spContext.ExecuteQuery();
listItems = list.GetItems(query);
spContext.Load(listItems, items => items.Where(a => a.FieldValues[“BdcIdentity”].ToString() == c.idBDC));
spContext.ExecuteQuery();
return listItems[0].FieldValues[“EmailAddress”].ToString() == c.EmailAddress;
}
return false;
}
}

public static bool UpdateName(Customer c)
{
using (ClientContext spContext = new ClientContext(ConstantsHelper.SPSiteURI))
{
List list = spContext.Web.Lists.GetByTitle(ConstantsHelper.CustomerListName);
spContext.AuthenticationMode = ClientAuthenticationMode.Default;
spContext.AuthenticationMode = ClientAuthenticationMode.Default;
CamlQuery query = CamlQuery.CreateAllItemsQuery(); ;
ListItemCollection listItems = list.GetItems(query);
// Should only take
spContext.Load(listItems, items => items.Where(a => a.FieldValues[“BdcIdentity”] == c.idBDC));
spContext.ExecuteQuery();
//Should only be one returned.
if (listItems.Count > 0)
{
listItems[0].FieldValues[“LastName”]= c.LastName;
listItems[0].FieldValues[“FirstName”] = c.FirstName;
listItems[0].Update();
spContext.ExecuteQuery();
listItems = list.GetItems(query);
spContext.Load(listItems, items => items.Where(a => a.FieldValues[“BdcIdentity”].ToString() == c.idBDC));
spContext.ExecuteQuery();
return listItems[0].FieldValues[“FirstName”].ToString() == c.FirstName && listItems[0].FieldValues[“LastName”].ToString() == c.LastName;
}
return false;
}
}
}
}


Share on Facebook

Sharepoint BCS Connections

Resources:

Sharepoint BCS: Connecting to an XML file.
http://www.screencast.com/users/jthake/folders/SharePointDevWiki.com%20Screencast/media/10d81c1f-2bbf-417f-a307-1e88933b2864
Permissions Issues
http://www.biztalkgurus.com/blogs/biztalksyn/archive/2010/04/23/sharepoint-2010-rtm-and-bcs-permissions.aspx
Hosting BAP in Sharepoint
http://blogs.msdn.com/b/sharepoint/archive/2008/03/24/announcing-the-microsoft-biztalk-adapter-pack-office-developer-program.aspx
Pre-requiste WCF LOB Adapter SDK SP2
http://www.microsoft.com/downloads/en/details.aspx?displaylang=en&FamilyID=47ab6f21-0d8b-4c90-a8b9-e8647281b164
Download (if you don't have MSDN) Biztalk Adapter pack 2.0
http://www.microsoft.com/downloads/en/details.aspx?displaylang=en&FamilyID=76736ba7-3c05-4436-9353-1c33f9005194#AffinityDownloads
Adapter Pack Overview (Microsoft)
http://www.microsoft.com/biztalk/en/us/adapter-pack.aspx

HowToGuide for LOB 1.0
http://msdn.microsoft.com/en-us/library/dd442475(BTS.10).aspx

Sharepoint 2010 BCS + SAP
http://spninjablog.wordpress.com/2010/01/22/sharepoint-2010-bcs-wcf-sap/
http://kalsing.blogspot.com/2009/07/accessing-business-data-with-sharepoint.html
http://www.slideshare.net/kalsing/sharepoint-saturday-india-sapsharepoint-interoperability
http://blogs.technet.com/duetenterprise/archive/2010/04/16/technical-overview-of-duet-enterprise-for-microsoft-sharepoint-and-sap.aspx

AppDev's Doug Ware.  Georgia SharePoint expert, owner of Elumenotion. 
Exploring Sharepoint 2010 -Module 6 External Data.
www.Appdev.com
Explained how and when to use which content type.  The easiest of the above to follow.
Goal: Learn BCS

1.     Created New Site with defaults for most. 
2.     Created Site Collection

 

 
Error 1: When I tried creating a site collection I received this message from SharePoint.
I found this in the Event Viewer:
The Execute method of job definition Microsoft.SharePoint.Administration.SPUsageImportJobDefinition (ID 54f1a2a7-9981-47a9-8cae-f27c5664469a) threw an exception. More information is included below.    Access to the path 'C:Program FilesCommon FilesMicrosoft SharedWeb Server Extensions14LOGS' is denied.   
Gave Network Service access to that directory.. 

  

Error 2:

  

Fixed by this post.
 http://social.technet.microsoft.com/Forums/en-US/sharepoint2010customization/thread/2a64ce83-ecf5-4f43-a46d-a6c3598df8cc/
Formatted box,  Server 2008R2 restarted  ran DCPROMO first, then VS2010 (without express), SQL 2008 R2, SP 2010, SP2010 designer. 
Seems that the Workgroup setup  does not play well with Sharepoint 2010. So remember if you are using a development box you want to make sure it is a doman controller. 

Share on Facebook