Posts

SalesForce API Tutorial .NET DeveloperForce.Force NuGet Package

Image
Below is a guide to getting started with the SalesForce API using the .NET DeveloperForce.Force NuGet package. (GitHub Source to supplement this blog post:  https://github.com/aaronhoffman/SalesForceApiTutorial ) (SalesForce API documentation:  http://www.salesforce.com/us/developer/docs/api/ ) (GitHub Repo:  https://github.com/developerforce/Force.com-Toolkit-for-NET ) Steps: 1. Make sure the API is turned on for your Organization. The API must be activated as part of your license. You'll have to pay for API access per seat (for every user) even if you'll only have one integration. I was told by one SalesForce rep that you can check on the status of this feature on the Setup > Company Profile > Company Information page under the Feature Licenses section, but the API is currently enabled for my organization and I see nothing there... so I can't confirm this.  Ultimately, I had to open a support ticket to get it turned on and working for my organization.

Ninject Set Default to Request Scope When Using Convention Based Binding

In many cases when using ninject on an ASP.NET site it makes sense to configure ninject to use Request Scope for its default object scope. (more info:  https://github.com/ninject/ninject/wiki/Object-Scopes ) When searching for how to set Request Scope as the default object scope, I could not find any code snippets to accomplish this. I found many snippets that would set scope for an individual binding: kernel . Bind < IService >(). To < Service >().InRequestScope(); But no examples of how to set request scope as the default for all bindings. Here is a code snippet of how I accomplished this: kernel .Bind(i => i.FromThisAssembly() .SelectAllClasses() .BindDefaultInterface() .Configure(x => x.InRequestScope())); Hope this helps, Aaron

MailChimp Generic Unsubscribe From List Link

Image
When you send an email from MailChimp they will customize each email with an unsubscribe link specific to the "To" email address.  However, you can also provide a generic unsubscribe link if you'd like to include that on your website or other communication. The generic link can be found after selecting a list, choose the "Signup Forms" tab, then choose "Unsubscribe Form" from the drop down list.  The link is available in the "Unsubscribe from URL" textbox. More information here: http://kb.mailchimp.com/article/where-can-i-find-the-unsubscribe-link-for-my-list/ Hope this helps, Aaron

Pretty Print Array of Arrays in .NET C#

Image
I had a need to pretty-print  an array of arrays while parsing some JSON recently. I couldn't find anything I liked, so I thought I'd post what I ended up with here to save others some time. https://gist.github.com/aaronhoffman/4232d28b769b3e95b143cf609a9e27cc Example Output: [[1,2,3],[3,5,7],[2,4,6]] [[1,2,3]] [[1,2,3],[3,5,7,9,11],[2,4,6]] public string PrettyPrintArrayOfArrays(int[][] arrayOfArrays) { if (arrayOfArrays == null) return ""; var prettyArrays = new string[arrayOfArrays.Length]; for (int i = 0; i < arrayOfArrays.Length; i++) { prettyArrays[i] = "[" + String.Join(",", arrayOfArrays[i]) + "]"; } return "[" + String.Join(",", prettyArrays) + "]"; } Hope this helps, Aaron

Flatten HTML Document to List of Tags, Attributes, and Values

I had a need to flatten a set of HTML documents to a list of the HTML tags in their head sections.  I thought this bit of code might be useful for someone in the future. This uses the CsQuery library which is a port of jQuery in C#:  https://github.com/jamietre/CsQuery CsQuery also has a NuGet Package:  https://www.nuget.org/packages/CsQuery //Note: Get HTML from somewhere... var html = ""; var cq = CsQuery.CQ.Create(html); var head = cq["head"]; var nonScriptHeadTagsQuery = from t in head.Children() where t.NodeName != "SCRIPT" && t.NodeName != "LINK" select new { Tag = t, TagId = Guid.NewGuid() }; var nonScriptHeadTags = nonScriptHeadTagsQuery.ToList(); var htmlTags = nonScriptHeadTags .SelectMany(tagInfo => tagInfo.Tag.Attributes, (tagInfo, attribute) => new { TagInfo = tagInfo, Attribute = attribute }) .Select(x => new { TagId = x.TagInfo.TagId, TagType = x.TagInfo.Tag.NodeName, A