Senhores,
É provável que essa abordagem seja implementada sim.
Deixem-me explicar o que ocorre:
As macros Scriptcase não são funções normais PHP, elas funcionam como marcações para o gerador do ScriptCase. O gerador lê a macro e seus parâmetros, então substitui o código pelo PHP equivalente. Com os campos é a mesma coisa: {campo} é a mesma coisa que $this->campo. Isso significa que não dá pra colocar uma string como parâmetro para algumas macros, pois o gerador vai ler o código, não o conteúdo da String. Como ainda não existe tal implementação nativa, você pode utilizar essa construção:
sc_lookup(dsCampos, "SHOW COLUMNS FROM clientes;");
$cont = count({dsCampos});
for($x=0;$x<$cont;$x++)
{
$campo = {dsCampos[$x][0]};
$bFlagRead_productid = false;
$this->NM_ajax_info['readOnly']['[b]".$campo."[/b]'] = $this->nmgp_cmp_readonly['[b]".$campo."[/b]'] = "on";
}
Esse seu código desabilitará apenas os campos da base de dados. Se você quiser listar também os campos virtuais (aqueles criados com o ScriptCase), deverá utilizar o seguinte código:
$campos = array_keys($this->nmgp_dados_select);
A partir daqui, a variável $campos terá um array com todos os campos do formulário.
OBS: Esses códigos mexem diretamente com variáveis internas do ScriptCase. Não há garantia de que funcionem sempre, pois as variáveis internas do ScriptCase poderão sofrer mudanças sem aviso prévio.
==========================================================
UPDATE: Esse código deverá funcionar nos mesmos eventos/situações em que funciona a macro “sc_field_readonly”(Vide Manual).