This is good example of how we can Eliminate bottlenecks with IguanaX. This is the problem. usePrefix Namespaces for Separating Concerns by building a custom file reader component which has a simple interface for a unique purpose rather than using a general purpose no code solution - see The problem with no-code solutions.
Here’s a scenario:
A large lab needs to have a file reading component which can feed files from different customers based on the prefix of the file, i.e. some files start with
...
JJ99, others XYZ etc. depending on the source.
...
How can we make a super streamlined component which:
Matches the requirements
Is easy to implement
Simplifies operations
...
Let’s do it!
Expand | ||
---|---|---|
| ||
This component generates some test files to make it easier to learn how to make a custom file reader. You can useCreate component +FROM URL to import the component. Copy paste the URL from here:
|
Expand | ||||
---|---|---|---|---|
| See Customizing components
| |||
Refer to Edit a Component to see how it's done if you have not done this before. |
Expand | ||
---|---|---|
| ||
See Custom Fields. We take the base File Reader and add Client ID List which will be a comma delimited list of the prefixes we want to filter on: | ||
Expand | ||
| ||
| ||
To simplify the tutorial we have set these up a ClientList with the filename prefix Ids. Click on the config.json and you should see: See Custom Fields to understand how this was created. |
Expand | ||||||
---|---|---|---|---|---|---|
| ||||||
Navigate to MatchRules.lua in the Project Tree. This is the function we need to alter:
The file reader component is deliberately simple and uses /wiki/spaces/IXB/pages/3181903910 separation of concerns to make it more obvious how to modify the code to meet new needs. So this is what we are starting off with. We need this function to return true when the matching criteria are met. https://bitbucket.org/interfaceware/fromfile/src/main/MatchRules.lua Code Block | |
Expand | |||||
---|---|---|---|---|---|
| |||||
Change the matching to add in two lines so we can see the filenames we need to filter on.
These are the concepts we have used:
|
Expand | |||||
---|---|---|---|---|---|
|
| ||||
Create a second function, APPidList, to extract the ClientList prefixes from the custom fields and update MatchFile to call APPidList. You can replace the contents of the MatchRules.lua file with this new code:
These are the concepts we have Concepts used:
|
Expand | ||||||
---|---|---|---|---|---|---|
| ||||||
We can quickly do this by adding one line to AppidList after line 2:
Iterating through a Lua table as list You should see something like: Concepts used: |
Expand | |||||
---|---|---|---|---|---|
| |||||
So now we make Create a third function, APPmatchPrefix, to determine if the file name matches filename matches the prefix. You can copy the code below:
See the screenshot below and add a line to MatchFile to call and invoke AppmatchPrefix. Concepts used:
|
Expand | ||||||
---|---|---|---|---|---|---|
| ||||||
Code Block |
| |||||
Let’s modify the code to go through the entire list of prefixes:
Concepts used: A function
And this is what you should see: Concepts used:
|
Expand | ||
---|---|---|
| ||
Commit and Push Changes to Git and go to the component card for Choosing the code to run for your component. |
You’re done! The next steps are how you could further refine the code
Expand | ||
---|---|---|
| ||
This means refining the APPidList function. That would involve looping through the list and removing white space from each ID: Concepts: |
Expand | |||||
---|---|---|---|---|---|
| |||||
Add intuitive Custom Logging for your component to increase visibility into processing and adding meaningful messages to help with troubleshooting. You can see an example of this in main.lua on line 25:
Try it for yourself! See Concatenating strings for a quick explanation on the double-dot notation. |
Expand | ||
---|---|---|
| ||
Add Custom Status for your component to have it display real time updates at the bottom of the component card as its running. This component already creates custom status on lines 31-36 of main.lua. Try it for yourself! |
There is no limit to how you can streamline the usage of a custom component - if that helps address a bottleneck, then it is well worth it.