Cubic Compass Software
The following announcement just went out to Dialogue Developers today. Dialogue Script is a Domain Specific Language (DSL) that runs on the IronPython Dynamic Language Runtime (DLR).

As an i-Dialogue Developer working with Dialogue Script, I wanted to share a couple changes in the next release:
  • Dialogue Script will be upgraded to run on the newer IronPython v2.6 engine
  • JScript will no longer be supported
The upgrade from IronPython from v2.0 to v2.6 will result in a tremendous performance improvement and provide access to a broader set of features and 3rd party libraries.

JScript will no longer be supported in the next release. The Scripting language option (see attached screenshot) will be removed from Advanced settings. All editors will default to using the IronPython engine.

Q: How does this change impact me?
A: If you're not using JScript, then this update should have no impact. You still may want to test any Dialogue Script after the update to ensure there are no adverse effects.

Q: How can I determine if JScript is being used on my site/portal?
A: The attached Dialogue Script will be added to your portal and run prior to the next update. If JScript is found, the portal will not be updated and you'll be notified with recommendations on how to migrate the JScript to Python. If a Cubic Compass Professional Services Developer originally developed the JScript for you, then the migration will happen automatically under your existing support agreement.

Q: What can I expect during the upgrade?
A: The upgrade will only take 5 minutes. Customers with a sandbox portal will have their sandbox updated first for staged deployment and testing. All other portals will have their live production site updated. If test accounts are available, we will login to the portal after the upgrade and conduct high-level testing on dynamic pages.

Q: Will this update impact Salesforce integration?
A: No. Dialogue Script (IronPython) is not used in the core Salesforce integration module.

Q: When will this update happen?
A: We will internally beta test this new IronPython engine for 30 days before making this change publicly available in early December 2009. Sandbox portals will be updated as soon as possible.


Thanks, and happy DScript coding!

Posted: Friday, October 23, 2009 8:14:27 PM (GMT Standard Time, UTC+00:00)  #   
Comments [0]  | 
Job Title: .NET Web Developer (C#/JQuery)
Job Submitted By: Cubic Compass
Job Description: Cubic Compass has a need for a web developer with an emphasis on the following technologies: 
* C# 
* JQuery 
* JQuery UI (themes, widgets) 
* AJAX driven, single-page web applications 

Experience with any dynamically typed scripting language, such as Python or Ruby, is also preferred for doing server-side AJAX handlers. 

You'll be developing a Facebook-like interface for business customer service and support sites. 

Some application modules you'll be working on: 
* Communities 
* Collaborative case management 
* Knowledge base search 
* Idea management 
* Document management 
* Account management
* Event management

The development team is distributed. We meet at Nedspace in Portland Oldtown about once per week, then work from home (or Starbucks, or wherever). 

We're open to various working relationships depending on experience and location (contract, part-time, full-time). 

Please contact jobs@cubiccompass.com for more information. 

Please pass this job posting along to others who may be interested or qualified.

Posted: Wednesday, October 21, 2009 5:47:32 PM (GMT Standard Time, UTC+00:00)  #   
Comments [0]  | 

The new "Cycle" framework for i-Dialogue is quite addictive. Being 100% AJAX-based, all aspects of Cycle applications are extremely responsive and only update the portions of the screen being updated (as opposed to traditional multi-page websites. That seems so 1999 now ;-) )

Also new to Cycle is inline configuration management. It's no longer required to go to separate setting pages to configure an application. Users with administrative permissions will see various links "inline" with application they are using.

Cycle applications have the following administrative and configuration options: Statistics, Permissions, Configuration, Run Tests. Run Tests is currently only available to Admins while in beta, but may remain visible in the future.

  • Statistics provides an integrated reporting dashboard into each application. I'm really excited about this feature since it leverages a data warehouse I developed years ago, which has largely gone unused in our Salesforce integrated portals. The data warehouse captures nightly measures for time-series analysis of common Service and Support metrics using the Google charts API.
  • Permissions is a simple role-based permissions matrix that requires no coding to grant/deny access to various features based on role.
  • Configuration provides global settings applicable to all users, such as fields to display.
  • Run Tests just provides simple red/green lights on the health of the application. This is particularly useful during installation since the tests will primarily validate that all dependencies exist, such as AppExchange packages or custom field configurations.

The video below is an inside peak at the event management module.

Posted: Tuesday, October 20, 2009 10:44:53 PM (GMT Standard Time, UTC+00:00)  #   
Comments [0]  | 
The following Dialogue Script is handy for taking a snapshot of any Salesforce record and generating a restore script.

An example use case might be testing a portal application experience for a first time Contact visitor. Upon logging in several Contact fields may get updated, requiring a manual restore of certain fields to re-test.

The codegen script below allows for one-click restore of the test Contact record to quickly resume testing.

<h1>Generate Salesforce Record Baseline Script</h1>
Object Type: <dlog:TextBox id="ObjectType" />
RecordId: <dlog:TextBox id="RecordID" />
<dlog:Button id="SubmitButton" Text="Generate Baseline Script" /><br/>
<dlog:Label id="Output" />
<%
from CubicCompass.Portal.Webparts.Salesforce.sForce import *

def CodeGen():
objectDescription = SalesforceSettings.Instance.SForceService.describeSObject(ObjectType.Text)
query = "select "
for field in objectDescription.fields:
query += field.name + ", "

query = query.TrimEnd(", ".ToCharArray())
query += " from " + ObjectType.Text

if RecordID.Text.Length > 0:
query += " where Id='" + RecordID.Text + "'"

result = SalesforceSettings.Instance.SForceService.query(query)
if result.size == 0:
Output.Text = "record not found"
return

sObject = SalesforceObject(result.records[0])

indent = "    "
code = "def Reset" + ObjectType.Text + "Defaults():<br/>"
code += indent + "sforce = SalesforceWebService()<br/>"
code += indent + "sforce.SalesforceRecordID = \"" + RecordID.Text + "\"<br/>"
for field in objectDescription.fields:
if field.updateable == False:
continue
code += indent + "sforce.AddField(\"" + field.name + "\", \"" + sObject.GetProperty(field.name) + "\")<br/>"

code += indent + "sforce.UpdateObject(\"" + ObjectType.Text + "\")<br/>"
Output.Text = code

if Page.IsPostBack:
if ObjectType.Text.Length == 0 or RecordID.Text.Length == 0:
Output.Text = "missing values"
else:
CodeGen()

else:
ObjectType.Text = "Account"
RecordID.Text = "testRecordId"
%>
Posted: Monday, October 19, 2009 4:57:39 PM (GMT Standard Time, UTC+00:00)  #   
Comments [0]  |