11/21/2024 4:50:37 PM
slxdeveloper.com
Now Live!
|
|
|
How To Update Controls Across Forms |
|
Description: |
SalesLogix v6 has a great new Forms collection exposed in the Application object. This new collection will solve many problems associated with updating controls across forms. This article will focus on using the Forms collection to do just that.
|
Category: |
Architect How To Articles
|
Author: |
Ryan Farley
|
Submitted: |
1/8/2003
|
|
|
Stats: |
Article has been read 18351 times
|
Rating:
- 5.0 out of 5 by 14 users |
|
|
|
fiogf49gjkf0d
SalesLogix v6 has a great new Forms collection exposed in the Application object. This new collection will solve many problems associated with updating controls across forms. This article will focus on using the Forms collection to do just that.
The SalesLogix Application object exposes a cool new Forms collection. If you have worked with the Forms collection in VB before then this will seem very familiar. Basically, the Forms collection is a collection of all currently loaded Forms (and also Legacy Views) in the Sales Client. What makes this useful is you now have a way to get a reference to another running form and then access essentially anything on that form from your current form - just as if that form was your current form.
The Forms collection is very easy to use, however there are some problems with its current implementation that do not work correctly as of now. We'll look at what exactly this problem is later, so you don't spend a lot of time trying to use the Forms collection as it is documented in the LAN Developer's Reference in the v6 SDK.
As with any collection, the Forms collection exposes it's count and the items within it. If you want to see a list of all running forms, you could loop through each item in the collection like this:
For i = 0 to Application.Forms.Count - 1
sForms = sForms & Application.Forms.Item(i).Name & vbCrLf
Next
MsgBox "Total Forms: " & Application.Forms.Count & vbCrLf & vbCrLf & sForms
Easy enough. If you look at the code, we are actually referencing a property of the Form itself in each iteration of the loop. We are accessing it's 'Name' property. Just as easy as it was for us to access the 'Name' property, we can access any property as well as controls on the Form.
As I mentioned before, the current Application.Forms implementation does have some problems. According to the developer's reference, we should be able to access an item in the Forms collection either by it's index (as we did in the example above) or by the form's plugin name.
For example:
MsgBox Application.Forms("System:Account Detail").Name
However, this does not currently work. Neither does it work to use the form name (as specified in the Name property). No matter what string value you use there, it will return a null reference. You can test this with code similar to the following:
Dim frm
Set frm = Application.Forms("System:Account Detail")
If frm Is Nothing Then
MsgBox "Could not find form reference."
Else
MsgBox "You'll never see this message."
End If
This does make it a little akward to use syntactically, but it is still completely usable. I'll update this article as soon as I hear back from SalesLogix on this problem.
OK, let's get on with seeing how to use the Form reference for something useful. Let's say we want to update the Account name on the Account Detail Form from another form. What we'll need to do is loop through the Forms collection to find the form we are looking for. This looping is a very minimal hit, since you'll probably only see up to 15 Forms in the collection at any one time. But, what this means, is that the form you're looking for will need to have a unique name. By unique names, I mean that you'll want to change the form's Name property to something meaningful, instead of just leaving it the default value of "Form". The standard Account & Contact Detail Forms do not have unique names. If you want to access them, you'll need to change the Name property of those forms to something meaningful, such as "frmAccountDetail", etc.
So, once we look through the controls and find the Account Detail form, let's use that form reference to update the Account name on that form. The Account name is stored in a text control named "txtAccount". For this example, we'll append the value "Updated" to the name.
Dim frm
' loop through the forms
For i = 0 to Application.Forms.Count - 1
' check if we've found the Account Detail form.
' make sure you've changed it's Name property.
If Application.Forms(i).Name = "frmAccountDetail" Then
' save the reference to this form
Set frm = Application.Forms(i)
' now use it to update one of it's controls
frm.txtAccount.Text = frm.txtAccount.Text & " - UPDATED"
Exit For
End If
Next
That was easy enough, wasn't it? As you can probably see, it would be very helpful to be able to access the form reference using the plugin name as indicated in the developer's reference. Then you wouldn't have to make sure the forms were named. To make things easier, what I do is wrap this in an easy to use function that I can put in a VBScript and include it whenever I need to get a reference to a Form. Something like this:
Function GetForm(ByVal sFormName)
Dim frm
Dim i
For i = 0 to Application.Forms.Count - 1
If Application.Forms(i).Name = sFormName Then
Set frm = Application.Forms(i)
Exit For
End If
Next
Set GetForm = frm
End Function
Now to use it, all you need to do is include the script and do something like this.
Dim frm
Set frm = GetForm("frmAccountDetail")
frm.txtAccount.Text = "This is my new account name"
Using the Forms collection can be a powerful way to make your SalesLogix forms appear even more as a "built-in" part of the SalesLogix application. Making your forms "talk" to each other will give you even more flexibility as a SalesLogix developer. Learn it, use it, love it.
Until next time, happy coding.
-Ryan
|
|
|
|
Rate This Article
|
you must log-in to rate articles. [login here] 
|
|
|
Please log in to rate article. |
|
|
Comments & Discussion
|
you must log-in to add comments. [login here]
|
|
|
- subject is missing.
- comment text is missing.
|
|
| Great explanation of this Posted: 1/9/2003 11:50:54 AM | fiogf49gjkf0d Thanks for this article Ryan, great info for being able to integrate views/ wizards together with other saleslogix screens. | |
|
| You should be able to access forms via their name Posted: 9/9/2003 4:57:10 PM | fiogf49gjkf0d You no longer need to loop through the collection to find your form. You can access it as Ryan has outlined, via the name: Application.Forms("System:Account Detail").txtAccount.Text = "New Account Name" I apologize that I dont know what version it was fixed, but it does work on the current version 6.1.0.1060.
| |
|
| Re: You should be able to access forms via their name... Posted: 10/6/2003 1:03:59 AM | fiogf49gjkf0d Tim,
I believe that was fixed in v6.1. When this article was written that way did not work (as mentioned in the article). But good point, I should update the article to mention that this is now possible. Thanks.
-Ryan | |
|
| Re: How To Update Controls Across Forms Posted: 9/8/2004 4:00:16 PM | fiogf49gjkf0d Is there anyway to dynamicly determine the pluginID of the current form? I'd like to display the Plugin version on the form, to verify that users have the correct version.
Thanks!, Micah | |
|
| How To Update Controls Across Forms Posted: 7/18/2007 8:16:53 AM | fiogf49gjkf0d I have a problem with updating controls and in my case when i select a row in datagrid(Generated dynamically),corresponding row values needs to be binded to controls in another form.But i am not able to get it.But it is working fine with static datagrid.can u suggest me how to overcome the problem of binding dynamic datagrid values in one form to controls in another form.i have used the following code.
Dim frm set frm= GetForm("frmExpenseTab") frm.txtCity.txt="Chennai" | |
|
| Re: How To Update Controls Across Forms Posted: 2/3/2010 1:56:26 PM | fiogf49gjkf0d Does the Application.Forms object allow the external firing of a script, such as in the following:
set chkForm = application.Forms("GK Example Form") chkForm.RefreshGrids()
(where RefreshGrids is a script defined on the "GK Example Form" plugin)
| |
|
| Re: How To Update Controls Across Forms Posted: 2/3/2010 2:08:39 PM | fiogf49gjkf0d Chris,
Yes. The Form has a "Script" object that gives you access to these.
Dim frm
Set frm = Application.Forms("System:My Form") frm.Script.RefreshGrids()
Make sense? | |
|
| Re: How To Update Controls Across Forms Posted: 2/3/2010 2:32:33 PM | fiogf49gjkf0d Hey Ryan,
Yes --- that does make sense. And it worked!
You just saved me an hour's worth of "hit and miss" troubleshooting. You are the man! Thanks!
Regards,
Chris | |
|
| Re: How To Update Controls Across Forms Posted: 2/5/2010 3:32:08 AM | fiogf49gjkf0d This article just saved me another afternoon of heartache! Many thanks guys! :) | |
|
|
|
|
|
Visit the slxdeveloper.com Community Forums!
Not finding the information you need here? Try the forums! Get help from others in the community, share your expertise, get what you need from the slxdeveloper.com community. Go to the forums...
|
|
|
|
|
|