Table temporaire à partir d’une non temporaire

Il se peut, que vous ayez besoin un jour de trier une table à partir d’une sélection.

Prenons un exemple pour illustrer mon propos.

Vous avez une forme, prenons SalesTable. Vous faites une multisélection de plusieurs ligne d’en-tête et vous générez un rapport que vous avez créé.
Seulement, dans ce rapport, vous devez trier suivant un champ spécifique.
Or dans votre rapport, ayant ramener la dataSource de la forme SalesTable, vous ne savez trier celle-ci sur le champ requis.
La solution est en fait assez simple : créer une variable SalesTable et la définir comme temporaire et la remplir avec la dataSource et ensuite refaire une sélection sur celle-ci.

Dans le code suivant, je vais vous montrer comment récupéré la dataSource et faire le triage

public class ReportRun extends ObjectRun
{
    FormDataSource      callerDataSource;    
    SalesTable          salesTable;
}
public void init()
{
    if (element.args().dataset() != tableNum(SalesTable))
    {
        throw Error(error::missingRecord(tableId2Pname(tableNum(SalesTable))));
    }
    
    callerDataSource = element.args().record().dataSource();
    
    super();
}
public boolean fetch()
{
    SalesTable salesTableLoc;
    ;
    
    //Définir la table en temporaire
    salesTableLoc.setTmp();
    
    for (salesTable = callerDataSource.getFirst(true)
                    ? callerDataSource.getFirst(true)
                    : callerDataSource;
         salesTable;
         salesTable = callerDataSource.getNext())
    {
        salesTableLoc.data(salesTable.data());
        salesTableLoc.insert();
    }

    while select salesTableLoc order by DlvMode
    {
        element.send(salesTableLoc);
    }
                            
    return true;
}

Il se peut, que vous ayez besoin un jour de trier une table à partir d’une sélection.

Prenons un exemple pour illustrer mon propos.

Vous avez une forme, prenons SalesTable. Vous faites une multisélection de plusieurs ligne d’en-tête et vous générez un rapport que vous avez créé.
Seulement, dans ce rapport, vous devez trier suivant un champ spécifique.
Or dans votre rapport, ayant ramener la dataSource de la forme SalesTable, vous ne savez trier celle-ci sur le champ requis.
La solution est en fait assez simple : créer une variable SalesTable et la définir comme temporaire et la remplir avec la dataSource et ensuite refaire une sélection sur celle-ci.

Dans le code suivant, je vais vous montrer comment récupéré la dataSource et faire le triage

public class ReportRun extends ObjectRun
{
    FormDataSource      callerDataSource;    
    SalesTable          salesTable;
}
public void init()
{
    if (element.args().dataset() != tableNum(SalesTable))
    {
        throw Error(error::missingRecord(tableId2Pname(tableNum(SalesTable))));
    }
    
    callerDataSource = element.args().record().dataSource();
    
    super();
}
public boolean fetch()
{
    SalesTable salesTableLoc;
    ;
    
    //Définir la table en temporaire
    salesTableLoc.setTmp();
    
    for (salesTable = callerDataSource.getFirst(true)
                    ? callerDataSource.getFirst(true)
                    : callerDataSource;
         salesTable;
         salesTable = callerDataSource.getNext())
    {
        salesTableLoc.data(salesTable.data());
        salesTableLoc.insert();
    }

    while select salesTableLoc order by DlvMode
    {
        element.send(salesTableLoc);
    }
                            
    return true;
}