Algumas vezes é necessário se fazer um select em uma tabela tendo em mãos apenas o tableId, para isso, a solução abaixo atende bem.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public Common findRecord(TableId  _tableId, 
                         RecId    _recId, 
                         Boolean  _forUpdate = false)
{
  Common      common;
  DictTable   dictTable;
  ;
  dictTable = new DictTable(_tableId);
  common = dictTable.makeRecord();
 
  common.selectForUpdate(_forUpdate);
 
  select common
    where common.RecId == _recId;
 
  return common;
}

Se você quiser, você pode até mesmo atualizar campos neste registro. Você pode acessar/editar estes campos usando seus nomes ou fieldNum. O método seguinte irá atualizar um campo específico na tabela.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public void updateValue(TableId _tableId, 
                        RecId   _recId, 
                        str     _field, 
                        AnyType _value)
{
  Common      common;
  Int         fieldId;
  ;
  ttsbegin;
  common = findRecord(_tableId, _recId, true);
  fieldId = fieldname2id(_tableId,_field);
 
  if (fieldId && _value)
  {
    common.(fieldId) = _value;
    common.update();
  }
  ttscommit;
}

[]s
Pichler

Fonte: http://www.doens.be/2009/07/select-a-record-from-a-table-when-you-only-have-the-tableid/