GGCE Server issueshttps://gitlab.croptrust.org/grin-global/grin-global-server/-/issues2023-11-15T19:40:09+01:00https://gitlab.croptrust.org/grin-global/grin-global-server/-/issues/428Importing images from GG2023-11-15T19:40:09+01:00Matija ObrezaImporting images from GGGGCE's file repository does not expose attachments folder directly. Access to attachment bytes is controlled by the API that enforces permissions checks. This is a significant difference to GG, where attachments sit in a publicly readabl...GGCE's file repository does not expose attachments folder directly. Access to attachment bytes is controlled by the API that enforces permissions checks. This is a significant difference to GG, where attachments sit in a publicly readable location.
grin-global/support#302 requests for migration of image and document data from legacy GG to GGCE:
> We currently have images and PDF files loaded in our standard GG DBs. We have migrated our DBs to GGCE for testing but our attachments are not showing.
## GG documentation about "Locations of Attachment Files"
[1](http://www.grin-global.org/docs/gg_inventory_attachment_wizard.pdf) Each organization running GRIN-Global will have its own unique file server where the image and
document files are stored. The GG administrator can assist with deleting the files if necessary.
The following information is intended primarily for Administrators. The full directory path breaks down into several parts:
Example: `C:\inetpub\wwwroot\gringlobal\uploads\images`
[2](http://www.grin-global.org/docs/gg_attachment_wizard.pdf) further says that a Method attachment would be located at `https://npgsweb.ars-grin.gov/gringlobal/uploads/images/` for `method_attach/RYE.AGRON.ABERDEEN.16/img_jca.JPG`.
**NOTE:** GG always puts the images in the `uploads\images` directory under the GG site install directory. (You couldn't change that without altering the MT code and rebuilding.)
## Links
`..._attach` tables can also contain links (URLs). These have have `category_code = 'LINK'`, while uploaded files use `DOCUMENT` and `IMAGE`.
# Migrating attachments
Two mechanisms for migrating attachments are possible: (a) providing a base **URL pointing to the GG server *http...uploads/images* folder** and (b) providing a copy of the `C:\inetpub\wwwroot\gringlobal\uploads\images` folder to GGCE.
In both cases, GGCE Administrator must provide the base `path` to this location, either in a form of a URL `https://..../uploads/images` or filesystem path `/path/to/uploads/images`.
## Downloading bytes from GG website
If GG server is accessible, providing the URL is the more convenient option as there's no need to back up, transfer and make the folder accessible to GGCE.
The Administrator specifies the **base path** `https://npgsweb.ars-grin.gov/gringlobal/uploads/images/` where attachments are hosted.
GGCE scans the `..._attach` tables and downloads attachment bytes from the remote server for import into the file repository.
## Migrating bytes from a folder
When dealing with a large number of attachments, then providing direct access to the `uploads/images` folder will be the faster option as there is no HTTP overhead and the bytes are directly accessible for importing.
The backup is extracted on the host server and made available to GGCE API as a **docker volume**, for example with `-v ./ggimages:/migration/images`. This makes the folder available to GGCE on `/migration/images`.
The Administrator then specifies `/migration/images` as the **base path** and GGCE scans the `..._attach` tables and looks for attachment bytes in this folder for import into the file repository.
# Ingesting bytes into GGCE file repository
GGCE server provides a form where the Administrator can:
1. Selects one of the `..._attach` tables from a dropdown
2. Provides **base path** to attachment data (either URL or filesystem path)
3. Specifies **maximum number of errors** that GGCE will tolerate before stopping the process
- Start with `0` to force GGCE to stop immediately
- Increase to `100`
- Any value `< 0` instructs GGCE to continue migration regardless of errors
GGCE server then:
1. Scans the selected `..._attach` table `where category_code != 'LINK' AND repository_file_id IS NULL`
1. If `attach.virtual_path` is a valid HTTP URL, then skip the record -- links stay links.
2. Construct a path to each attachment `basepath + attach.virtual_path`
3. Replace all `\` with `/` in `virtual_path`, replace `//` with `/`
4. Get the bytes (either with a HTTP request or by opening the file)
5. If bytes are found, add them to the file repository and populate `file_repository_id` of the attachment record in the database
6. If bytes are not found, log the problem and continue until a **maximum number of errors** is reached.
### Sample data from `accession_inv_attach`
|accession_inv_attach_id|inventory_id|virtual_path|thumbnail_virtual_path|GG URL|
|--|--|--|--|--|
|22155|43694|AIA/Zea/14/6114/SH18-797_DIM.pdf|AIA/Zea/14/6114/SH18-797_DIM_thumbnail.pdf|`https://mgb.cimmyt.org/gringlobal/uploads/images/AIA/Zea/14/6114/SH18-797_DIM.pdf`|
|12373|6114|AIA/Zea/14/6114/CIMMYTMA 6118 - Reference Inventory.jpg|AIA/Zea/14/6114/CIMMYTMA 6118 - Reference Inventory_thumbnail.jpg|`https://mgb.cimmyt.org/gringlobal/uploads/images/AIA/Zea/14/6114/CIMMYTMA%206118%20-%20Reference%20Inventory.jpg`|
The base URL for `accession_inv_attach` for https://mgb.cimmyt.org is `https://mgb.cimmyt.org/gringlobal/uploads/images`2023.8Matija ObrezaMatija Obrezahttps://gitlab.croptrust.org/grin-global/grin-global-server/-/issues/427Genesys upload error2023-10-23T15:50:39+02:00Antonio RiveraGenesys upload errorWhen trying to upload accessions from one of our collections we got the following error:
`Upload operation was stopped due to many errors while uploading accessions to Genesys.`
![image](/uploads/12b808b00264226cdb7e1cb37dd29512/image....When trying to upload accessions from one of our collections we got the following error:
`Upload operation was stopped due to many errors while uploading accessions to Genesys.`
![image](/uploads/12b808b00264226cdb7e1cb37dd29512/image.png)
For each item in the **operationErrorsarray** we got the following error:
`could not execute batch; SQL [delete from accession_collect where id=? and version=?]; constraint [null]; nested exception is org.hibernate.exception.ConstraintViolationException: could not execute batch\ncould not execute batch\n(conn=965177) Cannot delete or update a parent row: a foreign key constraint fails (`sandbox`.`accession_collect_name`, CONSTRAINT `FK_g6h5uuvq16105ljx8r1jjxojr` FOREIGN KEY (`collectId`) REFERENCES `accession_collect` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION)\n(conn=965177) Cannot delete or update a parent row: a foreign key constraint fails (`sandbox`.`accession_collect_name`, CONSTRAINT `FK_g6h5uuvq16105ljx8r1jjxojr` FOREIGN KEY (`collectId`) REFERENCES `accession_collect` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION)`
Request sample: [request.json](/uploads/e81c5007c993ff72d1f8decfcb8386bf/request.json)
Last Server Response: [output.json](/uploads/f3af951c5785377d376c09c0d87c56a3/output.json)Matija ObrezaMatija Obrezahttps://gitlab.croptrust.org/grin-global/grin-global-server/-/issues/426Initial seed viability2023-10-07T08:07:55+02:00Matija ObrezaInitial seed viabilityWhen a viability test is conducted within 1 (2?) years of seed harvest, then it is considered to represent the **initial seed viability**. The initial seed viability records how viable seed was **before** it entered conservation.
## See...When a viability test is conducted within 1 (2?) years of seed harvest, then it is considered to represent the **initial seed viability**. The initial seed viability records how viable seed was **before** it entered conservation.
## SeedInventoryExtra
New fields `initialViability`, `initialViabilityDate` and `initialViabilityDateCode` in `SeedInventoryExtra` to allow genebanks to store the initial viability.
These values should be propagated to inventories that are split from the source inventory, but must not be copied when there is a **new generation** of the inventory (`inventory.generation != inventory.parentInventory.generation`).
## UI updates
UI needs updating so that when these values exist, they are automatically populated in the form when creating a new inventory.
The new columns `initialViability`, `initialViabilityDate` and `initialViabilityDateCode` need to be added to `InventoryTableConfig`.
## Configuration
`INITIAL_VIABILITY_MAX_DAYS` defaults to `365` days.2023.7Matija ObrezaMatija Obrezahttps://gitlab.croptrust.org/grin-global/grin-global-server/-/issues/425SOAP page size2023-10-01T12:47:09+02:00Matija ObrezaSOAP page sizeCurator Tool and the corresponding SOAP `getData` endpoint use a very specific pagination implementation: The CT prepares the `pkeyCollection` list of inputs and it is this list that is sliced into pages using `ux_numericupdownQueryPageS...Curator Tool and the corresponding SOAP `getData` endpoint use a very specific pagination implementation: The CT prepares the `pkeyCollection` list of inputs and it is this list that is sliced into pages using `ux_numericupdownQueryPageSize` setting. Because the `pkeys` are *resolved* (from accession_id via inventory_id via ...) the pagination of `pkeys` has little control over how may rows the server will return after resolving the dataview.
The CT then requests at most `ux_numericupdownMaxRowsReturned` rows for the sliced `pkey`, but this is also the limit when the CT will stop loading data pages once this number is reached.
CT never requests data pages beyond the first page and it doesn't really paginate -- the page number is fixed to `0` in `GrinGlobalClient.cs#L1788`:
```csharp
DataSet pagedDataSet = _sharedUtils.GetWebServiceData(dataviewName, pkeyCollection, 0, Convert.ToInt32(ux_numericupdownMaxRowsReturned.Value));
```
To support this behavior, the GGCE limit of number of rows to return must be increased from `100,000` to `500,000` -- but such queries then require a lot more ram for GGCE as the response is not streamed, but built in memory before serialization to XML.2023.7Matija ObrezaMatija Obrezahttps://gitlab.croptrust.org/grin-global/grin-global-server/-/issues/424Error with the time zone of the GGCE and the server.2023-10-23T20:55:28+02:00James AriasError with the time zone of the GGCE and the server.Good morning @mobreza
We are having a problem with the time zone between the docker and server, the docker is not taking the server's time zone.
Regards
James AriasGood morning @mobreza
We are having a problem with the time zone between the docker and server, the docker is not taking the server's time zone.
Regards
James AriasMatija ObrezaMatija Obrezahttps://gitlab.croptrust.org/grin-global/grin-global-server/-/issues/423Storage type in IMP2023-09-20T13:20:11+02:00Matija ObrezaStorage type in IMPEach Inventory has an *inventory maintenance policy*. The policy determines how the inventory is managed. We would like to include in the `IMP` the information about the **type of germplasm storage**. This is directly linked to `STORAGE`...Each Inventory has an *inventory maintenance policy*. The policy determines how the inventory is managed. We would like to include in the `IMP` the information about the **type of germplasm storage**. This is directly linked to `STORAGE` in MCPD standard.
## IMP with `storageTypeCode`
Add a new optional (null) field `@CodeValue(groupName="STORAGE_TYPE") private String storageTypeCode;` to `InventoryMaintPolicy` and define the code value group in `CommunityCodeValues`:
```java
public static final String STORAGE_TYPE = "STORAGE_TYPE";
public static final CodeValueDef STORAGE_TYPE_TEMPORARY = new CodeValueDef(STORAGE_TYPE, "TEMP", "Temporary", "Temporary storage");
public static final CodeValueDef STORAGE_TYPE_SEED_LTS = new CodeValueDef(STORAGE_TYPE, "SDLTS", "Seed LTS", "Long-term seed collection");
public static final CodeValueDef STORAGE_TYPE_SEED_MTS = new CodeValueDef(STORAGE_TYPE, "SDMTS", "Seed MTS", "Medium-term seed collection");
public static final CodeValueDef STORAGE_TYPE_SEED_ACTIVE = new CodeValueDef(STORAGE_TYPE, "SDACT", "Seed Active", "Active seed collection");
public static final CodeValueDef STORAGE_TYPE_FIELD = new CodeValueDef(STORAGE_TYPE, "FIELD", "Field", "Field collection");
public static final CodeValueDef STORAGE_TYPE_IV_LTS = new CodeValueDef(STORAGE_TYPE, "IVLTS", "Invitro LTS", "Long-term invitro collection");
public static final CodeValueDef STORAGE_TYPE_IV_MTS = new CodeValueDef(STORAGE_TYPE, "IVMTS", "Invitro MTS", "Medium-term invitro collection");
public static final CodeValueDef STORAGE_TYPE_CRYO = new CodeValueDef(STORAGE_TYPE, "CRYO", "Cryo", "Cryopreserved collection");
```
## MCPD
Update the calculation of MCPD `storage` field to use `storageTypeCode` (using the code value translation in the MCPD language). This new calculation needs to be reflected in `AccessionMCPD#storage` field.2023.7Artem HrybeniukArtem Hrybeniukhttps://gitlab.croptrust.org/grin-global/grin-global-server/-/issues/422MCPD with CURATION2023-09-20T09:42:53+02:00Matija ObrezaMCPD with CURATIONPlease update the `AccessionMCPD` and add `String curationType`. Allowed values are `FULL`, `PARTIAL`, `ARCHIVED` and `HISTORICAL` as implemented in genesys-pgr/genesys-server!793.
Update the generation of `AccessionMCPD` and populate t...Please update the `AccessionMCPD` and add `String curationType`. Allowed values are `FULL`, `PARTIAL`, `ARCHIVED` and `HISTORICAL` as implemented in genesys-pgr/genesys-server!793.
Update the generation of `AccessionMCPD` and populate the field using `Accession#curationTypeCode` (using the code value translations to the MCPD language).
Update uploading of this descriptor to Genesys.2023.7Artem HrybeniukArtem Hrybeniukhttps://gitlab.croptrust.org/grin-global/grin-global-server/-/issues/421Error starting the ggce-api. accession_inv_group_attach table does not exists2023-10-23T15:59:15+02:00Juan Carlos Alarcon MaldonadoError starting the ggce-api. accession_inv_group_attach table does not existsThe **ggce-api** sends a Migration database exception in the starting phase, looks like the table **accession_inv_group_attach** does not exist:
```
14:40:21,319 main WARN ApplicationConfig:66 - Starting GGCE 2023.4 "UNKNOWN" @3a3e5b2d...The **ggce-api** sends a Migration database exception in the starting phase, looks like the table **accession_inv_group_attach** does not exist:
```
14:40:21,319 main WARN ApplicationConfig:66 - Starting GGCE 2023.4 "UNKNOWN" @3a3e5b2de2d571effe48ff673770b8822aa37b37
14:40:22,271 main WARN GMTStringToDateConverter:20 - Current time in SOAP format: 2023-09-07T14:40:22.0000270Z
14:40:22,317 main WARN EhCacheConfig:79 - Application cache: JCache with ehCache
Running Changeset: classpath:liquibase/liquibase-changeLog.yml::1593672290545-1::mborodenko (generated)
14:40:26,484 main WARN AnnotationConfigWebApplicationContext:591 - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'databaseMigration' defined in org.gringlobal.application.config.DatabaseConfig: Invocation of init method failed; nested exception is liquibase.exception.LiquibaseException: liquibase.exception.MigrationFailedException: Migration failed for changeset classpath:liquibase/liquibase-changeLog.yml::1593672290545-1::mborodenko (generated):
Reason: liquibase.exception.DatabaseException: Cannot find the object "accession_inv_group_attach" because it does not exist or you do not have permissions. [Failed SQL: (4902) ALTER TABLE accession_inv_group_attach ADD repository_file_id bigint]
14:40:26,490 main ERROR ContextLoader:299 - Context initialization failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'databaseMigration' defined in org.gringlobal.application.config.DatabaseConfig: Invocation of init method failed; nested exception is liquibase.exception.LiquibaseException: liquibase.exception.MigrationFailedException: Migration failed for changeset classpath:liquibase/liquibase-changeLog.yml::1593672290545-1::mborodenko (generated):
Reason: liquibase.exception.DatabaseException: Cannot find the object "accession_inv_group_attach" because it does not exist or you do not have permissions. [Failed SQL: (4902) ALTER TABLE accession_inv_group_attach ADD repository_file_id bigint]
```
Here is the log file:
[ggce-ggce-api-1-0709.log](/uploads/7b1749acdd646d7f54695f81fcfbeb12/ggce-ggce-api-1-0709.log)Matija ObrezaMatija Obrezahttps://gitlab.croptrust.org/grin-global/grin-global-server/-/issues/420app-blocks@52023-09-07T17:56:59+02:00Matija Obrezaapp-blocks@5Update models and filters for `app-blocks@5.0`.
Replace use of `org.genesys.blocks.model.filters.InstantFilter`, `DateFilter` with the new `TemporalFilter`.Update models and filters for `app-blocks@5.0`.
Replace use of `org.genesys.blocks.model.filters.InstantFilter`, `DateFilter` with the new `TemporalFilter`.2023.7Artem HrybeniukArtem Hrybeniukhttps://gitlab.croptrust.org/grin-global/grin-global-server/-/issues/419Duplicate key exception (1658154335099-2)2023-09-01T05:15:42+02:00Antonio RiveraDuplicate key exception (1658154335099-2)Recently, we have tried to perform a new installation with our more recent database
In the installation process we have been having the following exception:
```
Invocation of init method failed; nested exception is liquibase.exception...Recently, we have tried to perform a new installation with our more recent database
In the installation process we have been having the following exception:
```
Invocation of init method failed; nested exception is liquibase.exception.LiquibaseException: liquibase.exception.MigrationFailedException: Migration failed for changeset classpath:liquibase/liquibase-changeLog.yml::1658154335099-2::ahrybeniuk:
Reason: liquibase.exception.DatabaseException: The CREATE UNIQUE INDEX statement terminated because a duplicate key was found for the object name 'dbo.accession' and the index name 'ndx_uniq_accessionNumber'. The duplicate key value is (<NULL>). [Failed SQL: (1505) CREATE UNIQUE NONCLUSTERED INDEX ndx_uniq_accessionNumber ON accession(accession_number)]
15:59:05,197 main ERROR ContextLoader:313 - Context initialization failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'databaseMigration' defined in org.gringlobal.application.config.DatabaseConfig: Invocation of init method failed; nested exception is liquibase.exception.LiquibaseException: liquibase.exception.MigrationFailedException: Migration failed for changeset classpath:liquibase/liquibase-changeLog.yml::1658154335099-2::ahrybeniuk:
Reason: liquibase.exception.DatabaseException: The CREATE UNIQUE INDEX statement terminated because a duplicate key was found for the object name 'dbo.accession' and the index name 'ndx_uniq_accessionNumber'. The duplicate key value is (<NULL>).
```
We have searched for the error according to the given changeset (1658154335099-2) but it is related to the Inventory table not the Accession table as indicated by the exception.
![image](/uploads/9e00eae35d4dcbca744b12281e58ad61/image.png)
This problem had not occurred in our previous installations and it is present in our two instances: Wheat and Maize (recently updated).
Full exception is here: [1658154335099-2.log](/uploads/bf89fbbff18b16b0e4cdd79b017928b3/1658154335099-2.log)Matija ObrezaMatija Obrezahttps://gitlab.croptrust.org/grin-global/grin-global-server/-/issues/418Default sort order id descending2023-08-04T14:33:20+02:00Matija ObrezaDefault sort order id descendingI want to test out default sorting of pages in descending order -- to show latest entries first.I want to test out default sorting of pages in descending order -- to show latest entries first.2023.6Matija ObrezaMatija Obrezahttps://gitlab.croptrust.org/grin-global/grin-global-server/-/issues/417ITPGRFA GLIS configuration2023-08-07T06:41:27+02:00Matija ObrezaITPGRFA GLIS configurationUpdate `application.properties` and documentation for the new ITPGRFA GLIS URL.
- Test server: https://glis.qa.fao.org (apply to `itpgrfa.glis.basepath=` in `application.properties`)
- Production: https://glis.fao.org
## Rename config ...Update `application.properties` and documentation for the new ITPGRFA GLIS URL.
- Test server: https://glis.qa.fao.org (apply to `itpgrfa.glis.basepath=` in `application.properties`)
- Production: https://glis.fao.org
## Rename config variables
Rename in code and in `xxx.properties`:
- `itpgrfa.glis.smta.basepath` → `itpgrfa.easysmta.basepath`
- `itpgrfa.glis.smta...` → `itpgrfa.easysmta...`2023.6Artem HrybeniukArtem Hrybeniukhttps://gitlab.croptrust.org/grin-global/grin-global-server/-/issues/416OAuth: Grant type check2023-07-24T11:44:18+02:00Matija ObrezaOAuth: Grant type checkI noticed that a client without `authorization_code` grant is able to make use of this grant and have users login to Genesys. This should not be allowed.
Similarly, clients with only `client_credentials` should only be able to authentic...I noticed that a client without `authorization_code` grant is able to make use of this grant and have users login to Genesys. This should not be allowed.
Similarly, clients with only `client_credentials` should only be able to authenticate with that flow, clients without `client_credentials` should be prevented from authenticating as clients.2023.5Artem HrybeniukArtem Hrybeniukhttps://gitlab.croptrust.org/grin-global/grin-global-server/-/issues/415Startup: Ensure each Accession has its system Inventory2023-07-17T05:35:11+02:00Matija ObrezaStartup: Ensure each Accession has its system InventoryIn `InventoryServiceImpl` add a `ensureSystemInventories()` method that we can run in ApplicationStartup and in AdminController.
```java
@Transactional
int ensureSystemInventories() {
var accessionsWithoutSystemInv = jpa.select(/* Conv...In `InventoryServiceImpl` add a `ensureSystemInventories()` method that we can run in ApplicationStartup and in AdminController.
```java
@Transactional
int ensureSystemInventories() {
var accessionsWithoutSystemInv = jpa.select(/* Convert to DSL*/"select a.id from accession a left join a.inventories i where i.formTypeCode='**' group by a having count(i) = 0");
// TODO add them
return accessionsWithoutSystemInv.size();
}
```2023.5Artem HrybeniukArtem Hrybeniukhttps://gitlab.croptrust.org/grin-global/grin-global-server/-/issues/414The system inventory cannot be modified or deleted2023-07-26T08:57:08+02:00Juan Carlos Alarcon MaldonadoThe system inventory cannot be modified or deletedThe system inventory (`form_type_code` = `'**'`) is created by the system when one accession is created, so, the system inventory record cannot be modified or deleted by any user(including the administrator) or the APIs. The update of th...The system inventory (`form_type_code` = `'**'`) is created by the system when one accession is created, so, the system inventory record cannot be modified or deleted by any user(including the administrator) or the APIs. The update of the system inventory when the accession_number_part1, part_2, and part3 are modified must continue working.
![image](/uploads/b9f4885615bf16d7b4374757f0f9e802/image.png)
a message when the user presses the `Save` button is ok.
A constraint for ensuring that one accession must have only one system inventory could help to avoid this problem.2023.5Artem HrybeniukArtem Hrybeniukhttps://gitlab.croptrust.org/grin-global/grin-global-server/-/issues/413Deep QueryDSL2023-07-03T16:00:50+02:00Matija ObrezaDeep QueryDSLWe are getting occasional NPE in our filters because QueryDSL provides static nesting only two levels deep. This affects queries for `inventoryAction.inventory.accession.taxonomySpecies.taxonomyGenus...`.We are getting occasional NPE in our filters because QueryDSL provides static nesting only two levels deep. This affects queries for `inventoryAction.inventory.accession.taxonomySpecies.taxonomyGenus...`.2023.4Matija ObrezaMatija Obrezahttps://gitlab.croptrust.org/grin-global/grin-global-server/-/issues/412DTO2023-09-05T06:37:43+02:00Matija ObrezaDTOThis issue is to test the performance and feasibility of using DTOs instead of entity classes in API.This issue is to test the performance and feasibility of using DTOs instead of entity classes in API.2023.6Artem HrybeniukArtem Hrybeniukhttps://gitlab.croptrust.org/grin-global/grin-global-server/-/issues/411Genesys: ACCEURL not included2023-07-04T08:38:10+02:00Matija ObrezaGenesys: ACCEURL not includedGGCE does not send `ACCEURL` to Genesys.
Thanks @achan.GGCE does not send `ACCEURL` to Genesys.
Thanks @achan.2023.4Matija ObrezaMatija Obrezahttps://gitlab.croptrust.org/grin-global/grin-global-server/-/issues/409Configurable page size for API responses2023-06-23T10:41:30+02:00Matija ObrezaConfigurable page size for API responsesThe API uses fixed maximum and default page sizes set in `ApiBaseController`:
- max allowed page size: 200
- default size: 50 (if not specified in the request)The API uses fixed maximum and default page sizes set in `ApiBaseController`:
- max allowed page size: 200
- default size: 50 (if not specified in the request)2023.4Matija ObrezaMatija Obrezahttps://gitlab.croptrust.org/grin-global/grin-global-server/-/issues/408error in mapping accessions thru requests from Genesys2023-06-27T13:41:43+02:00Lilibeth Sisonerror in mapping accessions thru requests from Genesys@mobreza this function throws null pointer exception
![image](/uploads/434785acf952cb530d6b3e8a4402b09a/image.png)@mobreza this function throws null pointer exception
![image](/uploads/434785acf952cb530d6b3e8a4402b09a/image.png)2023.4Artem HrybeniukArtem Hrybeniuk