Import Processor Error Handling

AJAX(112) App Studio(5) Apple(1) Application Builder(245) Application Factory(207) ASP.NET(95) ASP.NET 3.5(45) ASP.NET Code Generator(72) ASP.NET Membership(28) Azure(18) Barcode(2) Barcodes(3) BLOB(18) Business Rules(1) Business Rules/Logic(140) BYOD(13) Caching(2) Calendar(5) Charts(29) Cloud(14) Cloud On Time(2) Cloud On Time for Windows 7(2) Code Generator(54) Collaboration(11) command line(1) Conflict Detection(1) Content Management System(12) COT Tools for Excel(26) CRUD(1) Custom Actions(1) Data Aquarium Framework(122) Data Sheet(9) Data Sources(22) Database Lookups(50) Deployment(22) Designer(177) Device(1) DotNetNuke(12) EASE(20) Email(6) Features(101) Firebird(1) Form Builder(14) Globalization and Localization(6) How To(1) Hypermedia(2) Inline Editing(1) Installation(4) JavaScript(20) Kiosk(1) Low Code(3) Mac(1) Many-To-Many(4) Maps(6) Master/Detail(36) Microservices(4) Mobile(63) Mode Builder(3) Model Builder(3) MySQL(10) Native Apps(5) News(17) OAuth(8) OAuth Scopes(1) OAuth2(10) Offline(19) Offline Apps(4) Offline Sync(5) Oracle(10) PKCE(2) PostgreSQL(2) PWA(2) QR codes(2) Rapid Application Development(5) Reading Pane(2) Release Notes(174) Reports(48) REST(29) RESTful(29) RESTful Workshop(15) RFID tags(1) SaaS(7) Security(80) SharePoint(12) SPA(6) SQL Anywhere(3) SQL Server(26) Stored Procedure(4) Teamwork(15) Tips and Tricks(85) Tools for Excel(2) Touch UI(93) Transactions(5) Tutorials(183) Universal Windows Platform(3) User Interface(335) Video Tutorial(37) Web 2.0(100) Web App Generator(101) Web Application Generator(607) Web Form Builder(40) Web.Config(9) Workflow(28)
Thursday, June 27, 2013PrintSubscribe
Import Processor Error Handling

Code On Time web apps come with a native CSV Import processor that will parse comma separated files and create new records. However, this native processor does not display any errors that may have occurred due to malformed CSV. Let’s override methods in the processor in order to handle and report these errors.

Start the app generator. Click on the project name, and press Develop to open the project in Visual Studio. In the Solution Explorer, right-click on ~/App_Code folder and press Add | Class.

Adding a class to App_Code folder.

Assign a name to the item and press OK to save. Replace the code base with the following:


using System;
using System.Collections.Generic;
using System.IO;
using MyCompany.Data;
using System.Net.Mail;

namespace MyCompany.Data
    public partial class CsvImportProcessor
        protected override bool HandleError(ActionResult r, ActionArgs args)

            string dir = AppDomain.CurrentDomain.BaseDirectory;
            using (StreamWriter file = new StreamWriter(dir + "\\ImportErrorLog.txt", true))
                foreach (string s in r.Errors)
                    file.WriteLine(String.Format("{0:s}: {1}",DateTime.Now, s));
            return true;

        protected override void ReportErrors(string controller, string recipients, string logFileName)
            string[] recipientsList = recipients.Split(',');
            SmtpClient client = new SmtpClient();
            foreach (string s in recipientsList)
                string address = s.Trim();
                if (!(String.IsNullOrEmpty(address)))
                    MailMessage message = new MailMessage();
                        message.To.Add(new MailAddress(address));
                        message.Subject = String.Format("Import of {0} has been completed", controller);
                        message.Body = File.ReadAllText(logFileName);
                    catch (Exception)

Visual Basic:

Imports Microsoft.VisualBasic
Imports System.IO
Imports MyCompany.Data
Imports System.Net.Mail

Namespace MyCompany.Data
    Partial Public Class CsvImportProcessor
        Protected Overrides Function HandleError(r As ActionResult, args As ActionArgs) As Boolean
            Dim dir As String = AppDomain.CurrentDomain.BaseDirectory
            Using file As StreamWriter = New StreamWriter(dir + "\\ImportErrorLog.txt", True)
                For Each s As String In r.Errors
                    file.WriteLine(String.Format("{0:s}: {1}", DateTime.Now, s))
                Return True
            End Using
        End Function

        Protected Overrides Sub ReportErrors(controller As String, recipients As String, logFileName As String)
            Dim recipientsList() As String = recipients.Split(Global.Microsoft.VisualBasic.ChrW(44))
            Dim client As SmtpClient = New SmtpClient()
            For Each s As String In recipientsList
                Dim address As String = s.Trim()
                If Not (String.IsNullOrEmpty(address)) Then
                    Dim message As MailMessage = New MailMessage()
                        message.To.Add(New MailAddress(address))
                        message.Subject = String.Format("Import of {0} has been completed", controller)
                        message.Body = File.ReadAllText(logFileName)
                    Catch __exception As Exception
                    End Try
                End If
        End Sub
    End Class
End Namespace

The first method above will create a file “ImportErrorLog.txt” in the application folder and write every error that occurred. It returns true in order to cancel the default handling. The second method overrides the default error reporting and sends an email to the specified recipient. This requires web app SMTP configuration. If a malformed CSV file was imported, the ImportErrorLog.txt file will look like the picture below.

Log text file logging all errors when importing.