API v1.0

From TempusServa wiki
Revision as of 10:58, 4 October 2023 by Kpe (talk | contribs) (→‎Code example)
Jump to navigation Jump to search

Sessions and security

For interacting with Tempus Serva you need a session

Session session = SessionFactory.getSession(this);

All sessions need to be terminated after use (releasing DB connections etc.)

session.close();

Constructing queryies

First of create a query object

SolutionQuery myQuery = session.getSolutionQuery( "mynewsolution" );

A query is built much like an SQL query by appending different fields to be SELECT'ed

myQuery.addSelectField("MYNUMBER");

Additionally WHERE components are added

myQuery.addWhereCriterion("StatusID", "In progress");
myQuery.addWhereCriterion("INCOME", QueryPart.MORE, "22");
myQuery.addWhereInList("PARENTITEMS", arrayListOfDataID);

Likewise operators can be added

...
myQuery.addWhereOR();
...

...
myQuery.addWhereAND();
...

Note that lookup values etc. will be translated silently.

myQuery.setSortOrder("INCOME", true);

Order records by income in descending order (true).

Finally execute the query and return the results

SolutionQueryResultSet records = myQuery.executeQuery();

Retrieve data

Data are extracted from the query resultset using a relative reference to the record number

for( int i=0; i<resultSet.size(); i++ ) {
   String text = "Value nr " + i " = " + '''resultSet.getRecordValue( i, "MYVALUE" );'''
   System.out.println( text );  
}

Retriever methods exist for different datatypes

public int getReference( int recordNr )
public Hashtable <String,String> getRecordValueList( int recordNr )
public String getRecordValue( int recordNr, String fieldName )
public int getRecordValueInteger( int recordNr, String fieldName )
private SolutionRecord getRecord(int recordNr, boolean isWrite)

Change / create data

 AWAITING REVIEW

Code example

The following example shows how data is retrieved from af collection of templates and used to create a collection of records (with values copied from the template).

String thisKeyToParentTemplate = "VALGTSKABELON"; //Entity
String templateSolutionName = "tasktemplate"; //Entity
ArrayList fieldsTemplate = new ArrayList(String [] {"TASK","DEADLINE","RESPONSIBLE"}); //list of fields
String templateKeyToParentTemplate = "SKABELON"; //Entity
String instanceSolutionName = "taskinstance";
String instanceKeyToParent = "LIST";

Now to the code ...

int parentTemplateDataID = Parser.getInteger( c.fields.getElementByFieldName(thisKeyToParentTemplate).FieldValue );
        
Session session = SessionFactory.getSession(this);
try {
    //Get data
    SolutionQuery opsaetning = session.getSolutionQuery(templateSolutionName);
    for(int i=0; i<fieldsTemplate.size(); i++ )
        opsaetning.addSelectField(fieldsTemplate.get(i));
    opsaetning.addWhereCriterion(templateKeyToParentTemplate, parentTemplateDataID);
    SolutionQueryResultSet recordsToCopy = opsaetning.executeQuery();
    
    int recordCount = recordsToCopy.size();
    for( int i=0; i<recordCount; i++ ) {
        SolutionRecordNew instance = session.getSolutionRecordNew(instanceSolutionName);
        
        for(int fi=0; fi<fieldsTemplate.size(); fi++ ) {
            String fieldNameToCopy = fieldsTemplate.get(fi); 
            String value = recordsToCopy.getRecordValue( i, fieldNameToCopy );
            instance.setValue( fieldNameToCopy, value );
        }
        instance.setValueInteger( instanceKeyToParent, c.DataID );
        if( ! Parser.isEmpty(instanceKeyToTemplate) )
        instance.setValueInteger( instanceKeyToTemplate, recordsToCopy.getReference(i) );
        
        instance.persistChanges();
    }
}
catch(Exception e) {
    e.printStackTrace();
}
catch (TsCloseObjectRequired ex) {}
finally {
    session.close();
}