Day 053 - Reusable components
The WinDev tutorial describes a component as "a building block that can be re-used in an unlimited number of projects (and in executables)".
WinDev includes a couple of sample projects to illustrate this capability.
The CountryComponent project contains set of procedures which you export as a component. One of these procedures returns a list of countries from a Classic HyperfileSQL table, located in the application directory. The other four procedures return varying kinds of information related to the passed ISO country code (if you're not familiar with ISO country codes you can get more information on the ISO.org web site).
Here's the code for the CountryList procedure:
PROCEDURE CountryList(sSort="NAME",sSeparator=CR,bDetail=False)
sList is string
sSortItem is string
SWITCH sSort
CASE "NAME" : sSortItem = "COUNTRY"
CASE "CODE" : sSortItem = "ISOCODE"
OTHER CASE : Error("The parameter used in CountryList() is false.")
RESULT ""
END
// Browse the countries
FOR ALL COUNTRY ON sSortItem
IF bDetail THEN
sList = sList + COUNTRY.ISOCODE + TAB + COUNTRY.COUNTRY + sSeparator
ELSE
sList = sList + COUNTRY.COUNTRY + sSeparator
END
END
//Delete the last separator
sList = sList[[1 TO Length(sList)-Length(sSeparator)]]
RESULT sListThe other procedures are smaller; CountryCurrency is typical:
PROCEDURE CountryCurrency(sIsoCode)
HReadSeek(COUNTRY, ISOCODE, sIsoCode)
IF NOT HFound() THEN
RESULT "BAD"
END
RESULT COUNTRY.COUNTRYCURRENCYExporting any portion of a project as a component is a pretty straightforward wizard-driven process. Choose Workshop | External Component | Define a new component from this project. Give the component a name:
Choose what to include:
Decide which of the elements will be exposed for access by other projects. Since the example app contains only procedures and no windows or other potentially usable elements, only the procedure set is a candidate. Interestingly it's the procedure set that's exported, not individual procedures.
That's basically it for the wizard that defines the component. Now you need to go through another wizard if you want to generate the component. This wizard begins automatically after the first one completes.
The first screen looks eerily familiar:
This is the same as the definition wizard, and it's not clear to me why you'd want a different set (a subset) of elements in the component as compared to what you defined the component to contain. Or something like that.
The next screen is a repeat as well:
There are a couple of screens related to multi-language support, and then this on versioning:
After that there are some prompts for component information, accompanying image, and the like. WinDev also generates some skeleton documentation:
And it can create a help file:
You can decide whether you want to allow user macro code (probably not, unless you're confident it won't be abused), and you choose how to publish the component.
I'd already used the SCM, so that option made sense to me. But what in the world is the Reusability Center? Did I miss something?
And another screen on backups, which I initially found a bit confusing.
I think this is really the same thing as a tag in a version control system. And it seems that there's some French language data left behind by the person who created the example; I believe PaysComposant translates as CountryComponent.
The last step is to give the component files a name:
I deliberately didn't add my component to the SCM because I wanted to find out more about this Reusability Center, but after completing the wizard I got this window:
So I gave in and added the element to the SCM.
But I still wanted to know about this Reusability Center. I found a document online, but the menu option it described (under Tools) didn't exist in my version of WinDev. I ran the nearest analog - something called WDTool. And I got this:
Hmm. Lots of interesting stuff here. On a hunch I tried the Resource Management Center, and Presto! The Reusability Center!
Only I have no idea how to use it.
But I found it!
The example you ran through isnt the best, but lets say you have a clarion list box with embed code you want to deploy (with some tweaks like filtering/ranging) to various other windows in your app. The clarion way would be to create your own template (which isnt quick to build for serious components) as there is lots of template hand code to knock up, or just create each list box on each window set the filter/ranging and cut and paste any embed code, well in WinDev you can create a component which can be one or more controls with some backend code, and then make it a reusable component. You can then deploy that to any number of windows just like any other window control. That feature is a real time saver!
This could also be used like a pool of custom window controls much the same way you can create a pool of dictionary fields with all their different properties in the dct. So if you have a group of controls which you want to use in many different places, this is what you would use to create them.