UpdateRecordSet will use dynamic fields?

Aha, so your sample code does not demonstrate your scenario.

In that case, use Query::update_recordset() method. Here is an example from WHSPrintLabels class:

Query                   waveLabelQuery = new Query();
QueryBuildDataSource    qbdsWaveLabel = waveLabelQuery.addDataSource(tableNum(WHSWaveLabel));

qbdsWaveLabel.addRange(fieldNum(WHSWaveLabel, WaveLabelId)).value(rangeValue);

Map fieldSetMap = new Map(Types::String, Types::String);

fieldSetMap.insert(fieldStr(WHSWaveLabel, Printed), any2Str(NoYes::Yes));
fieldSetMap.insert(fieldStr(WHSWaveLabel, PrintedDateTime), DateTimeUtil::toStr(printedDateTime));
fieldSetMap.insert(fieldStr(WHSWaveLabel, PrintedBy), printedBy);

Query::update_recordset(fieldSetMap, waveLabelQuery);