ITQuants blog

Sophis Risque: how to use LoadGeneralElement on a CSREditList declared in the transaction dialog?

Dec 6

Written by:
12/6/2013 1:14 PM  RssIcon

When trying to use LoadGeneralElement with a CSREditList declared in the transaction dialog, without mapping it to an Oracle table, it does not work. The method will return true when getting some value of one cell, but the output address won't be filled, even if GetGeneralLineCount returns the right number of lines.

Some piece of code has to be added, using the internal callbacks.

In fact, it works fine when the CSREditList is mapped to an Oracle table. The only way to use it is then to declare a fictive Oracle table in the constructor, with fictive fielsds for the columns. In order to disable the queries and insertions on the database, the internal methods CSREditList::WriteQuery and CSREditList::ReadQuery have to be overriden. These methods expect a short returned value corresponding to the CSRSqlQuery::Queryxxx returning code. It means that a successfull call of the method should return 0.

In conlusion, the following code will give the expected behaviour:

class CMyList : public sophis::gui::CSREditList
{
public
    CMyList(sophis::gui::CSRFitDialog   *dialog, 
                    int             ERId_List, 
                    const char      *tableName="INVALID_TABLE",
                    int             displayedLineCount=9999,
                    bool            editable = false);
  
// internal methods
    virtual short   ReadQuery(char* result, _STL::vector& v) 
    
        return 0; 
    }
    virtual short   WriteQuery(char * resultat, _STL::vector& v) 
    
        return 0; 
    }
};
  
CMyList::CMyList(CSRFitDialog *dialog, int ERId_List,const char *tableName,int  displayedLineCount, bool editable )
    : CSREditList(dialog,ERId_List,tableName,displayedLineCount)
{
    SSColumn* col;
    fColumnCount        = 1;
    fColumns            = new SSColumn[fColumnCount];
  
    col = &fColumns[0];
    col->fElement       = new CSREditText(this,0,40,0,"FIELD0");
    col->fColumnWidth   = 90;
    col->fAlignmentType = aLeft;
    col->fColumnName    = "MyColumn";
  
    SetDynamicSize(true);
}
  
...
// somewhere in the constructor of the CSRTransactionDialog inherited class
  
    fElementList[i++] = new CMyList(this, IDC_MYLIST-ID_ITEM_SHIFT);
....
  
  
void CMyAction::NotifyCreated(const CSRTransaction &transaction, tools::CSREventVector & message, long event_id)
  
{
    transaction.LoadUserElement();
  
    char _value[41];
    *_usi = 0;
    int _noline = 0;
    int _nocol = 0;
    int _nbline = transaction.GetGeneralLineCount(IDC_MYFIELD - ID_ITEM_SHIFT);
    Boolean _res = transaction.LoadGeneralElement(IDC_MYFIELD - ID_ITEM_SHIFT,_noline,_nocol,_value);
}

Tags:
Categories: Sophis

Search blog