REQUEST A DEMO

Tag: customization

Using the Tab control in Dovetail web applications (such as fcClient and fcAdmin)

June 12, 2007 We use a client-side JavaScript object for creating tabs in our web applications. Unlike in the Clarify Classic Client, tabs in our web apps are the same page as the parent. When you click on a tab, you are actually displaying the HTML elements on that tab, and hiding the HTML elements on the other unselected tabs. It's all a bunch of Dynamic HTML (DHTML) goodness.  It's trivial to make tabs visible/invisible, reorder tabs, resize, etc.   The case page in fcClient is a good example of the use of tabs:       Here we will walk through the steps needed for creating and using tabs within a page. In your ASP page, Include the javascript code for building a tab <script language="javascript" src="../code/tab_builder.js"></script>   In your ASP page, Include the stylesheet <link rel="stylesheet" href="../stylesheets/webagent.css" type="text/css">   Create an array of tabs…

A free wiki has become another tool in my consulting toolbox

May 24, 2007 I've been working on a web services project for a customer over the last few months. I'm in Austin, the customer is in Atlanta, and the developer on the project is also in Austin (but not in the same physical office as myself). I needed a way to work with the developer and the customer on defining the web services, the interfaces, and the logic within. As I mentioned in an earlier post, I was drowning in the customer's waterfall documentation. I needed a better communication vehicle than emailing Word documents back and forth. I created a free wiki at pbwiki, which was super easy to do. Then, I started writing. From the office. From home. It was great. I created just a couple of pages at first. Defined the work to do for the first iteration. Marked it as…

Elevating consulting-ware

May 23, 2007 Back when I was working at Clarify, a good chunk of my time was spent doing custom development work, i.e. consulting-ware. We developed the code, and handed it off to the customer. We (the consultants) did some testing, but the customer was responsible for the bulk of the testing. There seems to be some sort of difference in mindset when developing a product versus developing consulting-ware. I'm not sure why. I've been working with one of our developers on a customer engagement for the last few months, working on some custom web services, amongst other things. For this project, we've incorporated some of our standard development practices into the consulting project. Unit Tests and Integration Tests The biggest practice we've pushed into custom development work is tests. We're delivering to the customer a set of Unit Tests, and a set of Integration…

Expanding your varchar columns beyond 255 in Clarify is easy with the right tools

May 16, 2007 We had a support case that came in this week asking if there were issues with expanding a varchar(255) field to a larger value, such as varchar(500). Specifically, this customer was asking about expanding the internal notes field on the notes_log table (table_notes_log.internal). This customer is on an older version of Clarify (version 8 or version 9, IIRC), but they're using a more current version of Microsoft SQL Server (either 2000 or 2005, I forget exactly which one). These versions of MSSQL can handle much larger varchar lengths. I believe MSSQL 2000 can handle up to varchar(8000). I think the 255 limit is left over from the Sybase and Microsoft SQL Server 6.5 days. It should work, I thought. One way to find out: let's try it. My environment for this test is Clarify 9 with MSSQL 2000. Clarify Data…

Configuring logging in the fcSDK without a config file

May 14, 2007 I banged my head against this for a while today, so I figured a post was in order. I was writing a PowerShell script to re-create a customer scenario today, and I needed to enable debug level logging. I was building the config on the fly, such as this: $config = new-object -typename System.Collections.Specialized.NameValueCollection $config.Add("fchoice.connectionstring",$connectionString); $config.Add("fchoice.dbtype",$databaseType); $config.Add("fchoice.disableloginfromfcapp", "false"); $ClarifyApplication = [Fchoice.Foundation.Clarify.ClarifyApplication] if ($ClarifyApplication::IsInitialized -eq $false ){ $ClarifyApplication::initialize($config) > $null; } I created a logging.config file that looks like: Then added to my config: $config.Add("fchoice.logconfigfile", "C:\customers\test\logging.config"); I ran my script, but I didn't get a log file. I went back to the fcSDK docs on logging configuration, and realized what was happening. The LogManager is a singleton, and only gets its LogConfigFilePath set upon initialization. So, it has to be set before its initialized. However, the fcSDK does logging when parsing…

Making the app work the way the user expects it to work

May 9, 2007 Every morning I get an email report containing all of the Full Text Searches that our customers performed within our SelfService application, along with how many results each search resulted in, and if there were any errors. Our volume is low, so it's not too much information for me to process on a daily basis. This report allows me to gain some knowledge of who's using the app, what types of things they're searching for, and if they are finding answers to their inquiries. This morning's report showed that a customer searched for just an integer (for our example, we'll say they searched for 12345), and came up with no matches. Knowing the  customer, I knew they were searching for a case number. However, our search is currently setup to perform full text searches on the textual information with a…

My t_head t_hurts from t_looking at t_this t_code

May 8, 2007 While working on one of our legacy products today, I ran head first into this code: Set cl_list = Cobj_LOR_CLAUSE.Contents For t_int = cl_list.Count - 1 To 0 Step -1 Set cl_rec = cl_list.ItemByIndex(t_int) If cl_rec.GetField("parameterized") = 1 Then t_str = "XYZZYParamXYZZY#" & Trim$(Str$(t_int)) t_pos = 1 While t_pos > 0 t_pos = Instr(sql_stmt, t_str) If t_pos > 0 Then If Left$(cl_rec.GetField("operation"), 3) = "is " And _ Instr(cl_rec.GetField("operation"), "equal")

Using the fcSDK in PowerShell

April 25, 2007 Years ago, if I wanted to "script" Clarify [formerly linked to www.myclarify.com which no longer exists], I would use UNIX shell scripts, including UNIX mini languages such as sed and awk, that would create dat files that could be imported with dataex. When ClearBasic was introduced, we also got cbbatch, which was a command line interpreter for ClearBasic, so we could script Clarify using CB. When we (First Choice Software) introduced FCFL (First Choice Foundation Library), which was a set of COM objects, we could script using VBScript or JavaScript making COM calls. Same story for the fcSDK. Although the fcSDK is all native .NET, it also exposed a COM interface, so we could still do scripting as we did with FCFL, but we didn't have all of the .NET capabilities of fcSDK. But now, with the availability of PowerShell, we…

Drowning in waterfall documentation

April 23, 2007 I'm currently working on a customer project. They started off by sending me a Functional Requirements Specification document, then a Technical Design Specification document (and multiple revs of said doc), and before I've even had a chance to digest those docs, there's now a Change Document. The Change Document is the same size as the Technical Specifications document. Ugh. We haven't even written one line of code yet!  It really makes me appreciate my internal projects, where everyone is co-located in the same room, story cards (which are NOT specifications - they are simply placeholders for conversations), and our focus is on working software. Update 4/27/07:Today I received an updated version of the Technical Specifications document. Only this time it was in PDF format, which meant there was no way I could compare it to the previous MS Word version, so…

Extending SuperEmailClerk.NET to call your own APIs

March 20, 2007  SuperEmailClerk.NET (SEC.NET), when running in API Invoke mode, will invoke requested APIs and return the results in a reply email. SEC.NET can be configured to execute API toolkits purchased from Dovetail Software, such as the ClearSupport toolkit, or custom-built APIs. This post will walk through creating a custom API in .NET that can be invoked by SEC.NET. The example will be a CreateAddress method. Even though there is an existing CreateAddress method in our Interfaces toolkit, we chose this as an example because it illustrates how to use the AdditionalFields property of the Toolkit Setup objects, which allows you to re-use our toolkits, but with an unlimited number of additional fields being set. Overview of the steps involved: Create a SecApiInvokeExample class with a CreateAddress method Create a SecApiInvokeExampleTests class for our tests Create the tags and subtags and add these to the…