Skip to content

Commit

Permalink
Merge pull request #65 from infor-cloud/databaseOperationsUpdate
Browse files Browse the repository at this point in the history
Removed 'def' from examples, using correct types instead
  • Loading branch information
filiphakansson1 authored Nov 28, 2023
2 parents 96416b7 + 0a4d976 commit 9e88341
Show file tree
Hide file tree
Showing 2 changed files with 105 additions and 87 deletions.
172 changes: 94 additions & 78 deletions docs/documentation/api-specification/database-api.md
Original file line number Diff line number Diff line change
Expand Up @@ -59,17 +59,15 @@ The example below illustrates how to create and set a record.

Example:
```groovy
public void createTableRecord() {
void createTableRecord() {
DBAction query = database.table(*TABLE*)
.index("00")
.selection(*FIELD1*, *FIELD2*, *FIELD3*)
.build();
DBContainer container = database.createContainer()
container.set(*FIELD1*, *DATA*)
DBContainer container = database.createContainer();
container.set(*FIELD*, *DATA*)
query.insert(container)
}
```
**Note:** the required parameters for a valid DBAction, or query, are 'table' and 'selection'. E.g. 'DBAction query = database.table("MITMAS").selection("MMCONO")'

Or to update the already existing record.
Example:
Expand All @@ -90,17 +88,24 @@ Example:
Read an item with the index 00 keys

```groovy
int currentCompany = (Integer)program.getLDAZD().CONO
DBAction query = database.table("MITMAS").index("00").selection("MMCONO", "MMITNO", "MMITDS", "MMSTAT").build()
DBContainer container = query.getContainer()
container.set("MMCONO", currentCompany)
container.set("MMITNO", "SAMPLE-ITEM")
if (query.read(container)) {
String description = container.get("MMITDS")
String status = container.get("MMSTAT")
void readRecord() {
int currentCompany = (Integer)program.getLDAZD().CONO;
DBAction query = database.table("MITMAS")
.index("00")
.selection("MMITDS", "MMSTAT")
.build();
DBContainer container = query.getContainer();
container.set("MMCONO", currentCompany);
container.set("MMITNO", "SAMPLE-ITEM");
if (query.read(container)) {
String description = container.get("MMITDS");
String status = container.get("MMSTAT");
}
}
```

**Note** selection is only needed for read operations. Furthermore, only the fields being read(container.get fields) are needed in the selection. As the example above suggests.

### Read multiple records
To read multiple records a database action should be defined along with a `Closure<?>` that defines how each read record
will be processed/used.
Expand All @@ -110,18 +115,21 @@ Example:
Read all items with status 20 in a specific company and perform an action on each found record

```groovy
def handleReleasedItems() {
int currentCompany = (Integer)program.getLDAZD().CONO
DBAction query = database.table("MITMAS").index("20").selection("MMCONO", "MMITNO", "MMITDS", "MMSTAT").build()
DBContainer container = query.getContainer()
container.set("MMCONO", currentCompany)
container.set("MMSTAT", "20")
query.readAll(container, 2, releasedItemProcessor)
void handleReleasedItems() {
int currentCompany = (Integer)program.getLDAZD().CONO;
DBAction query = database.table("MITMAS")
.index("20")
.selection("MMITDS", "MMSTAT")
.build();
DBContainer container = query.getContainer();
container.set("MMCONO", currentCompany);
container.set("MMSTAT", "20");
query.readAll(container, 2, releasedItemProcessor);
}
Closure<?> releasedItemProcessor = { DBContainer container ->
String description = container.get("MMITDS")
String status = container.get("MMSTAT")
String description = container.get("MMITDS");
String status = container.get("MMSTAT");
// Use this found record as intended
}
```
Expand All @@ -137,18 +145,22 @@ to 2.

```groovy
public void main() {
ExpressionFactory expression = database.getExpressionFactory("TABLE")
expression = expression.eq("FIELD", "DATA").and(expression.gt("MMCFI1", "2"))
DBAction query = database.table("MITMAS").index("20").matching(expression).selection("MMCONO", "MMITNO", "MMITDS", "MMSTAT").build()
DBContainer container = query.getContainer()
container.set("MMCONO", currentCompany)
container.set("MMSTAT", "20")
query.readAll(container, 2, releasedItemProcessor)
ExpressionFactory expression = database.getExpressionFactory("TABLE");
expression = expression.eq("FIELD", "DATA").and(expression.gt("MMCFI1", "2"));
DBAction query = database.table("MITMAS")
.index("20")
.matching(expression)
.selection("MMITDS", "MMSTAT")
.build();
DBContainer container = query.getContainer();
container.set("MMCONO", currentCompany);
container.set("MMSTAT", "20");
query.readAll(container, 2, releasedItemProcessor);
}
Closure<?> releasedItemProcessor = { DBContainer container ->
String description = container.get("MMITDS")
String status = container.get("MMSTAT")
String description = container.get("MMITDS");
String status = container.get("MMSTAT");
// Use this found record as intended
}
```
Expand All @@ -159,29 +171,27 @@ Read two fields from table record, using three other fields in the same record.

```groovy
public void main() {
inKEY1 = mi.inData.get("KEY1") == null? "": mi.inData.get("KEY1").trim();
inKEY2 = mi.inData.get("KEY2") == null? "": mi.inData.get("KEY2").trim();
inKEY2 = mi.inData.get("KEY3") == null? "": mi.inData.get("KEY3").trim();
DBAction query = database.table("TABLE").selection("KEY1",
"KEY2",
"KEY3",
"READFIELD1",
"READFIELD2").build();
DBContainer container = query.getContainer();
container.set("KEY1",inKEY1);
container.set("KEY2",inKEY2);
container.set("KEY3",inKEY3);
Closure<?> readCallback = { DBContainer readResult ->
if (mi.hasRemainingRecords()) {
mi.outData.put("outDATA1", readResult.get("READFIELD1").toString())
mi.outData.put("outDATA2", readResult.get("READFIELD2").toString())
mi.write()
}
inKEY1 = mi.inData.get("KEY1") == null? "": mi.inData.get("KEY1").trim();
inKEY2 = mi.inData.get("KEY2") == null? "": mi.inData.get("KEY2").trim();
inKEY2 = mi.inData.get("KEY3") == null? "": mi.inData.get("KEY3").trim();
DBAction query = database.table("TABLE")
.index("00")
.selection("READFIELD1", "READFIELD2")
.build();
DBContainer container = query.getContainer();
container.set("KEY1",inKEY1);
container.set("KEY2",inKEY2);
container.set("KEY3",inKEY3);
Closure<?> readCallback = { DBContainer readResult ->
if (mi.hasRemainingRecords()) {
mi.outData.put("outDATA1", readResult.get("READFIELD1").toString());
mi.outData.put("outDATA2", readResult.get("READFIELD2").toString());
mi.write();
}
query.readAll(container, 3, readCallback)
}
query.readAll(container, 3, readCallback)
}
```

Expand All @@ -192,18 +202,20 @@ Example:

Read item and update status to 90
```groovy
def deprecateItem() {
int currentCompany = (Integer)program.getLDAZD().CONO
DBAction query = database.table("MITMAS").index("00").selection("MMCONO", "MMITNO", "MMITDS", "MMSTAT").build()
DBContainer container = query.getContainer()
container.set("MMCONO", currentCompany)
container.set("MMITNO", "SAMPLE-ITEM")
query.readLock(container, updateCallBack)
void deprecateItem() {
int currentCompany = (Integer)program.getLDAZD().CONO;
DBAction query = database.table("MITMAS")
.index("00")
.build();
DBContainer container = query.getContainer();
container.set("MMCONO", currentCompany);
container.set("MMITNO", "SAMPLE-ITEM");
query.readLock(container, updateCallBack);
}
Closure<?> updateCallBack = { LockedResult lockedResult ->
lockedResult.set("MMSTAT", "90")
lockedResult.update()
lockedResult.set("MMSTAT", "90");
lockedResult.update();
}
```

Expand All @@ -215,18 +227,20 @@ Example:

Read all items in with status 20 in a company and set the status to 90 for then
```groovy
def deprecateItems() {
int currentCompany = (Integer)program.getLDAZD().CONO
DBAction query = database.table("MITMAS").index("20").selection("MMCONO", "MMITNO", "MMITDS", "MMSTAT").build()
DBContainer container = query.getContainer()
container.set("MMCONO", currentCompany)
container.set("MMSTAT", "20")
query.readAllLock(container, 2, updateCallBack)
void deprecateItems() {
int currentCompany = (Integer)program.getLDAZD().CONO;
DBAction query = database.table("MITMAS")
.index("20")
.build();
DBContainer container = query.getContainer();
container.set("MMCONO", currentCompany);
container.set("MMSTAT", "20");
query.readAllLock(container, 2, updateCallBack);
}
Closure<?> updateCallBack = { LockedResult lockedResult ->
lockedResult.set("MMSTAT", "90")
lockedResult.update()
lockedResult.set("MMSTAT", "90");
lockedResult.update();
}
```

Expand All @@ -238,17 +252,19 @@ Example:

Delete item with status 90
```groovy
def deprecateItem() {
int currentCompany = (Integer)program.getLDAZD().CONO
DBAction query = database.table("MITMAS").index("00").selection("MMCONO", "MMITNO", "MMITDS", "MMSTAT").build()
DBContainer container = query.getContainer()
container.set("MMCONO", currentCompany)
container.set("MMITNO", "SAMPLE-ITEM")
query.readLock(container, deleterCallback)
void deprecateItem() {
int currentCompany = (Integer)program.getLDAZD().CONO;
DBAction query = database.table("MITMAS")
.index("00")
.build();
DBContainer container = query.getContainer();
container.set("MMCONO", currentCompany);
container.set("MMITNO", "SAMPLE-ITEM");
query.readLock(container, deleterCallback);
}
Closure<?> deleterCallback = { LockedResult lockedResult ->
lockedResult.delete()
lockedResult.delete();
}
```

Expand Down
20 changes: 11 additions & 9 deletions docs/examples/Templates/DatabaseOperations_Temaplate.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ These templates outline best practices for **C**reate, **R**ead, **U**pdate and
#### Create
Creating, or adding one or several new records to table.
```groovy
def create() {
void create() {
DBAction query = database.table("TABLENAME")
.index("00")
.build();
Expand All @@ -47,10 +47,10 @@ Reading one or several records from table.

##### Read one record
```groovy
def read() {
void read() {
DBAction query = database.table("TABLENAME")
.index("00")
.selection("FIELD1", "FIELD2", "FIELD3", "FIELD4")
.selection("FIELD3", "FIELD4")
.build();
DBContainer container = query.getContainer();
container.set("FIELD1", "DATA1");
Expand All @@ -64,13 +64,14 @@ def read() {
```
##### Read multiple records
```groovy
def multiRead() {
void multiRead() {
DBAction query = database.table("TABLENAME")
.index("00")
.selection("FIELD1", "FIELD2", "FIELD3", "FIELD4")
.selection("FIELD3", "FIELD4")
.build();
DBContainer container = query.getContainer();
container.set("FIELD1", "DATA1");
container.set("FIELD2", "DATA2");
query.readAll(container, NUMBERofRECORDS, callback);
}
Closure<?> callback = { DBContainer container ->
Expand All @@ -81,16 +82,17 @@ Closure<?> callback = { DBContainer container ->
```
##### Read multiple records with filter
```groovy
def filteredMultiRead() {
void filteredMultiRead() {
ExpressionFactory expression = database.getExpressionFactory("TABLENAME");
expression = expression.eq("FIELD3", "DATA3").and(expression.lt("FIELD1", "DATA1"));
DBAction query = database.table("TABLENAME")
.index("00")
.matching(expression)
.selection("FIELD1", "FIELD2", "FIELD3", "FIELD4")
.selection("FIELD3", "FIELD4")
.build();
DBContainer container = query.getContainer();
container.set("FIELD1", "DATA1");
container.set("FIELD2", "DATA2");
query.readAll(container, NUMBERofRECORDS, callback);
}
Closure<?> callback = { DBContainer container ->
Expand All @@ -103,7 +105,7 @@ Closure<?> callback = { DBContainer container ->
#### Update
Update existing record(s) in table
```groovy
def update() {
void update() {
DBAction query = database.table("TABLENAME")
.index("00")
.build();
Expand All @@ -120,7 +122,7 @@ def update() {
#### Delete
Delete record(s) from table
```groovy
def delete() {
void delete() {
DBAction query = database.table("TABLENAME")
.index("00")
.build();
Expand Down

0 comments on commit 9e88341

Please sign in to comment.