Recalc worksheet when total cost field changes

I have a BPM to capture quote worksheet temp cost fields to UD fields on QuoteDtl. Uses Quote.RecalcWorksheet BO and currently only fires when the Misc Cost field is changed (QuoteQty.MiscCost). Given the name of the BO I expected the BPM to also fire when Action> Refresh Worksheet is clicked, but it doesn’t.

What I want/need to have happen is for the BPM to fire whenever the Total Cost field changes (QuoteQty.TotalCost). This field is mostly driven by the ops, materials, and burdens in the manufacturing tab so I did a trace for when those fields change and it uses QuoteASM.Update BO but I don’t see how it does the recalc of the worksheet when a save is done.

A secondary option would be a button but would love to not require human intervention.

Any suggestions on how to accomplish this?

Bump - any ideas how I can have a BPM to fire whenever the Total Cost field changes (QuoteQty.TotalCost)?

For posterity:
Refresh Worksheet runs Quote.UpdateCosts so you could tie BPMs to that method.
Alternatively you could track the non-DB field QuoteQty.TotalCost by recalculating it when marking engineered (QuoteDtl.ReadyToQuote) and manually saving it to a UD field on either QuoteQty or QuoteDtl (if you assume a match for the selected QtyNum to SellingExpectedQty). On the line update method you can manually recalculate using this (example assumes a single QuoteQty, but you can modify the first line to select the correct QtyNum):

        var quoteQty = Db.QuoteQty.Where(x => x.Company == Session.CompanyID && x.QuoteNum == quoteDtl.QuoteNum && x.QuoteLine == quoteDtl.QuoteLine).Select(x => new{x.QuoteNum, x.QuoteLine, x.QtyNum}).FirstOrDefault(); 
        // Obtain costs from worksheet
        decimal totalCost = 0M;
        using(Erp.Contracts.QuoteSvcContract hQuote = Ice.Assemblies.ServiceRenderer.GetService<Erp.Contracts.QuoteSvcContract>(Db, true))
        {
            var qeds = new Erp.Tablesets.QuoteTableset();
            hQuote.RecalcWorksheet(quoteQty.QuoteNum, quoteQty.QuoteLine, quoteQty.QtyNum, ref qeds);
            hQuote.UpdateCosts(quoteQty.QuoteNum, ref qeds);
            totalCost = qeds.QuoteQty.Where(x => x.QuoteLine == quoteQty.QuoteLine && x.QtyNum == quoteQty.QtyNum).Select(x => x.TotalCost).DefaultIfEmpty(0M).FirstOrDefault();
        }