Michael Gibbs » Page 14

Author: Michael Gibbs

I'm a technologist at heart, assisting companies best utilize the Internet to market themselves and sell their products and services online. This includes organizations as large as Google and as small as one or two individuals.
At Over The Top and Exhibit A Communications, I've programmed solutions for Google as well as at least one other company that was later acquired by Google.

I've been CTO of an Internet SaaS company and spent my time pretty evenly between guiding the future technical strategy of the company, architecting software solutions for my dev teams, designing and running a data center to service our clients world-wide as well as being a technical evangalist/sales engineer to our media clients large and small.

I've also been Chief Photographer of the Daily Sun/Post newspaper back when it was a 5-day a week daily newspaper.

I also spent a great many years as a beach lifeguard for the City of San Clemente as well as Jr. Lifeguard instructor and then as it's program coordinator.
Bragging rights
Private Pilot with Instrument rating and proud husband of soon to be 25 years (and counting).

Enhancing your ASPDotNetStorefront Search Page

Enhanced Search Page for AspDotNetStoreFront I recently completed a search page upgrade on one of my client websites (http://www.tobacco-barn.com) and was pleased enough with some of the code on this that I thought I’d share it with the community. Our goals were as follows:

  1. Limit search to just show products and not each variant of the a product
  2. Include images with the search results
  3. Include a description (no more than 500 characters) with each search result
  4. Try and maintain all changes within the page.search.xml.config file

[more]

Of course the first step is to copy the original xml.config file from the /XmlPackages folder into the XmlPackages folder under the skin we are working on.

The next step was to exclude multiple variations (variants) of a product from showing on the result page. At first I figured that I would set up the Product template to ignore the variants after the first one. Then I stumbled on a post on the ASPDNSF support forums indicating that by changing the value of the @ViewType parameter from 0 to 1, I could signal to the stored procedure to only return the product information for a product using the default variant.

The next step was similarly easy to accomplish. After adding another column to the table holding the Product Results (found almost at the end of the / (root) template), i inserted the following lines of code into the Product template:

<td valign="middle" align="left"><a href="{aspdnsf:ProductLink(ProductID, SEName, 0, '')}"><xsl:value-of select="aspdnsf:LookupProductImage(ProductID, ImageFileNameOverride, SKU, 'icon', 0)" disable-output-escaping="yes" /></a></td>

Next up is to get the description to include in the search results listing. First try was to apply substring() to the results from description to just truncate them. The challenge is that if you truncate the product description and the description contains HTML tags, you might accidently split the tags and cause display problems for the remainder of the page. So, I stumbled on some XSTL code that will remove the HTML tags from the content.

So, at the top of the Product template, we create a param and store the Description value that has been transformed by the removeTags template.

<xsl:param name="pDescription"><xsl:call-template name="removeTags"><xsl:with-param name="field" select="Description"/></xsl:call-template></xsl:param>

and the following code gets added to the cell that contains the product name. It checks the length of Description and truncates it if necessary.

<br /><xsl:if test="string-length($pDescription) &gt; 500"><xsl:value-of select="substring($pDescription,0,497)" disable-output-escaping="yes" />...</xsl:if><xsl:if test="string-length($pDescription) &lt;= 500"><xsl:value-of select="$pDescription" disable-output-escaping="yes" /></xsl:if>

Of course all of this is dependant upon the following template to strip out the HTML tags:

<xsl:template name="removeTags"><xsl:param name="field"/><xsl:choose><xsl:when test="contains($field, '&lt;') and contains(substring-after($field, '&lt;'), '>')"><xsl:value-of select="substring-before($field, '&lt;')"/><xsl:call-template name="removeTags"><xsl:with-param name="field" select="substring-after(substring-after($field, '&lt;'), '>')"/></xsl:call-template></xsl:when><xsl:otherwise><xsl:value-of select="$field"/></xsl:otherwise></xsl:choose></xsl:template>

Hopefully you’ll find this code useful. If you have similar code that has some improvements to it, please feel free to use the comments
section below to give us our opinion on this solution.

Recursing Through AppConfig File

While doing some updates to the EmmCLA program (more to come on this soon), I needed to have it loop through all the AppSettings in in App.Config file (the same should hold true for Web.Config for web apps) to find all occurrences of appsettings that were similar to a certain string.

A few Google searches later led me to the solution of using System.Configuration.ConfigurationSettings.AppSettings.AllKeys which returns a string array of all the keys in the AppSettings portion of App.Config:

// Loop through all AppSetting keys to find those 
// matching DBConn-xxxx
string[] AppSettings = ConfigurationSettings.AppSettings.AllKeys;foreach (string s in AppSettings){if (s.ToLower().Contains("dbconn-")){
// Do Something Here
}}

I’ve posted this in case anyone else finds a need to do something similar. This saved me a great deal of work and hopefully someone else will similarly benefit.

If you find this of some benefit, please leave us a comment below and let us know how you are using it.

Webgains, ASPDotnetStorefront and Google Checkout, Oh My!

I got a Google Alert about an article posted recently by UK Developers over at WebOpius. The put together a nice little piece about how to get all three of these technologies up and running, and better yet, playing nicely together. This is the first of many posts by them on this subject. I very much look forward to seeing how the progress on this project as it may prove beneficial to my customers as well!

In case you aren’t familiar, ASPDotNetStorefront (ASPDNSF) is the leading e-commerce solution for the ASP.NET platform. Google Checkout is a competitor (of sorts) to PayPal while WebGains is an affiliate facilitator where merchants can create and manage an affiliate network to help sell more.

Some of you may be saying, but wait, doesn’t ASPDNSF have an affiliate program built in? Yes Virginia, it does. However, it is really more of a framework upon which to build your own affiliate program. Not only will an affiliate program like WebGains help you manage your relationship with your affiliates, but you will also have access to a ready market of engaged affiliates rather than having to drum them up and vet them yourself.

Here’s a link to the original article: http://www.webopius.com/content/249/integrating-webgains-affiliate-network-with-aspdotnetstorefront/

Do you have experience working with affiliates with your e-commerce platform? If so, please feel free to share your experiences, good and bad!

Canada’s Anti-Spam Bill

Here’s what you need to know about Canada’s Anti-Spam Bill that was recently introduced. Three are some significant differences between this and the US CAN-SPAM legislation that businesses will want to keep in mind as they pursue their marketing plans involving email communications with customers and potential customers alike.

Canada’s Electronic Commerce Protection Act (ECPA) is expected to have rules regarding opt-in and opt-out procedures, consumer privacy and sender identification. Of course will all legislation, there is some ambiguity in the wording so you should use the links at bottom to make your own interpretation or contact counsel.

Permission is Required
The primary difference between ECPA and CAN-SPAM is inherit in the acronyms. The US version does not require advance permission to send the emails. Basically, you CAN SPAM provided you follow the rules that allow for opt-out mechanisms as well as real-world contact information. ECPA on the other hand prohibits the sending of commercial email without prior permission from the recipient. There are provisions however for implied consent so long as a relationship (business or non-business) can be established between the sender and the recipient.

SMS Messages Require Advance Permission
The ECPA lumps text and SMS messages into the same category so keep the elements of this law in mind for this type of communication as well.

Unsubscribes Must Stay Active for 60 days
You will be required to maintain active unsubscribe links in your outbound emails that are active for a minimum of 60 days. This is not a problem with EMM since the unsubscribe links are persistant.

Unsubscribes Must be Honored in Timely Manner
More importantly, they’ve set a deadline of 10 days in order to act on any unsubscribe requests. Note that CAN-SPAM allows for 10 business days while ECPA does not so you have less time under this proposed Candadian legislation. EMM will assist you in this manner in that the unsubscribe links embedded in the emails will automatically unsubscribe users when they click on it. This should be strong encouragement to also manage your bouncebacks to ensure that your customers don’t try and unsubscribe by replying to your mailing.

Individuals Can Sue Violators
ECPA contains provisions that allow for a “private right of action” that allows individuals to sue spammers up to $200 per item. This could have huge effects for businesses in violation as individuals could join together for class-action suits to create a substantial settlement. Of course, the government can also sue; in this case for up to $10 million!

How Do I Identify A Canadian Address?
Easiest way is to identify the addresses that end in .ca which is the Canadian Top Level Domain. You can easily target or exclude these addresses using our custom query feature if you wish to engage in a permission campaign on the external customer list. If you are collecting geographic information in your external mailing list, you can use Zip/Postal codes or state/province information to identify these addresses. Lastly, you can do IP address lookups on the site visitor’s IP address using a tool like ip2Location.com but again, if you are sending to your customers in ASPDNSF you should be fine as they have explicitly opted in.

Bottom Line
If you are working with our EMM product and working in your ASPDNSF customer base, you are covered. If you are using the external user base, you need to tread more carefully if the names were not collected on an opt-in basis. Between now and when the bill passes, you might wish to engage in a permission campaign to convert these addresses to a opt-in addresses.

Making Google Apps Your Default Mail Provider in Vista

I was doing some research lately in order to help a client set up their Google Apps (Gmail) account set up as the default mail client in Vista lately when I found a link on About.com that states:

Unfortunately, you cannot set the Gmail web interface as your default email program in Windows Vista. You can set up Gmail in an email program such as Windows Mail, though, and thus send from your

Setting Google Apps email as your default mail provider for MailTo: linksThis statement couldn?t be further from the truth. If you have the Google Talk application installed on your computer, you?ll have the option to map your logged in account to be default email when you click on mailto: links in your web browsers. Email links work great in IE, Chrome and Firefox; launching Gmail, or if you are logged into Google Talk using a Google Apps account it will launch Gmail for your domain, using the default browser.

The process is to open Google Talk application and go to Settings. In the General section, you?ll see the option to ?Open Gmail when I click on email links?; just select that and you are in business.

Yet another reason why moving your business, and your life over to Google Apps and living in the cloud is a great idea! Let us help you move your life into the cloud.

EMM and AspDotNetStorefront v8.0.1.1

UPDATED:

 If you don’t mind getting your hands dirty, you can do the following to all of the xaEmm*.aspx.cs files in order to get this working with your website:

Add a Using reference to AspDotNetStorefrontCore to the top of the file as shown below:

 

 

I’m sure purists might insist that you actually replace the AspDotNetStorefronCommon line with the AspDotNetStorefrontCore line but I haven’t fully regression tested that to make certain all works as expected. Other than that, you should be good to go! Please report back here if you experience any problems after your upgrade or use the Contact Us form for more support.

Original Posting: 

There are some changes in the core programming concepts in v8.0.1.1 of ASPDNSF that will prevent EMM from working. If you upgrade from v8.0.0.0 (or any previous version) please be aware that until I’ve completed my work in updating EMM, the Enhanced Mailing Manager for AspDotNetStorefront will not work.
 I’ll have more information on this available as the weekend progresses. 

POSTSCRIPT:
I’m not certain what happened to the image that is supposed to appear up above but the information is that you basically replace every instance of “using AspDotNetStorefront;” in any of the asp.cs files with “using AspDotNetStorefrontCore;”

UPDATED:

Please find below a copy of v1.0.1.1 of EMM that has been modified to work, out of the box, with v8.0.1.1 and v8.0.1.2 of ASPDNSF. Note, support for v9.x is forthcoming.

EMMv1.0.1.1-For8.0.1.1AndUp.zip (55.14 kb)

AspDotNetStoreFront – Another View

We've been singing the praise of AspDotNetStorefront (ASPDNSF) for some time now on our blog and in discussions with potential and current customers. It is great to stumble across a few from another writer:

Give Your Online Business The Edge With The Best ASP Shopping Cart Software

These days, competition for those online dollars that consumers are increasingly reluctant to part with has gotten more ferocious than ever. That's why it's so important to give your online enterprise every advantage you can. There's only so much that any vendor can do to lower prices without cutting into their profits. Business owners, however, can increase their online business and make their site more effective in comparison to competitors by offering the best service that the Internet has to offer. Getting the right ASP shopping cart software, that is specifically customized for your site will prove to be a great investment.

One of the most obvious things that you can do to improve your business immediately is by streamlining the ordering process on your website. Face it; one of the biggest drawing cards that any Internet business has to offer is convenience.

However, if you have a clunky, ugly to look at, hard to use website that makes searching your inventory and ordering products a cumbersome chore, then there's no telling just how many potential customers you'll drive off.

Personally, I can't tell you how many times I've gotten frustrated and refused to use some online vendor because of how time-consuming and badly organized that company's ordering process was. What you need if you have an online business is the best software you can get. This will make ordering from your website a breeze. The easier your site is to use, the more word will get around.

I'm a firm believer in the old adage that word of mouth is the best advertising, even in the Age of the Internet and other electronic media. With money as tight as it is, and the futures of so many different businesses held in doubt, it may seem counter-intuitive to be spending money on something like new shopping cart software, but trust me, right now, it will be money that's well-spent and will continue to benefit your company and your bottom line for decades to come.

When you finally come to the realization that you really need that new software, here are some things to bear in mind:

  1. Expense: The most expensive software isn't necessarily going to be the best. Even if it advertises that it's got all the latest bells and whistles, cost in the software industry isn't necessarily related to the best of the best. Sure, you want software that's flexible to use and rich in features, but it's also got to be easy for your IT staff to install and maintain. Plus, you don't want installation that's going to be a system hog, either. Even though servers and peripherals have gotten less expensive, it's still important to get the biggest bang for the buck when you're buying software products for your enterprise.
  2. Adaptability: Aside from being economical to purchase and run, I think the next most important thing about shopping cart software is that it's got to be adaptable to many uses, both for your enterprise, and for your customers. For instance, does the software you're currently considering buying enable you to control your shopping carts, your content management, and your customer accounts? It's not enough that you can help your customers place their orders, it's essential that you can track their orders, your own inventories, and every step of the transaction until your product arrives at your customer's front door.

There's no point in buying ASP shopping cart software that doesn't do everything you need it to. Don't wind up piecing together a system from different vendors that may have compatibility and licensing issues. That will prevent your cobbled-together system from functioning at peak efficiency. It makes much more sense to buy one product that satisfies all of your needs and is expandable for the future growth of your company.

About the Author

Andy West is a writer for ASP Dot Net Storefront, an online resource for all your ecommerce software needs.

Creative Commons License
This article is licensed under a Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 License.

 

And yes, ASPDNSF answers all those needs for you. Of course, your results will be best if you partner with a developer and hosting company that has a great deal of implementation experience with developing for AspDotNetStoreFront as well as hosting ASPDNSF.

Next Version of Enhanced Mail Manager for ASPDNSF

Here are some of the ideas on the roadmap for the next version of EMM:

  • Attachments ? Originally we didn?t include this due to our previous experience as a mail service provider for thousands of clients, serving millions of emails a day. By not sending attachments, the likelihood of acceptance by a wider range of mail servers is higher and the risk of spreading viruses is eliminated. However, these concerns may not be shared by all and there are certain situations where this feature might be useful. My initial thoughts are that it would require a Super Admin account to turn this feature on and it will be off by default.
  • Scheduled Jobs ? I?m not sure if I?ll be able to squeeze this into this version. This might be a feature that requires the ability to run a service on the server that is hosting the machine; limiting its usefulness to those who have dedicated or virtual servers. I?m investigating a way to simulate a service using ONLY what is available to ASP.NET.
  • Daily limits ? The AppConfig variable has existed for this since the first release but we haven?t been utilizing it. This feature hasn?t made much sense to include until the scheduled jobs feature is enabled.
  • Archive of emails/newsletters for presentation online
    • Allow viewing/listing on a per-campaign basis
    • Define if it shows inside or outside the site framework (lytebox?)
    • Set expiration date for campaign to be listed/viewed
  • Fix a bug in the editor (long story)
  • Support locking down the Track.Click action files to prevent their sue by spammers by limiting them to internal links. http://googlewebmastercentral.blogspot.com/2009/01/open-redirect-urls-is-your-site-being.html

Do you have any other features you?d like to have us consider for inclusion in the next release of EMM? If so, please use the comments section below to speak up. Or if you have any questions or thoughts about the features mentioned above, please do use the comment section to continue this discussion.

Fed Up with Busby SEO Test Spammers…

Ok, bear with me here a minute. I don't usually use this forum for personal rants but I've had it with these Spammers (to put it kindly) that are participating in the Busby SEO Test contest putting up inane and irrelevant comments on this site just so that they can get a link back to their site and increase their SEO rankings. My understanding is that this contest awards a cash prize to whoever gets the highest rankings for a particular term with a from scratch site. Or something like that.

I put up with the lame "Nice article" or "good info" kind of comments but the last straw came when someone posted a comment to the effect of "Great information, I'll use this technique on my blog" when the content of the posting was source code on how to add Video to a product page in ASPDNSF. Good try sweetie…

So, I've added a BE.Net extension that will automatically add certain types of comments (not gonna say how so they can't try and game it) to our blacklist. And if new ones slip through, comments are MODERATED on this website so I will be deleting, not approving, any comments that come in that hint of being affiliated with this contest that is turning normal people into spammers, all under the guise of a competition.

</RANT>

Embedding Videos In ASPDNSF Product Pages

One of our clients was facing a desire to move torwards placing videos or other flash objects into the product display pages of ASPDNSF. The introduction of a Tabbed UI provided a great framework for this but the same concept could apply to any of the product display XMLConfig package.

One of the first criteria was that it needed to be seamless to site visitors; when a video was available, it had to show but they didn?t want any thing ?trumpetting? the lack of video for a particular product. It also needed an easy to administer interface on the product edit pages. They didn?t want to jump through hoops to embed the javascript/flash code into a product description field since the WYSIWYG editor is not always kind to this type of content. More importantly, I didn?t want to have to create a new administrative interface to edit this new data.

Luckily, the product data store has a number of suitable fields that are currently available for custom use. One of these is the MiscText field. Thankfully, the stored procedure used by this XMLPackage uses the aspdnsf_ProductInfo stored procedure already retrieves this value so we won?t have to make a change to the stored procedure. Making a small change like adding another field to the stored procedure?s SELECT statement is very easy to do but we always try and keep an eye towards ease of upgrades. When a newer version of ASPDNSF comes out, the fewer changes we have to make to stored procedures the better.

So, if you look at the XMLConfig package for the Tabbed UI, you?ll see that each of the tabs is defined by a list item in an unordered list (for the tab iteslf) and a div for the page that is presented when the tab is clicked. Below you?ll find the additional LI that we added to get the tab to show up. You?ll notice that the LI is wrapped up in a conditional xsl:if statement that checks to make sure we have any content in the MiscText field. If it is empty, the tab isn?t shown.

                            <xsl:if test="aspdnsf:GetMLValue(MiscText) != ''">
                              <li>
                                <a href="#" rel="video">
                                  Video
                                </a>
                              </li>
                            </xsl:if>

Of course we could created the word video as a string resource and called it using aspdnsf:StringResource(‘product.tabUI.videotab’) but the client assured me that they had no intention of changing their mind on the text (we?ll see).

Next we?ll need to define the tab to contain the video. Again, we?ll be creating this div conditionally:
                            <xsl:if test="aspdnsf:GetMLValue(MiscText) != ''">
                              <div id ="video" class="tabcontent">
                                <xsl:value-of select="aspdnsf:GetMLValue(MiscText)" disable-output-escaping="yes" />
                              </div>
                            </xsl:if>

And that is all you need to do really. With minimal effort and only 12 lines of code, you?ve added added a new container for ?difficult to present and edit? data in your product pages.

If you?ve got any thoughts about this or questions, please use the Comments below to carry on this conversation.