'What is wrong with code - Trying to batch agent with similar account ID?
I am trying to batch Sales Invoice per customer . My agents are Invoice. I am looping through each of the account and checking how many invoices are there for each customer. Based on that changing the batch size. the batch Size calculated seems correct but the batching is not happening and batchSize is printed as 1 for each account.
LinkedHashMap<Integer, List<MyAgent>> productsWaiting = new
LinkedHashMap<Integer, List<MyAgent>>();
for (int i = 0; i < wait.size(); i ++){
MyAgent myAgent = wait.get(i);
int id = myAgent.actNo;
if (!productsWaiting.containsKey(id)) productsWaiting.put(id, new ArrayList<MyAgent>());
productsWaiting.get(id).add(myAgent);
}
for (int key : productsWaiting.keySet())
{
int id= key;
batchsize= productsWaiting.get(id).size();
batch1.set_batchSize(batchsize);
traceln("iD: " + id + " batchsize " + batchsize);
for (MyAgent p:productsWaiting.get(id)) {
//System.out.println(x);
//traceln("actNo" +p.actNo );
batch1.set_batchSize(batchsize);
wait.free(p);
batch1.set_batchSize(batchsize);
traceln(batch1.batchSize);
//System.out.println("Released " +"Batch Size " + x + "account ID-" + id);
}
}
Unable to change the batch size for each of account based on the invoices it contains.
Some logs are here
iD: 165691 batchsize 1
iD: 120895 batchsize 1
iD: 85295 batchsize 1
iD: 5080702 batchsize 2
iD: 121437 batchsize 1
iD: 174098 batchsize 1
On the entry of the batch block I checked the batach Size ..
165691
batch Size 1
120895
batch Size 1
85295
batch Size 1
5080702
batch Size 1
5080702
batch Size 1
121437
batch Size 1
174098
batch Size 1
Every entry of agent has batch size of 1.. Could you pls point out the mistake in the code.
Solution 1:[1]
The batching itself happens in a separate event and not inside the loop. Because you're calling the function set_batchSize(int batchSize)
from the inside of a loop, your Batch block will only take the last value defined by this function as the batch size. That's why the batch size of every agent is 1.
The same also goes for the function wait.free(Agent agent)
. This event will also take place only after you've finished calling the function to calculate the batch size.
So basically, instead of using a loop, you should only calculate the batch size for the next agent in the queue. Then you need to "wait" until the batching of this agent has taken place before you can calculate the batch size for the next agent.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | Nadia Galaske |