Search Commands
Frustrated by the Office ribbon? I just stumbled across this project on Microsoft Office Labs. Can’t find that button that you know was there in Office XP/2003? Just type what you’re looking for and you’re presented with the missing button.
Tags: Office 2007
April 30, 2008 No Comments
Enable Self-Service user in Salesforce.com using C#
I won’t walk through connecting to the Salesforce.com api because that is well documented. One thing I didn’t find documented was how to enable self-service for a Salesforce contact. Well here it is.
First 3 methods used by the main EnableSelfService() method:
1: /// <summary>
2: /// Retrieves a Contact object for the specified contactId
3: /// </summary>
4: /// <param name="contactId">contactId</param>
5: /// <returns>Contact object (containing contact name, phone and email address</returns>
6: public Contact GetContact(string contactId)
7: {
8: //Verify that we are already authenticated, if not
9: //call the login function to do so
10: if (!loggedIn)
11: {
12: if (!Login())
13: return null;
14: }
15: // Invoke retrieve call and save results in an array of SObjects
16: sObject[] records = binding.retrieve("FirstName, LastName, Email, Phone, MySequenom_Enabled_On__c, AccountId, Account.Name, Account.BillingState", "Contact", new String[] { contactId });
17: Contact contact = null;
18: // Iterate through the results
19: if (records!=null && records.Length > 0)
20: {
21: contact = (Contact)records[0];
22: }
23: return contact;
24: }
1: /// <summary>
2: /// Find existing self-service user by email address
3: /// </summary>
4: /// <param name="email">Email address</param>
5: /// <returns>Self-Service userid</returns>
6: private string GetExistingSelfServiceUserId(string email)
7: {
8: //Verify that we are already authenticated, if not
9: //call the login function to do so
10: if (!loggedIn)
11: {
12: if (!Login())
13: return null;
14: }
15: QueryResult qr = binding.query(string.Format("Select Id from SelfServiceUser where Email = ‘{0}’", email));
16: string ssuId = null;
17: if (qr.size != 0)
18: {
19: ssuId = qr.records[0].Id;
20: }
21: return ssuId;
22: }
Reset a self-service user’s password:
1: /// <summary>
2: /// Sets the password for the given userid/selfserviceuserid
3: /// </summary>
4: /// <param name="id">userId or selfserviceuserId</param>
5: /// <returns>auto generated password.</returns>
6: public string ResetPassword(string id)
7: {
8: //Verify that we are already authenticated, if not
9: //call the login function to do so
10: if (!loggedIn)
11: {
12: if (!Login())
13: return null;
14: }
15: string newPassword = StringHelper.GetPassword(6, true, false, false);
16: // Invoke setPassword call and save results in SetPasswordResult
17: SetPasswordResult spr = binding.setPassword(id, newPassword);
18: // returns the generated password
19: return newPassword;
20: }
And finally enable self-service:
1: /// <summary>
2: /// Enables self-service for the specified contactId
3: /// </summary>
4: /// <param name="contact">Contact object</param>
5: /// <returns>password for the newly created Self-Service user.</returns>
6: public string EnableSelfService(Contact contact)
7: {
8: string email, firstName, lastName, contactId;
9: //Verify that we are already authenticated, if not
10: //call the login function to do so
11: if (!loggedIn)
12: {
13: if (!Login())
14: return null;
15: }
16: email = contact.Email;
17: firstName = contact.FirstName;
18: lastName = contact.LastName;
19:
20: // I needed to make some changes to the contact first. So update the contact…
21: contactId = contact.Id;
22: contact = new Contact();
23: contact.Id = contactId;
24: contact.Enable_MySequenom__c = true;
25: contact.Enable_MySequenom__cSpecified = true;
26: contact.MySequenom_Enabled_On__c = DateTime.Now;
27: contact.MySequenom_Enabled_On__cSpecified = true;
28:
29: // then save the contact.
30: try
31: {
32: SaveResult[] srContact = binding.update(new sObject[] { contact });
33: }
34: catch (Exception e)
35: {
36: throw new ApplicationException("Unable to update contact record for contactid: " + contactId + Environment.NewLine + e.ToString());
37: }
38:
39: // open the contact back up.
40: contact = GetContact(contactId);
41:
42: // check to see if a self-service user already exists for this contact.
43: string ssuId = GetExistingSelfServiceUserId(contact.Email);
44:
45: // Self-Service user already exists, just reset password.
46: if (ssuId != null){
47: return ResetPassword(ssuId);
48: }
49:
50: // Create the new self-service user.
51: SelfServiceUser ssu = new SelfServiceUser();
52: ssu.ContactId = contactId;
53: ssu.Email = email;
54: ssu.FirstName = firstName;
55: ssu.LastName = lastName;
56: ssu.Username = contact.Email;
57: ssu.IsActive = true;
58: ssu.IsActiveSpecified = true;
59: ssu.LanguageLocaleKey = "en_US";
60: ssu.LocaleSidKey = "en_US";
61: ssu.TimeZoneSidKey = "America/Los_Angeles";
62:
63: // Invoke the create call, passing in the SelfServiceUser properties
64: // and saving the results in a SaveResult object
65: SaveResult[] srSsu;
66: try
67: {
68: srSsu = binding.create(new sObject[] { ssu });
69: }
70: catch (Exception e)
71: {
72: throw new ApplicationException("Unable to create self-service user for contactid: " + contactId + Environment.NewLine + e.ToString());
73: }
74:
75: // Access the new ID and generate a new password
76: ssuId = srSsu[0].id;
77: string newPassword = null;
78: if (ssuId != null && ssuId != string.Empty)
79: {
80: newPassword = ResetPassword(ssuId);
81: }
82: return newPassword;
83: }
Tags: C#, Salesforce.com
April 19, 2008 No Comments
Working with Users and Groups in SharePoint 2007
As I am about to show you, one of the easier things to do in SharePoint (programmatically) is that add a user to a group and add a user or group to a site.
I’ll be using the SharePoint web service to do this, so first we need to setup the web reference. Add a web reference to your project using the URL: http://[sitename]/_vti_bin/usergroup.asmx (of course you’ll substitute your site name).
Then we need to setup the web service object (I named my web reference AdminService):
1: static AdminService.UserGroup userService = new AdminService.UserGroup();
2: userService.Credentials = System.Net.CredentialCache.DefaultCredentials;
NextI have an enum, class and method to make it easy to remember and work with the different permission types.
1: /// <summary>
2: /// Enumeration representing the various permission levels in SharePoint
3: /// </summary>
4: public enum SharePointPermissionType
5: {
6: /// <summary>
7: /// Full Control - Has full control.
8: /// </summary>
9: [Description("Full Control")]
10: FullControl,
11: /// <summary>
12: /// Design - Can view, add, update, delete, approve, and customize.
13: /// </summary>
14: Design,
15: /// <summary>
16: /// Manage Hierarchy - Can create sites and edit pages, list items, and
17: /// documents.
18: /// </summary>
19: [Description("Manage Hierarchy")]
20: ManageHierarchy,
21: /// <summary>
22: /// Approve - Can edit and approve pages, list items, and documents.
23: /// </summary>
24: Approve,
25: /// <summary>
26: /// Contribute - Can view, add, update, and delete.
27: /// </summary>
28: Contribute,
29: /// <summary>
30: /// Read - Can view only.
31: /// </summary>
32: Read,
33: /// <summary>
34: /// Restricted Read - Can view pages and documents, but cannot view historical
35: /// versions or review user rights information.
36: /// </summary>
37: [Description("Restricted Read")]
38: RestrictedRead,
39: /// <summary>
40: /// View Only - Members of this group can view pages, list items, and documents.
41: /// If the document has a server-side file handler available, they can only view
42: /// the document using the server-side file handler.
43: /// </summary>
44: [Description("View Only")]
45: ViewOnly
46: }
1: /// <summary>
2: /// This internal class is used in conjunction with the SharePointPermissionType enum.
3: /// It allows for the definition of values as strings.
4: /// </summary>
5: class Description : Attribute
6: {
7: public string Text;
8: public Description(string text)
9: {
10: Text = text;
11: }
12: }
Place this within the class where you’re using the enum:
1: /// <summary>
2: /// Used in conjunction with the SharePointPermissionType enum. It returns the value
3: /// as a string.
4: /// </summary>
5: /// <param name="en">SharePointPermissionType</param>
6: /// <returns>String representation of a SharePointPermissionType</returns>
7: private string GetDescription(Enum en)
8: {
9: Type type = en.GetType();
10: MemberInfo[] memInfo = type.GetMember(en.ToString());
11: if (memInfo != null && memInfo.Length > 0)
12: {
13: object[] attrs = memInfo[0].GetCustomAttributes(typeof(Description), false);
14: if (attrs != null && attrs.Length > 0)
15: return ((Description)attrs[0]).Text;
16: }
17: return en.ToString();
18: }
Finally the meat & potatoes…
Add a user to a SharePoint Group (SPGroup):
1: /// <summary>
2: /// Adds a user to a group
3: /// </summary>
4: /// <param name="userName">username of user to add</param>
5: /// <param name="groupName">group name</param>
6: /// <param name="userEmail">user’s email address</param>
7: public void AddUserToGroup(string userName, string groupName, string userEmail)
8: {
9: try { userService.AddUserToGroup(groupName, userName.Replace("CSUpmProvider:", ""), userName, userEmail,