I’m sure this is going to be very easy for those of you who have converted ABL to C#. I have a snippet that is challenging me due to my relative lack of C# chops. This was written by others and looks a bit inefficient, but it works in E9. I need to convert this so I can keep my migration to 10.2.2 moving. Help, please!
Basically, when saving/updating an open Quote:
Erase QuoteQty tbl
Erase ttQuoteQty tbl. The converted code failed syntax check. Perhaps ttQuoteQty.Clear() is correct?
Recreate both tables using data from the UD20 tbl (previously populated).
The converted code fails the syntax check at 2 points. Here’s the snippet in brief:
// So, For the given quote, empty both the ttQuoteQty AND the QuoteQty (DB) tables. This will be rebuilt later in the routine.
//
for each ttQuoteHed:
for each QuoteQty WHERE ...
DELETE QuoteQty.
END.
for each ttQuoteQty:
DELETE ttQuoteQty.
END.
for each UD20 WHERE ...
Create QuoteQty.
ASSIGN QuoteQty.Company=ttQuoteHed.Company // recreate QuoteQty
QuoteQty.QuoteNum = INTEGER(UD20.Key2)
...
Create ttQuoteQty.
ASSIGN ttQuoteQty.Company=ttQuoteHed.Company // recreate ttQuoteQty
...
end.
end.
And now the relevant snippets from the converted code…
foreach (var ttQuoteHed_xRow in ttQuoteHed)
{
var ttQuoteHedRow = ttQuoteHed_xRow;
foreach (var QuoteQty_iterator in (from QuoteQty_Row in Db.QuoteQty where ... select QuoteQty_Row))
{
QuoteQty = QuoteQty_iterator;
Db.QuoteQty.Delete(QuoteQty);
}
ttQuoteQty_xRow.RemoveAll(ttQuoteQty_xRow); *ERROR* "The name ttQuoteQty_xRow does not exist. Changed to ttQuoteQty.Clear()
foreach (var UD20_iterator in (from UD20_Row in Db.UD20 where... select UD20_Row))
{
UD20 = UD20_iterator;
QuoteQty = new Erp.Tables.QuoteQty(); // Here we rebuild the Db.QuoteQty table
Db.QuoteQty.Insert(QuoteQty);
QuoteQty.Company = ttQuoteHed_xRow.Company; // and populate it with info previously saved to UD20
...
var ttQuoteQtyRow = new QuoteQty(); // And, here we rebuild the tt table
ttQuoteQty_xRow.Add(ttQuoteQtyRow); *ERROR* The name ttQuoteQty_xRow dows not exist.
ttQuoteQtyRow.Company = ttQuoteHed_xRow.Company; // And do exactly the same thing
...
}
}
Uh oh. This is why I included the disclaimer “made by others”.
I saw an earlier post/response of yours, Jose, where you suggested to the original poster that he/we probably should not rely on the online converter, and I am in full agreement. I’ve had to make loads of changes - but time is of the essence on this one.
Use case. My Sales Mgmt decided they want to use the quote form for a lot of what if scenarios, however, when certain items change, like the shipto if I remember correctly, everything on the quote gets lost (due to the possibility of a price list coming into play automatically).
A consulting firm suggested they could save the current contents, allow the refresh to occur when significant changes are made, and then copy the info back.
Yeah I’m just concerned about the way the QuoteQty records are being removed, it’s not using the BO’s, not a huge fan of that… I’ll poke at it a bit when I get some time tomorrow
IF you are going to modify… and Especially Add or Delete anything, it should always be done with Business Objects that are specifically create to do such things.
ABL had some real “Flexibility” that made this “look” easy, but in reality you could really screw up your database by directly modifying the database.
Thanks @tkoch, I was thinking the same - this really doesn’t have to be complicated.
As long as I have access to the tables in question - both the in memory ‘tt’ table as well as the actual table, it shouldn’t be too difficult to write new values to the records - either adding and deleting as necessary.