- Miglioramento lettura parametri strategia custom o forzati. Si fa tutto all'esecuzione della strategia

- Si è evitata la chiamata della DeepCopy su libreria Config delle strategie
- se strategia forzata, si salva solo l'id. I parametri verranno letti dopo
This commit is contained in:
andrea.villa
2025-03-14 12:00:24 +01:00
parent 1a455e66de
commit 5f930e2e21
10 changed files with 59 additions and 73 deletions
+37 -32
View File
@@ -380,48 +380,53 @@ function BeamLib.GetMaxNzDefault( b3Raw, vtNFace, vtToolDirection)
end
-------------------------------------------------------------------------------------------------------------
-- sovrascrivo i parametri personalizzati salvati su Proc a quelli di default dalla strategia
-- N.B. : I parametri personalizzati non più presenti tra i default della strategia, verranno ignorati. Quelli extra avranno valore di default
-- Il controllo deve essere fatto SEMPRE all'inizio di ogni strategia, per controllare conformità parametri custom
function BeamLib.GetUpdateCustomParameters( CustomStrategyParamList, DefaultStrategyParamList)
local UpdatedParamList = BeamLib.TableCopyDeep( DefaultStrategyParamList)
-- se esistono i parametri di default (normalmente ce n'è sempre almeno uno)
if UpdatedParamList then
for i = 1, #UpdatedParamList do
table.insert( UpdatedParamList, UpdatedParamList[i])
if CustomStrategyParamList then
for j = 1, #CustomStrategyParamList do
if UpdatedParamList[i].sName == CustomStrategyParamList[j].sName then
UpdatedParamList[i].sValue = CustomStrategyParamList[j].sValue
-- si traduce la tabella dei parametri con tutte le informazioni in una lista contenente i parametri utilizzabili con accesso diretto
function BeamLib.LoadCustomParametersInStrategy( Proc, CustomParameters, DefaultStrategyParamList)
local UpdatedParameters = {}
-- TODO serve controllare se campo 'sStrategyId' congruente tra il Config (DefaultStrategyParamList) e i parametri custom (CustomParameters)?
if DefaultStrategyParamList.Parameters and #DefaultStrategyParamList.Parameters > 0 then
for i=1, #DefaultStrategyParamList.Parameters do
local xParameterValue = nil
-- se strategia forzata, leggo eventuali parametri nelle info
if CustomParameters and CustomParameters.bForcedStrategy then
local sParameterToRead = DefaultStrategyParamList.sStrategyId .. '_' .. DefaultStrategyParamList.Parameters[i].sNameNge
local sForcedParameterForProc = EgtGetInfo( Proc.id, sParameterToRead, 's')
-- se ho trovato il valore, lo sovrascrivo al default
if sForcedParameterForProc then
xParameterValue = sForcedParameterForProc
end
-- altrimenti i parametri custom si trovano già su questa lista
elseif CustomParameters and CustomParameters.Parameters then
for j=1, #CustomParameters.Parameters do
if CustomParameters.Parameters[j].sName == DefaultStrategyParamList.Parameters[i].sName or
CustomParameters.Parameters[j].sName == DefaultStrategyParamList.Parameters[i].sNameNge then
xParameterValue = CustomParameters.Parameters[j].sValue
break
end
end
end
end
end
return UpdatedParamList
end
-- se non arriva forzato da strategia, oppure se non è stato configurato da cliente, si prende default
if not xParameterValue then
xParameterValue = DefaultStrategyParamList.Parameters[i].sValue
end
-------------------------------------------------------------------------------------------------------------
-- si traduce la tabella dei parametri con tutte le informazioni in una lista contenente i parametri utilizzabili con accesso diretto
function BeamLib.LoadCustomParametersInStrategy( CustomParameters)
local Parameters = {}
if CustomParameters and #CustomParameters > 0 then
for i=1, #CustomParameters do
if CustomParameters[i].sType == 'b' then
Parameters[CustomParameters[i].sName] = CustomParameters[i].sValue == 'true'
elseif CustomParameters[i].sType == 'd' then
if #CustomParameters[i].sValue > 0 then
Parameters[CustomParameters[i].sName] = tonumber( CustomParameters[i].sValue)
if DefaultStrategyParamList.Parameters[i].sType == 'b' then
UpdatedParameters[DefaultStrategyParamList.Parameters[i].sName] = xParameterValue == 'true'
elseif DefaultStrategyParamList.Parameters[i].sType == 'd' then
if #DefaultStrategyParamList.Parameters[i].sValue > 0 then
UpdatedParameters[DefaultStrategyParamList.Parameters[i].sName] = tonumber( xParameterValue)
-- stringa vuota equivale a non passare alcun valore (deciderà la strategia)
else
Parameters[CustomParameters[i].sName] = nil
UpdatedParameters[DefaultStrategyParamList.Parameters[i].sName] = nil
end
else --CustomParameters[i].sType == 's' or CustomParameters[i].sType == 'combo'
Parameters[CustomParameters[i].sName] = CustomParameters[i].sValue
else --DefaultStrategyParamList[i].sType == 's' or DefaultStrategyParamList[i].sType == 'combo'
UpdatedParameters[DefaultStrategyParamList.Parameters[i].sName] = xParameterValue
end
end
end
return Parameters
return UpdatedParameters
end
---------------------------------------------------------------------