MSDN Roadshow

I recently attended a Microsoft MSDN Roadshow. The slides for the presentations are here:

It covered
* ADO.NEXT – Entity Framework & Data Services
* ASP.NEXT – The ASP.NET 3.5 Extensions
* Building Rich Internet UI with Silverlight 2
* Getting the most from the Visual Studio Team Suite Toolbox

Probably the most interesting area was all the tools that are now available in Visual Studio Team System for unit testing, SQL refactoring and schema versioning.

Suppressing e-mail communication to adhere to CAN-SPAM act

Has anyone implemented an e-mail suppression process to prevent iMIS users from sending e-mail to customers who have opted out of receiving e-mail per the CAN-SPAM act? We maintain a table of the e-mail addresses of our customers who have chosen not to receive any promotional e-mail. We use that table to exclude that set of customers when selecting lists for mass e-mail marketing campaigns. We also want to programatically prevent our iMIS users from sending e-mail through iMIS to these customers. One proposed solution is to use a Customer Service Alert to notify our customer service reps that the customer that they're viewing has opted out of receiving e-mail (using their e-mail address). That would provide a clear warning to the customer service rep but would not prevent them from sending an e-mail. We would like to programatically prevent such e-mail. We're interested in hearing from anyone who has implemented an e-mail suppression solution in iMIS 10.6 to support the CAN-SPAM act.

Turning Off Smart-Quotes in Outlook 2007

I typically find myself typing actual code into many emails, and get annoyed when Outlook replaces my single and double quotes with the curley "smart-quotes"... as this makes cutting/pasting without syntax errors painful. So after a little digging, I found out how to turn smart-quotes off in Outlook 2007:

  1. In the main Outlook window, on the Tools menu, click Options.
  2. In the Options dialog box, click the Mail Format tab, and then click Editor Options.

Development Mode

Hi all,

I was wondering if there is an option to enable E-mail redirecting to a single account to prevent Customers in the database from receiving test E-mails?


Creating Crystal Reports that insert data - Example Member Card tracking in Activity

Sometimes a custom Crystal Report is needed which does not use the iMIS search dialog boxes. This is usually the case when there are nested queries and multiple joins. This solution was created to permit the generation of a Member Card export that inserts an Activity recording the generation. Because we did not use a search dialog, we could not use the option PRINT_CREATE_ACTIVITY. So... I based the report on a stored procedure. The key is that you must do the insert part of the stored proc before you do the select for the data. I tried it the other way around, and the inserts of the tracking activities did not complete. I do not have a certain explanation, but apparently Crystal closes the stored proc connection as soon as all the data is returned. So insert would start, but stop only about 10% through the update. Simply moving it to the top seems to have solved the problem. Here is a sample of the stored proc: USE [iMIS_DEV] GO /****** Object: StoredProcedure [dbo].[asiconsulting_MemberLabels_RenewPackets] Script Date: 02/01/2008 10:05:10 ******/ SET ANSI_NULLS OFF GO SET QUOTED_IDENTIFIER OFF GO ALTER PROCEDURE [dbo].[asiconsulting_MemberLabels_RenewPackets] @BeginDate datetime, @EndDate datetime AS /****** create cursor to select the records to update and insert into Activity table */ DECLARE MEMPACKET cursor for select n.ID from Name n Join Name_Address na ON n.MAIL_ADDRESS_NUM = na.ADDRESS_NUM Join Subscriptions s ON n.ID=s.ID and s.PRODUCT_CODE='Basic_DUES' Left Outer Join Name n2 ON n.ID = n2.CO_ID and n2.MEMBER_TYPE = 'JNTS' where n.Member_record = 1 and n.Member_type <> 'JNTS' and n.Status = 'A' and N.PAID_THRU >= GetDate() and na.Status = '' and s.Date_Added not between @BeginDate and @EndDate and s.PAYMENT_DATE between @BeginDate and @EndDate DECLARE @ID varchar(10) Open MEMPACKET fetch next from MEMPACKET into @ID While @@FETCH_STATUS<>-1 BEGIN Declare @Result int, @NewActSeqn int exec @Result=sp_iboGetCounter 'Activity',1,@NewActSeqn output insert into Activity (SEQN,ID,NOTE,ACTIVITY_TYPE,Other_code,SOURCE_SYSTEM,PRODUCT_CODE,TRANSACTION_DATE) values (@NewActSeqn,@ID,'','MEMPACKET','Renewal','MEMBER','',GetDate()) fetch next from MEMPACKET into @ID END close MEMPACKET deallocate MEMPACKET /****** Use exactly the same selection criteria as the cursor for the selected output in the Crystal report */ select n.ID,n.MEMBER_TYPE, n.PAID_THRU, n.Full_Name, n2.FULL_NAME as JNTS_NAME,n.COMPANY,na.Address_1,na.Address_2, na.Address_3,na.City, na.State_Province, n.Country, na.ZIP, n.Last_First, n.Join_Date, s.Bill_Thru, s.Date_Added, s2.PRODUCT_CODE as MAILMETHOD from Name n Join Name_Address na ON n.MAIL_ADDRESS_NUM = na.ADDRESS_NUM Join Subscriptions s ON n.ID=s.BT_ID and PRODUCT_CODE='iMIS_DUES' Left Outer Join Name n2 ON n.ID = n2.CO_ID and n2.MEMBER_TYPE = 'JNTS' Left Outer Join Subscriptions s2 ON n.ID = s2.ID and s2.PRODUCT_CODE in ('AIRMAIL','FIRSTCLASS') where n.Member_record = 1 and n.Member_type <> 'JNTS' and n.Status = 'A' and N.PAID_THRU >= GetDate() and na.Status = '' and s.Date_Added not between @BeginDate and @EndDate and s.PAYMENT_DATE between @BeginDate and @EndDate Use this stored proc as the datasource for your Crystal Report

Program notes: Accessibility, Bottlenecks, and Control

Last night, Dr. Clay Spinuzzi, Director of UT's Computer Writing and Research Lab, entertained STC Austin with tales of the journey by which they brought CWRL's website out of the 20th century. The site, a knowledge repository holding decades worth of white papers and instructional content, was bottlenecked, unmaintainable, and inaccessible. What to do?

e-book trend: New "Short Cut" series from O'Reilly

O'Reilly has a new book series, "Short Cuts", that is ONLY being sold in electronic form: "Whether it's a first look at a brand new technology, a quick reference, or a thorough explanation of a narrow but crucial subject, Short Cuts bring you focused information in an easy-to-use, portable package." Interestingly, this is the same strategy we applied to handling publications on the iMIS Helpsite ( the User Guides are available as bound publications as before, but the narrow, topic-specific References are posted for download only, for online use, portability, and personal printing. Where we differ is that ours are free distributions, and we post in an editable format, to support site-specific modification.

"Head First": Revolution in instructional authoring

By revisiting the work of Kathy Sierra, of Creating Passionate Users fame, I followed the breadcrumb trail to the new O'Reilly book series she helped to shape: Head First. The Head First Labs blog reveals some of the research and approach employed in these "brain-friendly guides"; I'll try to summarize their strategy as it's presented in the book I purchased, Head First HTML with CSS & XHTML.

Web 2.0 in Plain English: great quick training

These wonderful, fun explanations of Web 2.0 Tools are also great models of efficient training:

RSS in Plain English:
Wikis in Plain English:

Nov. 6: Social Media workshop at Dell

Early registration ends today for "Starting the Conversation with Customers", a day-long workshop at Dell, Nov. 6, 2007.

Even if you can't go, has some great slideshows giving overviews of social media issues and implications.

"Come join our Austin Workshop Team, Dell's Digital Strategy Team, and other social media champions to learn everything you need to know about how to Start Conversations with Customers. In this day-long workshop, you will learn how social media can propel your business to the next level and build stronger relationships with the markets you serve. Whatever your industry, if you are striving to launch a social media program and have real conversations with your customers, this workshop will prepare you for the journey ahead. If you have already embarked on the journey but need to get to the heart of what matters, this workshop will illuminate your path."