“If you have built castles in the air, your work need not be lost; that is where they should be. Now put the foundations under them.”
— Henry David Thoreau
Since I first threw together my Flow Designer Array Iterator, I have had a number of occasions to put it to good use, but recently I had a need for an iterating index, but I did not have a String Array to use as the basis for the iteration. I thought about just creating one, just to have something to pass in to the Action, but then it occurred to me that it might be useful to have some kind of simple index action that wasn’t dependent on the presence of a String Array. Basically, it could be very similar to my Array Iterator, but without the array.
I thought about making a new Script Include just for these new Actions, but I decided to just add them to my existing SNHStringArrayUtils Script Include, mainly because I wanted to copy the existing functions from there, anyway, and so it was easier to just drop the copy right there into the same script. To start with, I copied the createIterator function and then hacked it up to create a new createCounter function.
createCounter: function(scratchpadId, counterId) {
var response = {};
var snhspu = new SNHScratchpadUtils();
response = snhspu.setScratchpadProperty(scratchpadId, counterId, 0);
if (response.success) {
response.message = 'Counter ' + counterId + ' successfully created';
}
return response;
}
For the most part, that was just a matter of removing all of the code related to the String Array, which we are not using here, and then setting the value of our new counter to zero. Once that was done, I copied the existing iteratorNext function and hacked that up to create the counterNext function.
counterNext: function(scratchpadId, counterId) {
var response = {};
var snhspu = new SNHScratchpadUtils();
response = snhspu.getScratchpadProperty(scratchpadId, counterId);
if (response.success) {
var counter = parseInt(response.property_value);
var previous = counter;
counter++;
var current = counter;
counter++;
var next = counter;
response = snhspu.setScratchpadProperty(scratchpadId, counterId, current);
if (response.success) {
response.previous_value = previous;
response.current_value = current;
response.next_value = next;
response.message = 'The current value of the counter is ' + current;
}
}
return response;
}
That was pretty much it for the scripting changes. With that all put to bed, I popped over to the Flow Designer and basically did the same thing with my array Actions that I did with the array functions, copy them and then modify them for my new purpose. I used my Create Array Iterator Action as the starting point for my new Create Counter Action, and then used my Array Iterator Next Action as the basis of my new Increment Counter action. Once again, I spent more time removing things than I did adding things, and it all went relatively quickly. The only thing to do now was to do test it all out.
As with the array Actions, you have to first have a Scratchpad on which to store the values, so I ran a quick test on my Create Scratchpad Action to get a fresh Scratchpad ID. With that in hand, I pulled up my new Create Counter Action and hit the Test button, entered my Scratchpad ID and Counter ID and ran the test.
That all seemed to work out OK, so I pulled up my new Increment Counter Action and gave that one a whirl as well. In fact, I ran the test a few times, just to run up the number.
Well, everything seems to work. Obviously, there is a lot more testing to do in order to check out all of the error handling built into the processes, but the main purpose of the exercise seems to be satisfied, so that’s always a good thing. If you want to play around with all of the various parts and pieces, here’s an Update Set that should contain everything that you would need.
Note: With the introduction of Flow Variables, this component is no longer necessary.