When editing a dashboard, for changes to save correctly the WebUI site must have a config WorkingMode value set to "Production" (rather than "AppDevelopment").
Otherwise after saving a dashboard the page refreshes to its previous state and any edits are lost.
To change the setting, open the config file: [INSTANCE_DIRECTORY]\Inetpub\WebUI\Web.config and change
<add key="WorkingMode" value="AppDevelopment" />
to
<add key="WorkingMode" value="Production" />.
Friday, 16 March 2012
Thursday, 8 March 2012
Current Instance URL
To return the URL of the currently running instance, from a code page use:
Me.ConfigMgr.GetApplicationURLBase()
Returning, for example: http://server01/instance01/webui
Me.ConfigMgr.GetApplicationURLBase()
Returning, for example: http://server01/instance01/webui
Tuesday, 7 February 2012
Project Rename Produces Duplicate
In the IDE, right clicking on the Project node in the Project pane gives an option to "Rename Project ID".
On the face of it, renaming the Project seems to work as expected. However, if the IDE is refreshed (or closed and reopened), both a Project with the old name and a Project with the new name now exist. This can be seen by pressing the Open... button at the top of the Project pane.
To workaround this, best practice when renaming Projects would be to:
![]() |
| Renaming a Project in the 3e IDE |
To workaround this, best practice when renaming Projects would be to:
- Rename the Project.
- Save the Project.
- Refresh the IDE (Refresh button next to Logout).
- Open the Project with the old name.
- Delete the Project with the old name.
- Open the Project with the new name.
This avoids a build up of unnecessary, renamed Projects.
Friday, 3 February 2012
Exception Raising
The standard method of raising exceptions in 3e is to display them in the top Exception panel - the panel shared with other item lists such as the Worklist.
To raise an exception in this way, the Exception property of the Process's underlying Object must be set to an instance of the NxApplicationException class. For example, from within the Object:
Me.Exception = New NxApplicationException(New Guid("430e4f35-2834-46ea-b031-b718054c7f62"))
Or from a Process:
Me.ProfMaster.ProformaCollection(0).Exception = New NxApplicationException(New Guid("430e4f35-2834-46ea-b031-b718054c7f62"))
The GUID value is set to the Id of a Message that describes the error.
To remove the Exception, set the Exception property to null:
Me.Exception = Nothing
![]() |
| Exception raised in Proforma Generation Process |
Me.Exception = New NxApplicationException(New Guid("430e4f35-2834-46ea-b031-b718054c7f62"))
Or from a Process:
Me.ProfMaster.ProformaCollection(0).Exception = New NxApplicationException(New Guid("430e4f35-2834-46ea-b031-b718054c7f62"))
The GUID value is set to the Id of a Message that describes the error.
To remove the Exception, set the Exception property to null:
Me.Exception = Nothing
Thursday, 5 January 2012
BillSum Table Rebuild
The BillSum table is a snapshot of all billing information per Timekeeper and Matter. It is effectively a non-live amalgamation of the Timecard, Costcard and Chargecard tables. It is updated periodically but can become out of date and inaccurate due to various errors in the system.
To rebuild the BillSum table take the following steps, courtesy of Weronika Kozlowska, Application Support Consultant at Elite Thomson Reuters UK:
1. Go to Notification task Manager > select the BillsumMsgQueue task > tick the 'Disable' option and release
2. Go to the Build Billsum Tables process > tick all 4 month / period options > Background > Release
3. After a while, go to Notification Task and Log viewer and click the 'View Background Tasks' button you will see your process initally with a 'Running' status > periodically check whether the status changes to 'Complete' (It might take a few hours)
4. Once the task is complete, go back to Notification task Manager > select the BillsumMsgQueue task un-tick the 'Disable' option and release.
If you have a period of the day/week when no billing information (time, costs, charges) is ever captured, late at night or early morning for example, the Build Billsum Tables can be scheduled to run automatically via the Notification Task Manager process. The BillsumMsgQueue task need not be disabled first if you are confident no billing information will be captured during the run time. Note that the Build Billsum Tables task can take several hours to run.
Labels:
Annoyances,
Data Structure,
Database,
Front End
Thursday, 8 December 2011
Right-Click Cancel on Processes
![]() |
| Cancel a Process from the Action List |
For a right-click cancel to work, the Process must contain a path that leads to an end point without intervening steps.
![]() |
| Right-click cancel possible - A Process with a route to an end point with no steps (the bottom "Cancel" route) |
![]() |
| Right-click cancel not possible - A process without a "no-step" route to a end point |
When a Process does not contain a route without intermediate steps, an error is show when attempting to cancel from the Action List.
![]() |
| Error message from a failed right-click Process cancel |
![]() |
| The Else rule (selected in blue) before the end step |
This way, clean-up functionality can still run when the user cancels from the Action List.
Labels:
Code,
Dashboards,
Front End,
IDE,
Processes
Tuesday, 6 December 2011
Process Else Rules - Accessing the DataObject in Code
Within the Code tab of a Process, the Base Object can be accessed as a property. For example, the evaluation of CUSTOM rules can sometimes require a decision to be made based on a value contained within the Base Object.
However, this Base Object property is not accessible in Else rules. To access it, cast Me.Process to its type and then access individual objects though the object collection.
Public Overrides Sub OnRule()
For Each profMasterItem As ProfMaster In _
CType(Me.Process, NextGen.Application.Process.ProfProcess). _
ProfMasterCollection
NextMessage = profMasterItem.Description
Next
End Sub
![]() |
| Access to the ProfMaster Base Object from a custom rule in Process code |
Function Evaluate As System.Boolean
Return Me.IM_AutoBillEdit.IsOutsideProcess.Value(False)
End Function
However, this Base Object property is not accessible in Else rules. To access it, cast Me.Process to its type and then access individual objects though the object collection.
![]() |
| Access to the ProfMaster Base Object from an ELSE rule in Process code |
For Each profMasterItem As ProfMaster In _
CType(Me.Process, NextGen.Application.Process.ProfProcess). _
ProfMasterCollection
NextMessage = profMasterItem.Description
Next
End Sub
Wednesday, 9 November 2011
Transaction Service - GetArchetypeData
In a previous post, the GetData method of the Transaction Service was explained. An altogether more useful method is the GetArchetypeData method, taking any well-formed XOQL query and returning a dataset.
The input parameter must be encapsulated in a QUERY node (note the caps) in the namespace "http://elite.com/schemas/query".
Example:
<QUERY xmlns="http://elite.com/schemas/query">
[XOQL statement]
</QUERY>
An XOQL statement can be obtained from Utility3e's OQL Analyser by creating the query in OQL first, executing it and then copying the contents contained in the XOQL tab.
Friday, 4 November 2011
Time Out During Upgrade - Toggle READ_COMMITTED_SNAPSHOT Failed
Utilities 3e can sometimes fail when running the Upgrade process and throws a time out error. The Upgrade process then hangs and doesn't respond to the stop command/button. The only way out is to close the whole Utilities app.
The error message has a comment of "Toggle READ_COMMITTED_SNAPSHOT Failed" with extra info along the lines of "Error executing System.Data.SqlClient.SqlException: Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding."
The database can become inaccessible in Sql Query Analyser / SSMS, preventing queries being ran against it. Taking the database offline then bringing it back online solves this problem.
The error message has a comment of "Toggle READ_COMMITTED_SNAPSHOT Failed" with extra info along the lines of "Error executing System.Data.SqlClient.SqlException: Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding."
The reason for this is the database has its READ_COMMITTED_SNAPSHOT setting turned OFF before upgrading and does not turn it back ON before failing. Utilities 3e fails to function correctly, as does the IDE and the front end!
The database can become inaccessible in Sql Query Analyser / SSMS, preventing queries being ran against it. Taking the database offline then bringing it back online solves this problem.
What's required is to turn READ_COMMIT_SNAPSHOT back on. This is typically done by running this on the DB in question:
ALTER DATABASE <DATABASE_NAME> SET READ_COMMITTED_SNAPSHOT ON
However, this statement can fail to run correctly and endlessly run in Query Analyser, never completing. A better option (for Sql Server 2005 - i.e. 3e 2.5 and below) is:
IF(CHARINDEX('Microsoft SQL Server 2005',@@VERSION) > 0)
BEGIN
DECLARE @sql VARCHAR(8000)
SELECT @sql = '
ALTER DATABASE ' + DB_NAME() + ' SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
ALTER DATABASE ' + DB_NAME() + ' SET READ_COMMITTED_SNAPSHOT ON;
ALTER DATABASE ' + DB_NAME() + ' SET MULTI_USER;'
EXEC(@sql)
END
An IIS Reset may be needed after this, but after that all 3e systems should be running as before. The Update from within Utilities3e always seems to work the second time around.
Labels:
Annoyances,
Database,
Errors,
Utilities3E
Wednesday, 26 October 2011
Adding New Bank Accounts
If a new Bank Account is needed, other dependencies may need to be created first. The order in which to add these dependencies is as follows:
- Bank Group
- Unit (if a new unit is requried)
- GL Unit (if a new unit is requried)
- GL Natural
- GL Account
- Bank Account (Either Bank Account Client Account or Bank Account AP (Office))
Wednesday, 5 October 2011
Spell Check
Spell check can be called natively on a Narrative type Attribute. In the Object, call Me.<AttributeName>.SpellCheck(), a pop-up window appears if any spelling mistakes are found.
Spell check can also be called on a Card Object by casting to an ICard type and calling RunSpellCheck().
Spell check can also be called on a Card Object by casting to an ICard type and calling RunSpellCheck().
Monday, 19 September 2011
Launching Dashboards or Report Layouts with Parameters
Method: Pass the parameters in the URL.
Step 1: Parameter Object
The parameter object attached to the Dashboard or Report Layout must be able to interpret the URL. This can be done in the AfterAdd handler method.
Example:
Protected Overrides Sub AfterAdd()
Dim strMatterIndex As System.String
' call stock object after add code
MyBase.AfterAdd()
' get matter number from url
strMatterIndex = System.Web.HttpContext.Current.Request.Item("MatterIndex")
' if there is a matter index
If Not String.IsNullOrEmpty(strMatterIndex)
' set matter index parameter
Me.Matter.Value = CInt(strMatterIndex)
' auto submit parameters
CType(Me, IParamObject).IsAutoSubmitParamObject = True
Else
' don't auto submit parameters
CType(Me, IParamObject).IsAutoSubmitParamObject = False
End If
End Sub
Step 2: Launching Object
Create a URL Action on the launching Object and implement the Execute function.
Return the URL for the Dashboard or Report Layout with the required parameters appended.
Example:
Protected Overrides Function Execute() As System.String
If Me.Owner.Matter.IsNull Then
Return Nothing
Else
Return String.Format("{0}&SID={1}&MatterIndex={2}", _
Me.UrlMgr.GetDashboardUrl("IM_ENQUIRY_MATTER"), _
Me.UserMgr.SessionID, Me.Owner.Matter.Value)
End If
End Function
Step 3: Action
Add the URL Action to a UI element.
Step 1: Parameter Object
The parameter object attached to the Dashboard or Report Layout must be able to interpret the URL. This can be done in the AfterAdd handler method.
Example:
Protected Overrides Sub AfterAdd()
Dim strMatterIndex As System.String
' call stock object after add code
MyBase.AfterAdd()
' get matter number from url
strMatterIndex = System.Web.HttpContext.Current.Request.Item("MatterIndex")
' if there is a matter index
If Not String.IsNullOrEmpty(strMatterIndex)
' set matter index parameter
Me.Matter.Value = CInt(strMatterIndex)
' auto submit parameters
CType(Me, IParamObject).IsAutoSubmitParamObject = True
Else
' don't auto submit parameters
CType(Me, IParamObject).IsAutoSubmitParamObject = False
End If
End Sub
Step 2: Launching Object
Create a URL Action on the launching Object and implement the Execute function.
Return the URL for the Dashboard or Report Layout with the required parameters appended.
Example:
Protected Overrides Function Execute() As System.String
If Me.Owner.Matter.IsNull Then
Return Nothing
Else
Return String.Format("{0}&SID={1}&MatterIndex={2}", _
Me.UrlMgr.GetDashboardUrl("IM_ENQUIRY_MATTER"), _
Me.UserMgr.SessionID, Me.Owner.Matter.Value)
End If
End Function
Step 3: Action
Add the URL Action to a UI element.
Friday, 16 September 2011
Circular Dependency
Circular dependency in objects is not checked for on the save or build of individual files.
However, errors can arise when trying to:
If both of these processes fail, chances are that a circular dependency exists in at least one of the project's objects.
To find the culprit, build each object individually with a Build Type of 'All AppObjects that use <Obj_Name> (Runtime Only)'. A circular dependency exception will show in the build output of the problem object.
However, errors can arise when trying to:
- Using 'Build Project' from the context menu of a project in IDE.
- Using 'Update 3E - Extract' in the Upgrades section of Utilities 3E.
If both of these processes fail, chances are that a circular dependency exists in at least one of the project's objects.
To find the culprit, build each object individually with a Build Type of 'All AppObjects that use <Obj_Name> (Runtime Only)'. A circular dependency exception will show in the build output of the problem object.
Wednesday, 14 September 2011
UK/EMEA User Group 2011
UK/EMEA User Group 2011
Holborn Bars
138-142 Holborn
London
EC1N 2NQ
15 September 2011 09:30 – 22:00
Holborn Bars
138-142 Holborn
London
EC1N 2NQ
15 September 2011 09:30 – 22:00
Friday, 2 September 2011
DataObject Construction
To instantiate a new DataObject use the following:
Dim newTestObject As New TestObject(Me.ProcessAppMgr, CType(NextGen.Framework.Managers.AssemblyMgr.NxAssemblyMgr.GetObjectSchema("TestObject"), Schema.ISchema))
This is the way to create new data objects on the fly without having to load them from archetypes.
Dim newTestObject As New TestObject(Me.ProcessAppMgr, CType(NextGen.Framework.Managers.AssemblyMgr.NxAssemblyMgr.GetObjectSchema("TestObject"), Schema.ISchema))
This is the way to create new data objects on the fly without having to load them from archetypes.
Tuesday, 28 June 2011
Disabled (Greyed-Out) Fields on Forms
A field on a form can sometimes look disabled in the web browser without any apparent reason. The Access property is not set to ReadOnly and is not changed anywhere in the code.
This can occur when a change is made to an object and it becomes custom, i.e. it overrides the stock object for the first time.
A Rebuild with Dependencies on the Form will fix the problem. The field should then be enabled in the front end.
This can occur when a change is made to an object and it becomes custom, i.e. it overrides the stock object for the first time.
A Rebuild with Dependencies on the Form will fix the problem. The field should then be enabled in the front end.
Friday, 20 May 2011
Refresh Form Attributes
Quick Tip: To refresh a Form's available attributes - the drag and drop fields/controls, simply save the form. This is useful when the underlying Object's attributes have been changed and is quicker than a close, refresh, re-open of the Form.
Thursday, 19 May 2011
No Intellisense in IDE
No Intellisense showing in the IDE code page? CTRL + SPACE not showing the helpful drop down?
Sometimes this just happens, especially when the code contains errors. Usually, a CodeDOM rebuild (CTRL + SHIFT + B), then a code parse (CTRL + R) will solve the issue.
However, this doesn't always work - even though you are well within your rights to be shown some Intellisense. In that case, try closing and reopening the object. If that gives on joy, try restarting the IDE.
After that, you're on your own.
Sometimes this just happens, especially when the code contains errors. Usually, a CodeDOM rebuild (CTRL + SHIFT + B), then a code parse (CTRL + R) will solve the issue.
However, this doesn't always work - even though you are well within your rights to be shown some Intellisense. In that case, try closing and reopening the object. If that gives on joy, try restarting the IDE.
After that, you're on your own.
Tuesday, 3 May 2011
Elite User Conference 2011
Elite User Conference 2011
Gaylord National
201 Waterfront Street
National Harbor, MD 20745
June 12-16, 2011
Conference Schedule
Gaylord National
201 Waterfront Street
National Harbor, MD 20745
June 12-16, 2011
Conference Schedule
Form Labels Not Displayed/Updating
Sometimes, the text of a label on a Form is not displayed in the browser after making a change in the IDE. To force the label to update:
- In the IDE, load the project that contains the problem form.
- Right click the top most project node and select Build Project.
- For Build Type, select "All AppObjects that use any AppObject in <Project Name> (Runtime Only)" and click Start Build.
- After building, close all instances of browsers hosing 3e and open a new instance. The labels should now display correctly.
Subscribe to:
Posts (Atom)








