Показать сообщение отдельно
Старый 15.06.2006, 11:25   #8  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,721 / 1208 (44) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
1) Метод ClassDeclaration. Определяешь 2 переменные

PHP код:
Query       queryMySample;
QueryRun queryRunMySample
2) Создай отдельный (новый) метод в котором будешь конструировать Query. Например, createQuery(). Этот метод формирует переменную типа Query, которую ты определил в ClassDeclaration как queryMySample

3) Создай еще один новый метод примерно такого содержания

PHP код:
public void makeQueryRun()
{
    ;
    if (! 
queryMySample)
    {
        
this.createQuery();
    }
    
queryRunMySample = new QueryRun(queryMySample);

4) Перекрываешь метод QueryRun

PHP код:
public QueryRun queryRun()
{
    return 
queryRunMySample;

5) Перекрываешь метод initParmDefault

PHP код:
// Переопределение данного метода нужно только при первом запуске
// когда у клиента еще не было Pack
void initParmDefault()
{
    
super();
    
this.makeQueryRun();

6) Перекрываешь метод Pack

PHP код:
public container pack()
{
   return [
#CurrentVersion, #CurrentList, queryRunMySample.query().pack()] + [super()];

7) Перекрываешь метод UnPack

PHP код:
public boolean  unpack(container  packedClass)
{
    
container       _basepackedQuery;
    
boolean         _ret;
    
Integer         _version    conpeek(packedClass,1);
    ;

    switch (
_version)
    {
        case 
#CurrentVersion:
            
[_version#CurrentList, packedQuery, _base] = packedClass;
            
if (queryIsPackedOk(packedQuery))
            {
               
queryMySample = new Query(packedQuery);
            }
            
this.makeQueryRun();
            
_ret super(_base);
            break;
        default:
            
_ret false;
    }
    return 
_ret;

Здесь queryIsPackedOk() - это метод класса Global. Вообще-то, он стандартный, но если его нет, то вот его код

PHP код:
/*MAN
Method to test a packed queryrun container is legal.
*/
static boolean queryIsPackedOk(PackedQueryRun packed)
{
    return 
sysQuery::isPackedOk(packed);

AXAPTA 2.5 SP3