JSINFO.bootstrap3.toc = [{"link":"#status-bar","title":"Status bar","level":1},{"link":"#example","title":"Example","level":2},{"link":"#work-dialog","title":"Work dialog","level":1},{"link":"#what-is-a-work-dialog","title":"What is a work dialog","level":2},{"link":"#properties","title":"Properties","level":2},{"link":"#steps","title":"Steps","level":2},{"link":"#example1","title":"Example","level":2}];
Table of Contents¶
Indicating progress¶
When doing a heavy job with VBA in Lime CRM, for example creating/updating many records at the same time, it could be a good idea to show the progress to the user. In the examples we create 1000 companies in smaller batches and shows the progress. Here's a few examples of how:
- Using the status bar in Lime CRM
- Using Work dialog ( This solution also makes it possible for the user to cancel the job )
Status bar¶
Example¶
Dim i As Integer
Dim j As Integer
Dim oRecord As LDE.Record
Dim oBatch As New LDE.Batch
Set oBatch.Database = Application.Database
' Do 10 batches
For j = 0 To 10
'Batches of 100 at the time
For i = 0 To 100
Set oRecord = New LDE.Record
Call oRecord.Open(Application.Database.Classes.Lookup("company", lkLookupClassByName))
oRecord.value("name") = "Company nummero - " & (j * 100 + i)
Call oRecord.Update(oBatch)
Next i
Call oBatch.Execute
' Update text and progress
Application.StatusBar.Text = "Creating " & (j * 100) & " / 1000 companies"
' Progressbar is not visible if progress 0, so set a minimum of 1.
If j = 0 Then
Application.StatusBar.Progress = 1
Else
Application.StatusBar.Progress = 100 * ((j * 100) / 1000)
End If
Next j
' Remove Progressbar
Application.StatusBar.Progress = 0
Application.StatusBar.Text = ""
Work dialog¶
What is a work dialog¶
A work dialog is a small popup window that shows a progress bar with som text and can also have a cancel button.
Properties¶
Name | Required | Type | Description |
---|---|---|---|
Cancel | False | Boolean | Indicates if the user has pressed Cancel button |
CancelText | False | String | Text on Cancel button |
Caption | False | String | Title of the WorkDialog window |
Delay | False | Long | Will look into it |
Icon | False | IPictureDisp | What icon to show in the WorkDialog window |
Progress | False | Long | A number between 1 and 100 that indicates the progress of the bar |
Style | True | WorkDialogStyle (Enumeration) | Indicates what should be visible and not in the workDialog (If you want to use multiple styles just add them to eachother e.g. .Style = lcoShowCancelButton + lcoShowText) |
lcoShowCancelButton - Show cancel button (Also set CancelText) | |||
lcoShowIcon - Show icon in in workDialog (Also set Icon) | |||
lcoShowProgressBar - Show progress bar (Also set Progress) | |||
lcoShowText - Show text in workDialog (Also set Text) | |||
lcoShowTopMost - Makes the window topmost | |||
Text | False | String | The text that is shown inside the WorkDialog |
Steps¶
- Declare a LCO.WorkDialog With events and add listeners for them.
- Create an instance of the workDialog and set initial values like caption and style. Then show it.
- How to use the events.
Example¶
1) Declare WorkDialog¶
2) Create instance¶
Dim oIcon As IPictureDisp
Set m_WorkDialog = New LCO.WorkDialog
Set oIcon = LoadPicture(WebFolder & "/resources/MyIcons/progress\_bar.ico", , , color) ' Of course the icon must exist at the given path.
Set m_WorkDialog.Icon = oIcon
m_WorkDialog.Caption = "Create companies!"
m_WorkDialog.CancelText = "Cancel"
m_WorkDialog.Text = "Preparing..."
m_WorkDialog.Progress = 1
m_WorkDialog.Style = lcoShowCancelButton + lcoShowProgressBar + lcoShowText + lcoShowIcon
Call m_WorkDialog.show
3) Event listeners¶
'Event for Cancel-button
Private Sub m_WorkDialog_Cancel()
On Error GoTo ErrorHandler
m_WorkDialog.Cancel = True
Call Lime.MessageBox("Cancelled")
Exit Sub
ErrorHandler:
Call UI.ShowError("ControlsHandlerCompany.m\_WorkDialog\_Cancel")
End Sub
'Event for doing the heavy job. (Creating companies in this case)
Private Sub m_WorkDialog_Work()
On Error GoTo ErrorHandler
Dim i As Integer
Dim j As Integer
Dim oRecord As LDE.record
Dim oBatch As New LDE.Batch
Set oBatch.Database = Application.Database
' Do 10 batches
For j = 0 To 10
'Is it cancelled?
If m_WorkDialog.Cancel Then
Exit For
Else
'Batches of 100 at the time
For i = 0 To 100
'Is it cancelled?
If m_WorkDialog.Cancel Then
Exit For
Else
Set oRecord = New LDE.record
Call oRecord.Open(Application.Database.Classes.Lookup("company", lkLookupClassByName))
oRecord.Value("name") = "Company nummero - " & (j * 100 + i)
Call oRecord.Update(oBatch)
End If
Next i
'Is it not cancelled?
If Not m_WorkDialog.Cancel Then
Call oBatch.Execute
End If
' Update text and progress
m_WorkDialog.Text = "Creating: " & (j * 100) & " / 1000"
' Progressbar is not visible if progress 0, so set a minimum of 1.
If j = 0 Then
m_WorkDialog.progress = 1
Else
m_WorkDialog.progress = 100 * ((j * 100) / 1000)
End If
End If
Next j
Exit Sub
ErrorHandler:
Call UI.ShowError("ControlsHandlerCompany.m\_WorkDialog\_Work")
End Sub
- Last modified: 5 years ago
- (external edit)