a developer’s blog
Random header image... Refresh for more!

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: }

April 19, 2008   No Comments