Use Order Management Extensions to Get Values from Extensible Flexfields

Use the getOrCreateContextRow method to add new data or update data through a flexfield. Use getContextRow to get data that you already added.

Use getOrCreateContextRow("context code") or getAttribute("API name"), where context code is the name of the context code of the extensible flexfield and API name is the name of the API (application programming interface) that you use to call the method:

Entity

Value to Use in Code

Parent

Read During All Events

Write During Save or Start of Submission Request

Write During End of Submission Request

Extensible flexfield on order header

Not applicable

Header

Yes

Yes

Yes

Extensible flexfield on fulfillment line

Not applicable

Lines

Yes

Yes

Yes

If you use an extension to get a value from an extensible flexfield, then the extension behaves differently depending on the method that you use and whether the context that you specify in the extension exists.

Method If the Context Doesn't Exist
getContextRow("EFFContextName") This method doesn't create a new context.
getorCreateContextRow("EFFContextName") This method creates a new context.

Assume you use this code.

import oracle.apps.scm.doo.common.extensions.ValidationException;
def poNumber = header.getAttribute("CustomerPONumber");
if (poNumber != null && poNumber.equals("test")) {
    def lines = header.getAttribute("Lines");
    while (lines.hasNext()) {
        def line = lines.next();
        def context = line.getOrCreateContextRow("My_Context");
        def effVal = context.getAttribute("eligibleforprime");
        // throw new ValidationException("Eff value effVal:: "+effVal);
        if (effVal.equals("Y")) {
            line.setAttribute("OrderedQuantity", 0);
        }
    }
}

where

  • getOrCreateContextRow("My_Context") attempts to find a context named My_Context. If that context doesn't exist, then the extension creates it.

You use getOrCreateContextRow to add new data or to update data through the flexfield on your sales order.

If you only need to get data that you already added through the flexfield on the sales order, then use getContextRow instead of getOrCreateContextRow. For example:

import oracle.apps.scm.doo.common.extensions.ValidationException;
def poNumber = header.getAttribute("CustomerPONumber");
if (poNumber != null && poNumber.equals("test")) {
    def lines = header.getAttribute("Lines");
    while (lines.hasNext()) {
        def line = lines.next();
        def context = line.getContextRow("My_Context");
        if (context == null) {
            return; // if we don't find a context, then don't create one.
        }
        def effVal = context.getAttribute("eligibleforprime");
        // throw new ValidationException("Eff value effVal:: "+effVal);
        if (effVal.equals("Y")) {
            line.setAttribute("OrderedQuantity", 0);
        }
    }
}