Skip to content

O2C

Purpose

O2C DSL contains major O2C App features promoted to core.

Methods

Binding name: p6.o2c


fromXml

Convert a transactionInfo in a GPathResult format to an easy to handle object TransactionInfo.

Syntax

TransactionInfoResponse p6.o2c.fromXml(GPathResult ti)
Example
final gpath = p6.pipeline.getXml 'xml'
def ti = p6.o2c.fromXml gpath

toXml

Convert a TransactionInfo object to a transactionInfo in a GPathResult.

Syntax

GPathResult p6.o2c.toXml(TransactionInfoResponse ti)
Example
final ti = p6.o2c.transactionInfo {...}
def gpath = p6.o2c.toXml ti

transactionInfo

Create a TransactionInfo.

Syntax

    GPathResult p6.o2c.transactionInfo {...}
Example
final ti = p6.o2c.transactionInfo {
    id  'Invoice_10AQ1312_95294f99-1a48-402d-97c2-8eb045deccc8'
    creationDate  '2024-11-20T15:16:59.328+0000'
    transactionType  'Invoice'
    transactionNumber  '10AQ1312'
    sourceSystem  'Supplier System'
    targetSystem  'Peppol'
    sender  ''
    finalRecipient  '115609021'
    transferProtocol  ''
    deliveredVia  'Peppol'
    sourceDocumentFormat  'XML'
    sourceDocumentURI  'p6file:///opt/p6core.data/resources/sshd/repository/customer_drop/Invoices/processed/Demo Data_Invoice_ENGLISH_200 lines.csv'
    sourceDocumentContentType  'text/plain'
    pivotDocumentFormat  'UBL'
    pivotDocumentURI  'p6file:///opt/p6core.data/resources/documents/Invoice/Invoice_10AQ1312_95294f99-1a48-402d-97c2-8eb045deccc8.xml'
    pivotDocumentContentType  'text/xml; charsetutf-8'
    targetDocumentFormat  'UBL'
    targetDocumentURI  'p6file:///opt/p6core.data/resources/documents/Invoice/Invoice_10AQ1312_95294f99-1a48-402d-97c2-8eb045deccc8.xml'
    targetDocumentContentType  'text/xml; charsetutf-8'
    attachments { attachment {
                    fileName  '10AQ1312.pdf'
                    uri  'p6file:///opt/p6core.data/resources/documents/10AQ1312.pdf'
                    contentType  'application/pdf'
                }}
    technicalStatusCode  'Incomplete'
    technicalStatusMessage  'Incomplete'
    technicalStatusComment  ''
    technicalStatusDate  '2024-11-20T15:17:12.983+0000'
    functionalStatusCode  ''
    functionalStatusMessage  ''
    functionalStatusComment  ''
    functionalStatusDate  ''
    standardStatusCode  'Incomplete'
    standardStatusMessage  'Document is incomplete, please review task'
    standardStatusComment  ''
    standardStatusDate  '2024-11-20T15:17:12.983+0000'
    flags(['aavisible':true, 'eunread':false])
    orgPaths(['//devops-na-test2'])
    keyValues {
        keyValue {
            key  'Seller Name'
            value  'Martinez-Barnes'
        }
        keyValue {
            key  'Buyer Name'
            value  'Firestone / Tires Plus'
        }
    }
}

status

Create a Status.

Syntax

TransactionInfoStatusResponse status{...}
Example
 final technicalStatus = p6.o2c.status {
    code 'Ready to check'
    message 'Transaction ready to be submitted to content validation engine'
    comment ''
}

save (With Closure)

Since 6.10.7

Save, can update Audit trail and route a TransactionInfo.

Syntax

void p6.o2c.save TransactionInfoResponse ti with {
    technicalStatus TransactionInfoStatusResponse
    functionalStatus TransactionInfoStatusResponse
    updateAuditTrail boolean 
    routingParams RoutingSettingDescription
    endpoint String 
}

If a Status is set to null, neither the status in the transactionInfo nor the AuditTrail will be updated. One of technicalStatus or functionalStatus must be provided.

Default value of updateAuditTrail is true, meaning records will be added to the AuditTrail:

  • record(s) of provided status(es)
  • record of Standard Status

Providing both routingParams AND endpoint will result in an error, as routingParams are used to retrieve an endpoint as per getTransactionNextEndpoint(). If endpoint is set to null, the transactionInfo won’t be rooted. If the value is empty the transactionInfo will be rooted to the DEFAULT_ENDPOINT = 'seda:p6router.TransactionRouter'. Otherwise, the transactionInfo will be rooted to the value provided.

Example

===Creation of a TransactionInfo:

final ti = p6.o2c.transactionInfo {...}
final technicalStatusValue = p6.o2c.status {
    code 'Ready to check'
    message 'Transaction ready to be submitted to content validation engine'
    comment ''
}

p6.o2c.save ti with {
    technicalStatus technicalStatusValue
}

===Update a TransactionInfo:

```groovy
final gpath = p6.pipeline.getXml 'xml'
final ti = p6.o2c.fromXml gpath

def keyValue = p6.o2c.transaction.keyValue {
        key  'Currency'
        value  'EUR'
    }
ti.addKeyValues([keyValue])

final technicalStatusValue = p6.o2c.status {
    code 'Incomplete'
    message 'Document is incomplete, please review task'
    comment ''
}        

p6.o2c.save ti with {
    technicalStatus technicalStatusValue
    updateAuditTrail false
    endpoint 'seda:p6router.PeppolTransactionRouter'
}

OR

def setting = p6.o2c.settingDescription {
    supplierId 'supplier'
    network 'Peppol'
    tpId '1234'
    transactionType 'Invoice'
    statusType 'Technical'
    statusCode 'Ready to check'
}

p6.o2c.save ti with {
    technicalStatus technicalStatusValue
    updateAuditTrail false
    routingParams setting
}
```

Deprecated

Since 6.10.11

save

Save, can update Audit trail and route a TransactionInfo.

Syntax

void p6.o2c.save(
    TransactionInfoResponse ti,
    TransactionInfoStatusResponse technicalStatus, 
    TransactionInfoStatusResponse functionalStatus, 
    boolean updateAuditTrail, 
    String endpoint
)

If a Status is set to null, neither the status in the transactionInfo nor the AuditTrail will be updated.

If boolean updateAuditTrail is set to true, records will be added to AuditTrail:

  • record(s) of provided status(es)
  • record of Standard Status

If endpoint is set to null, the transactionInfo won’t be rooted. If the value is empty the transactionInfo will be rooted to the DEFAULT_ENDPOINT = 'seda:p6router.TransactionRouter'. Otherwise, the transactionInfo will be rooted to the value provided.

Example

===Creation of a TransactionInfo:

final ti = p6.o2c.transactionInfo {...}
final technicalStatus = p6.o2c.status {
    code 'Ready to check'
    message 'Transaction ready to be submitted to content validation engine'
    comment ''
}    
p6.o2c.save ti technicalStatus null true null

===Update a TransactionInfo:

```groovy
final gpath = p6.pipeline.getXml 'xml'
final ti = p6.o2c.fromXml gpath

def keyValue = p6.o2c.transaction.keyValue {
        key  'Currency'
        value  'EUR'
    }
ti.addKeyValues([keyValue])

final technicalStatus = p6.o2c.status {
    code 'Incomplete'
    message 'Document is incomplete, please review task'
    comment ''
}
p6.o2c.save ti technicalStatus null false 'seda:p6router.PeppolTransactionRouter'
```

getTransactionNextEndpoint

Get Camel Endpoint from Setting-next-step-per-trx-status O2C table.

Syntax

String getTransactionNextEndpoint(RoutingSettingDescription settingDescription)
Example
def setting = p6.o2c.settingDescription {
    supplierId 'supplier'
    network 'Peppol'
    tpId '1234'
    transactionType 'Invoice'
    statusType 'Technical'
    statusCode 'Ready to check'
}
def endpoint = p6.o2c.getTransactionNextEndpoint setting

validateContentCheck

Validate the UBL document with the Content Check. Return a list of TransactionInfo Issues.
A list of all methods availabled for the Method column of UBL-pivot_Content-check table. A list of all field label and error translation sorted by Translation Key is available to use in Complex Check.

A TransactionInfo issue is composed of: - level: the level of error (ex:Error,ERP). - type: the type of the check (ex:Specific Check). - message: the error message. - field: the field label, it can be from the translation files or by default the FieldLabel column of UBL-pivot_Content-check table. - contentCheckFieldType: the field type for the custom form in Workflow Task view (ex:Any,Files,Number,Select,Text). - value: the value of the field. - path: the path used to set the corrected value. - listOfValues: The list of correct value to fix the error (not mandatory can be empty).

Syntax

List<TransactionInfoIssueResponse> validateContentCheck(String ubl, String endpoint, String customer, String transactionType)
Example
def invoice = p6.pipeline.get 'UBL'
def issues = validateContentCheck invoice 'Peppol' 'Martinez-Barnes' 'Invoice'

In the script of the Complex check, after the check, use the dsl to generate issues and set it in the pipeline as usual.

final fieldLabel = p6.i18n.translate('Amalto_O2C#contentcheck.fieldlabel.Invoice_CurrencyCode')
final error = p6.i18n.format(
                p6.i18n.translate('Amalto_O2C#contentcheck.error.currency'),
                ['name', fieldLabel, 'value', 'AAA']
)
def issues = p6.o2c.transactionInfo.issues {
            issue {
                level  'Error'
                type  'Specific Check'
                message  error
                field  fieldLabel
                contentCheckFieldType  'Select'
                value  'AAA'
                path  '/Invoice/DocumentCurrencyCode'
                listOfValues(['EUR', 'USD', 'GBP'])
            }
}
p6.pipeline.put 'complex_check_error' issues.toString()

final fieldLabel = p6.i18n.translate('Amalto_O2C#contentcheck.fieldlabel.Invoice_CurrencyCode')
final error = p6.i18n.format(
                p6.i18n.translate('Amalto_O2C#contentcheck.error.currency'),
                ['name', fieldLabel, 'value', 'AAA']
)
def issues = p6.o2c.transactionInfo.issues {
            issue {
               level  'Error'
               type  'Specific Check'
               message  error
               field  fieldLabel
               contentCheckFieldType  'Select'
               value  'AAA'
               path  '/Invoice/DocumentCurrencyCode'
               options {
                  option {
                   value 'EUR'
                   label 'Euro'
                  },
                  option {
                   value 'GBP'
                   label 'Livre Sterling'
                  }
               }
            }
}
p6.pipeline.put 'complex_check_error' issues.toString()