Difference between revisions of "API v1.0"

From TempusServa wiki
Jump to navigation Jump to search
old>Tvi
old>Tvi
Line 89: Line 89:
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).
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).


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

Revision as of 15:54, 8 March 2021

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<3; 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).

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 value = recordsToCopy.getRecordValue( i, fieldsTemplate.get(fi));
            instance.setValue( fieldsInstance.get(fi), value );
        }
        instance.setValueInteger( instanceKeyToParent, c.DataID );
        if( ! Parser.isEmpty(instanceKeyToTemplate) )
        instance.setValueInteger( instanceKeyToTemplate, recordsToCopy.getReference(i) );
        
        instance.persistChanges();
    }
}
catch(Exception e) {
    e.printStackTrace();
}
finally {
    session.close();
}