Difference between revisions of "API v1.0"

From TempusServa wiki
Jump to navigation Jump to search
old>Admin
m (Admin moved page API1.0 to API v1.0 without leaving a redirect)
(Added limit)
 
(18 intermediate revisions by 4 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.addWhereInList("PARENTITEMS", arrayListOfDataID);
</syntaxhighlight>


Note that lookup values etc. will be translated silently.
Likewise operators can be added
 
<syntaxhighlight lang="java">
...
myQuery.addWhereOR();
...


Finally execute the query and return the results
...
myQuery.addWhereAND();
...
</syntaxhighlight>


  SolutionQueryResultSet records = myQuery.executeQuery();
Note that lookup values etc. will be translated silently.


== Retrieve data ==
<syntaxhighlight lang="java">
Data are extracted from the query resultset using a relative reference to the record number
myQuery.setSortOrder("INCOME", true);
</syntaxhighlight>


  for( int i=0; i<3; i++ ) {
Order records by income in descending order (true).
    String text = "Value nr " + i " = " + '''resultSet.getRecordValue( i, "MYVALUE" );'''
    System.out.println( text ); 
  }


Retriever methods exist for deifferent datatypes
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


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


  public Hashtable <String,String> getRecordValueList( int recordNr )
== Retrieve data ==
Data are extracted from the query resultset using a relative reference to the record number


  public String getRecordValue( int recordNr, String fieldName )
<syntaxhighlight lang="java">
for( int i=0; i<resultSet.size(); i++ ) {
  String text = "Value nr " + i " = " + '''resultSet.getRecordValue( i, "MYVALUE" );'''
  System.out.println( text )
}
</syntaxhighlight>


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