Table of Contents |
---|
Overview
mod-gobi receives request from edge-orders and maps the XML received from GOBI to an order format the mod-orders supports.
Currently mod-gobi supports below order types:
- Listed Electronic Monograph
- Listed Electronic serial
- Listed Print Monograph
- Listed Print Serial
- Unlisted Print Monograph
- UnlistedPrint Serial
The fields received from GOBI need to be mapped to proper fields in orders. By default there are few fields supported by each order type and the mapping for each type is listed here:
https://github.com/folio-org/mod-gobi/tree/master/src/main/resources
Methods and fields to translate the specified type
Supported fields
Defined in the https://github.com/folio-org/mod-gobi/blob/master/src/main/resources/mapping.json → properties.field
How to use
Code Block | ||||
---|---|---|---|---|
| ||||
{
"field": "APPROVED",
"dataSource": {
"default": "true",
"translation": "toBoolean",
"translateDefault": true
}
} |
The body of the request could look like below with
- field: one of the defined field from https://github.com/folio-org/mod-gobi/blob/master/src/main/resources/mapping.json → properties.field
- dataSource.default: default value
- datasource.translation: defined and implemented method from https://github.com/folio-org/mod-gobi/blob/master/src/main/resources/mapping.json → properties.dataSource.properties.translation
How to map Vendor Code for libraries with unique and or multiple organization records
If there is NO "from" data source then FOLIO relies on the default value to look up the correct organization to use as a vendor. For the look up to work the default value must match the code of an existing organization in FOLIO that has a status of active and IS a vendor.
If the institution wants to have multiple Vendors used for orders created via the GOBI API. The library must mapped a local data field on the GOBI side to send a selected code that can be used instead of the default. In the example below the configuration expects to get a vendor code from the incoming xml file in the local data 4 field. If there is nothing present in that field FOLIO will fall back on the default value to try and find a valid organization for the incoming orders
Code Block | ||||
---|---|---|---|---|
| ||||
{
"field": "VENDOR",
"dataSource": {
"from": "//LocalData[Description='LocalData4']/Value"
"default": "GOBI",
"translation": "lookupOrganization",
"translateDefault": true
}
} |
Supported methods
Defined in the https://github.com/folio-org/mod-gobi/blob/master/src/main/resources/mapping.json → properties.dataSource.properties.translation
How to use
Update mapping for "Listed Print Monograph" → https://github.com/folio-org/mod-gobi/blob/master/src/main/resources/ListedPrintMonograph.json
Insert mapping configuration in the "mappings" of the https://github.com/folio-org/mod-gobi/blob/master/src/main/resources/ListedPrintMonograph.json
Code Block | ||||
---|---|---|---|---|
| ||||
{
"field": "EXPENSE_CLASS",
"dataSource": {
"from": "//LocalData[Description='LocalData4']/Value",
"translation": "lookupExpenseClassId",
}
}
|
The body of the request could look like below with
- field: one of the defined field from https://github.com/folio-org/mod-gobi/blob/master/src/main/resources/mapping.json → properties.field
- dataSource.from: XPath to the valuse from GOBI order
- datasource.translation: defined and implemented method from https://github.com/folio-org/mod-gobi/blob/master/src/main/resources/mapping.json → properties.dataSource.properties.translation
Customize order mappings
However, there are scenario when the library wants to specify their own mapping or default values for certain fields , instead of those specified in the module.
This can be achieved by specifying a custom mapping in mod-configuration.
Example Request
The body of the request could look like below with
...
Code Block |
---|
curl --request POST 'https://{okapiURL}/configurations/entries' \ --header 'Content-Type: application/json' \ --header 'x-okapi-token: {x-okapi-token}\ --data-raw '{ "module": "GOBI", "configName": "orderMappings", "code": "modulegobi.order.ListedPrintMonograph", "description": "GOBI order mappings", "enabled": true, "value": "{ "module": "GOBI", "configName" : "orderMappings", "code" : "gobi.order.ListedElectronicMonographListedPrintMonograph", "description": "GOBI order mappings", "descriptionenabled": true, "value": "GOBI order mappings", "enabled" : true, "value" : "{\"orderType\":\"ListedElectronicMonograph\",\"mappings\":[{\"field\":\"CURRENCY\",\"dataSource\":{\"from\":{\n \"orderType\": \"ListedPrintMonograph\",\n \"mappings\": [\n {\n \"field\": \"ACQUISITION_METHOD\",\n \"dataSource\": {\n \"default\": \"Purchase At Vendor System\"\n }\n },\n {\n \"field\": \"APPROVED\",\n \"dataSource\": {\n \"default\": \"true\",\n \"translation\": \"toBoolean\",\n \"translateDefault\": true\n }\n },\n {\n \"field\": \"CLAIMED\",\n \"dataSource\": {\n \"default\": \"true\",\n \"translation\": \"toBoolean\",\n \"translateDefault\": true\n }\n },\n {\n \"field\": \"COLLECTION\",\n \"dataSource\": {\n \"default\": \"false\",\n \"translation\": \"toBoolean\",\n \"translateDefault\": true\n }\n },\n {\n \"field\": \"CONTRIBUTOR\",\n \"dataSource\": {\n \"from\": \"//datafield[@tag='100']/*\",\n \"combinator\": \"concat\"\n }\n },\n {\n \"field\": \"CONTRIBUTOR_NAME_TYPE\",\n \"dataSource\": {\n \"default\": \"Personal name\",\n \"translation\": \"lookupContributorNameTypeId\",\n \"translateDefault\": true\n }\n },\n {\n \"field\": \"CURRENCY\",\n \"dataSource\": {\n \"from\": \"//ListPrice/Currency\",\n \"default\": \"USD\"\n }\n },\n {\n \"field\": \"DATE_ORDERED\",\n \"dataSource\": {\n \"from\": \"//OrderPlaced\",\n \"translation\": \"toDate\"\n }\n },\n {\n \"field\": \"TITLEEXPENSE_CLASS\",\n \"dataSource\": {\n \"from\": \"//datafieldLocalData[@tag='\''245'\'']/*\",\"combinator\":\"concat\"}},{Description='LocalData4']/Value\",\n \"translation\": \"lookupExpenseClassId\"\n }\n },\n {\n \"field\": \"FUND_ID\",\n \"dataSource\": {\n \"from\": \"//FundCode\",\n \"translation\": \"lookupFundId\"\n }\n },\n {\n \"field\": \"FUND_CODE\",\n \"dataSource\": {\n \"from\": \"//FundCode\"\n }\n },\n {\n \"field\": \"FUND_PERCENTAGE\",\n \"dataSource\": {\n \"default\": \"100\",\n \"translation\": \"toDouble\",\n \"translateDefault\": true\n }\n },\n {\n \"field\": \"VENDOR_INSTRUCTIONS\",\n \"dataSource\": {\n \"from\": \"//OrderNotes\",\n \"default\" : \"N/A\"\n }\n },\n {\n \"field\": \"LIST_UNIT_PRICE_ELECTRONIC\",\n \"dataSource\": {\n \"from\": \"//ListPrice/Amount\",\n \"default\": \"0\",\n \"translation\": \"toDouble\",\n \"translateDefault\": true\n }\n },\n {\n \"field\": \"LOCATION\",\n \"dataSource\": {\n \"from\": \"//Location\",\n \"default\": \"*\",\n \"translation\": \"lookupLocationId\",\n \"translateDefault\": true\n }\n },\n {\n \"field\": \"MANUAL_PO\",\n \"dataSource\": {\n \"default\": \"false\",\n \"translation\": \"toBoolean\",\n \"translateDefault\": true\n }\n },\n {\n \"field\": \"MATERIAL_TYPE\",\n \"dataSource\": {\n \"from\": \"//LocalData[Description='LocalData1']/Value\",\n \"default\" : \"unspecified\",\n \"translation\": \"lookupMaterialTypeId\",\n \"translateDefault\": true\n }\n },\n {\n \"field\": \"ORDER_TYPE\",\n \"dataSource\": {\n \"default\": \"One-Time\"\n }\n },\n {\n \"field\": \"PO_LINE_ORDER_FORMAT\",\n \"dataSource\": {\n \"default\": \"Physical Resource\"\n }\n },\n {\n \"field\": \"PO_LINE_PAYMENT_STATUS\",\n \"dataSource\": {\n \"default\": \"Awaiting Payment\"\n }\n },\n {\n \"field\": \"PO_LINE_ESTIMATED_PRICE\",_RECEIPT_STATUS\",\n \"dataSource\": {\n \"default\": \"Awaiting Receipt\"\n }\n },\n {\n \"field\": \"PRODUCT_ID\",\n \"dataSource\": {\n \"from\": \"//datafield[@tag='020']/subfield[@code='a']\",\n \"translation\": \"truncateISBNQualifier\"\n }\n },\n {\n \"field\": \"PRODUCT_ID_TYPE\",\n \"dataSource\": {\n \"default\": \"ISBN\",\n \"translation\": \"lookupProductIdType\",\n \"translateDefault\": true\n }\n },\n {\n \"field\": \"PRODUCT_QUALIFIER\",\n \"dataSource\": {\n \"from\": \"//NetPrice/Amountdatafield[@tag='020']/subfield[@code='q']\",\n \"defaultMapping\": {\n \"dataSource\": {\n \"from\": \"//datafield[@tag='020']/subfield[@code='a']\",\n \"translation\": \"separateISBNQualifier\"\n }\n }\n }\n },\n {\n \"field\": \"PUBLICATION_DATE\",\n \"dataSource\": {\n \"from\": \"//datafield[@tag='260']/subfield[@code='c']\"\n }\n },\n {\n \"field\": \"PUBLISHER\",\n \"dataSource\": {\n \"from\": \"//ListPrice/Amount//EstPrice\",datafield[@tag='260']/subfield[@code='b']\"\n }\n },\n {\n \"field\": \"QUANTITY_PHYSICAL\",\n \"dataSource\": {\n \"from\": \"//Quantity\",\n \"default\": \"15.01\",\n \"translation\": \"toInteger\"\n }\n },\n {\n \"field\": \"RECEIVING_NOTE\",\n \"dataSource\": {\n \"from\": \"//LocalData[Description='LocalData2']/Value\"\n }\n },\n {\n \"field\": \"REQUESTER\",\n \"dataSource\": {\n \"from\": \"//LocalData[Description='LocalData3']/Value\"\n }\n },\n {\n \"field\": \"SOURCE\",\n \"dataSource\": {\n \"default\": \"toDouble\",\"combinator\" : \"multiply\"}},\"translation\"API\"\n }\n },\n {\n \"field\": \"TITLE\",\n \"dataSource\": {\n \"from\": \"//datafield[@tag='245']/*\",\n \"combinator\": \"concat\"\n }\n },\n {\n \"field\": \"VENDOR\",\n \"dataSource\": {\n \"default\": \"GOBI\",\n \"translation\": \"lookupOrganization\",\n \"translateDefault\": true\n }\n },\n {\n \"field\": \"VENDOR_ACCOUNT\",\n \"dataSource\": {\n \"from\": \"//SubAccount\",\n \"default\": \"0\"\n }\n },\n {\n \"field\": \"VENDOR_REF_NO\",\n \"dataSource\": {\n \"from\": \"//YBPOrderKey\"\n }\n },\n {\n \"field\": \"VENDOR_REF_NO_TYPE\",\n \"dataSource\": {\n \"default\": \"Vendor order reference number\"\n }\n },\n {\n \"field\": \"WORKFLOW_STATUS\",\n \"dataSource\": {\n \"default\": \"toDoubleOpen\"\n }\n }\n ]\n }\n" } " } ' |
Other points to note:
- By default there is no entry in mod-configuration, the default values used are stored inside the mod-gobi module
- No entry is necessary in mod-configuration if the default values are acceptable
- There should be one entry for each order type in order to override values
- If mod-configuration is not reachable for any reason while an order is being placed, the default rules are used to proceed with placing the order
...