EDIT: the solution involved using Warren's suggestion with a strategically placed bit of TRIM. Please see comments below for more details.
-
This is baffling me.
The Scenario:
In this environment, physical items are placed on a truck regularly, and then taken off a truck regularly, as a truck moves through our environment. When items are placed on a truck, we want to know about it, and we want to be able to know at any given time "What is on the truck right now?" because, for example, once the truck comes back to the central nest, and all items are removed and logged, the truck contents **bleep** well better be empty. Item counts can be any number, from 1 to hundreds, all in a text window. The data is a result of bar code scans. Data is sent to the main process by collecting information in a couple windows, collecting the list of scan codes in a window (which eventually becomes the collection ScanDataCollection), and clicking [Accept Data].
What I thought was oh-so-clever:
I maintain a specific SharePoint list: SpiderDeets_OnTruck. This list is an ongoing report of items that are allegedly still on a truck.
I start each [Accept Data] process by looping through all the entries and if I find an entry in the SpiderDeets_OnTruck list, then I delete that record straight away. Then, a little later in the routine, if one of the settings indicates "these items were placed on a truck", then I add those items to the list SpiderDeets_OnTruck.
It seemed like an extremely clever way to have a "hot report" that was always tracking the truck-content status.
Where it fails:
A variety of things seem to remain still "on the truck." Any one item when processed operated appropriately, but I discovered that when I processed a bunch of items, only the last item would get its "I'm on the truck!" reference deleted. What the pickles is this vinegar?!
My code:
At the beginning of the function:
ForAll(ScanDataCollection, // Clear the associated Lists
// Before trying to modify the table, check to see if the data is even IN the table
//If(CountRows(Filter(SpiderDeets_OnTruck, Result in Scan_Code)) > 0,
// If it is in the table, remove it.
//Notify("Result: " & Result);
RemoveIf(SpiderDeets_OnTruck, Result in Scan_Code);
//);
); // ForAll(ScanDataCollection,
You may notice the NOTIFY line. I used that to help troubleshoot, but it may not be the best tool.
When a group of items go on the truck:
ForAll(ScanDataCollection,
Collect(SpiderDeets_OnTruck, {
Title: Text(Today()),
Timestamp: TransactionTimestamp_Value,
Scan_Code: TrimEnds(Result),
Location: DD_Location.SelectedText.Value,
Transaction_Type: TransactionType_Value,
Agent_Name: User().FullName,
Agent_Email: User().Email
});
); // ForAll(ScanDataCollection
And that seems to work okay.
Anyway, I seem to be able to consistently repeat this glitch: I feed a list of items and only the last item on the list gets happily removed from the SharePoint list, but the others don't.
My begging self:
Can someone please guide me in how to do this in a way that works? I must be misunderstanding something about how ForAll interacts with RemoveIf or whatever. I'm at a loss.
Thank you kindly,
Edward