Difference between revisions of "API v1.0"

From TempusServa wiki
Jump to navigation Jump to search
old>Admin
(Added limit)
 
(15 intermediate revisions by 3 users not shown)
Line 4: Line 4:
For interacting with Tempus Serva you need a session
For interacting with Tempus Serva you need a session


  Session session = SessionFactory.getSession(this);
<syntaxhighlight lang="java">
Session session = SessionFactory.getSession(this);
</syntaxhighlight>


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


  session.close();
<syntaxhighlight lang="java">
session.close();
</syntaxhighlight>


== Constructing queryies ==
== Constructing queryies ==
First of create a query object  
First of create a query object  


  SolutionQuery myQuery = session.getSolutionQuery( "mynewsolution" );
<syntaxhighlight lang="java">
SolutionQuery myQuery = session.getSolutionQuery( "mynewsolution" );
</syntaxhighlight>


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


  myQuery.addSelectField("MYNUMBER");
<syntaxhighlight lang="java">
myQuery.addSelectField("MYNUMBER");
</syntaxhighlight>


Additionally WHERE components are added
Additionally WHERE components are added


  myQuery.addWhereCriterion("StatusID", "In progress");
<syntaxhighlight lang="java">
 
myQuery.addWhereCriterion("StatusID", "In progress");
  myQuery.addWhereCriterion("INCOME", QueryPart.MORE, "22");
myQuery.addWhereCriterion("INCOME", QueryPart.MORE, "22");
 
myQuery.addWhereInList("PARENTITEMS", arrayListOfDataID);
  myQuery.addWhereInList("PARENTITEMS", arrayListOfDataID);
</syntaxhighlight>


Likewise operators can be added
Likewise operators can be added


  ...
<syntaxhighlight lang="java">
  myQuery.addWhereOR();
...
  ...
myQuery.addWhereOR();
...


  ...
...
  myQuery.addWhereAND();
myQuery.addWhereAND();
  ...
...
</syntaxhighlight>


Note that lookup values etc. will be translated silently.
Note that lookup values etc. will be translated silently.


  myQuery.setSortOrder("INCOME", true);
<syntaxhighlight lang="java">
myQuery.setSortOrder("INCOME", true);
</syntaxhighlight>


Order records by income in descending order (true).
Order records by income in descending order (true).


Finally execute the query and return the results
By default the API limits solution queries to 100 rows. To increase this:<syntaxhighlight lang="java">
myQuery.setLimit(100000);
</syntaxhighlight>To do pagination use this:<syntaxhighlight lang="java">
myQuery.setLimitAndOffset(100, 100);
</syntaxhighlight>Finally execute the query and return the results


  SolutionQueryResultSet records = myQuery.executeQuery();
<syntaxhighlight lang="java">
SolutionQueryResultSet records = myQuery.executeQuery();
</syntaxhighlight>


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


  for( int i=0; i<3; i++ ) {
<syntaxhighlight lang="java">
    String text = "Value nr " + i " = " + '''resultSet.getRecordValue( i, "MYVALUE" );'''
for( int i=0; i<resultSet.size(); i++ ) {
    System.out.println( text );   
  String text = "Value nr " + i " = " + '''resultSet.getRecordValue( i, "MYVALUE" );'''
  }
  System.out.println( text );   
 
}
Retriever methods exist for deifferent datatypes
</syntaxhighlight>
 
  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 ) 
Retriever methods exist for different datatypes


  private SolutionRecord getRecord(int recordNr, boolean isWrite)
<syntaxhighlight lang="java">
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)
</syntaxhighlight>


== Change / create data ==
== Change / create data ==
Line 75: Line 93:
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">
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";
</syntaxhighlight>
 
Now to the code ...
 
<syntaxhighlight lang="java">
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);
          
          
         Session session = SessionFactory.getSession(this);
         for(int fi=0; fi<fieldsTemplate.size(); fi++ ) {
        try {
            String fieldNameToCopy = fieldsTemplate.get(fi);  
           
             String value = recordsToCopy.getRecordValue( i, fieldNameToCopy );
            //Get data
            instance.setValue( fieldNameToCopy, value );
            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();
         }
         }
        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();
}
</syntaxhighlight>

Latest revision as of 10:21, 22 April 2024

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

By default the API limits solution queries to 100 rows. To increase this:

myQuery.setLimit(100000);

To do pagination use this:

myQuery.setLimitAndOffset(100, 100);

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();
}