5Orchestrate Fulfillment

This chapter contains the following:

Overview

Set up an orchestration process so it meets fulfillment requirements for your sales order.

An orchestration process is a sequence of steps that automate fulfilling your sales order's fulfillment lines across fulfillment systems. For example, here's the predefined ShipOrderGenericProcess orchestration process.

An orchestration process is a sequence of steps
that automate fulfillment for your items in a single order across
fulfillment systems.

Note.

  • Each process contains steps.

  • Each step calls a service that does a fulfillment task. The service communicates with the fulfillment system to do the task. For example.

    Step Service Description

    Step 100, Schedule

    Create Scheduling

    Create a schedule that the process can use to fulfill the fulfillment line. It makes sure fulfillment meets the delivery dates that the sales order specifies.

    Step 200, Create Reservation

    Create Inventory Reservation

    Reserve inventory for the item on the fulfillment line so no other order can use the inventory.

    Step 300, Create Shipment Request

    Create Shipping

    Create a shipping plan that makes sure the carrier delivers the item on time.

    Step 400, Wait for Shipment Advice

    Wait for Shipment

    Wait to receive confirmation that the carrier delivered the item.

    Step 500, Create Invoice

    Create Billing Lines

    Create billing lines that we can send to accounts receivable.

    Step 600, Wait for Invoice

    Wait for Billing

    Wait to receive confirmation from accounts receivable that billing is done.

  • The orchestration process does each step sequentially, starting with step 100 and ending with step 600.

  • You use the Setup and Maintenance work area to create and manage your orchestration process.

  • To see how an orchestration process works in context, and to get an overview of how task services interact with the fulfillment system, see the How Order-to-Cash Works in Order Management topic.

Set up Steps

You do almost all your set up on the steps.

You do almost all your set up on the steps.

Note.

  • Dependencies. If your process includes a branch, then set dependencies that affect branching.

  • Planning. Specify how to plan fulfillment for the fulfillment line.

    • Set the default lead-time that the process needs to do the step.

    • Create a business rule that uses conditions to set lead-time.

    • Specify the status you expect from the fulfillment system during planning.

    • Specify the step that determines whether fulfillment is done.

  • Change Management. Specify how to manage change that occurs in the fulfillment system.

    • Specify the task service to use for update messages or cancel messages that the fulfillment system sends to you.

    • Create a business rule that uses conditions to specify what to do when a change occurs.

  • Specify dependency, planning, and change management for each step. For example, click Planning to scroll to the part of the row that contains planning attributes.

Set Up Statuses

Set up statuses.

Note.

  • Different fulfillment systems might use different status values.

  • Set up statuses for your orchestration process so they match the values that your fulfillment system uses. This way, the fulfillment system understands values that the orchestration process sends, and the process knows how to handle values it receives.

    For example, fulfillment system x might use SCHEDULED, and system y might use FULFILLMENT_SCHEDULED. Add values to handle both systems.

  • You can also set statuses for fulfillment lines.

Examples of Setting Up Orchestration Processes

Learn about some of the ways you can use an orchestration process.

Call Task Services

Assume you require an orchestration process that incorporates a company policy.

  • If an invoice exceeds $100,000, then a representative must phone the customer.

Here's what you need to do.

  1. Identify the steps your business process needs to fulfill the sales order.

  2. Set up your orchestration process so it includes these steps.

You identify the sequence of calls your orchestration process must make to task services. Here's the pseudocode.

  1. Plant Acknowledgment.

  2. Assemble.

  3. Wait for status to equal COMPLETE.

  4. Ship.

  5. Wait for status to equal SHIPPED.

  6. Call Customer.

  7. Wait for Call Customer to equal COMPLETE.

  8. Test for these conditions.

    If the invoice exceeds $100,000, then Send High Value Invoice.

    • Wait for the status for High Value Invoice to equal BILLED.

    If the invoice doesn't exceed $100,000, then.

    • Invoice.

    • Wait for the status to equal BILLED.

  9. End the condition.

Use Planning Details

Assume you establish lead-times that allow your sales representative to monitor order fulfillment.

Step Lead Time

Schedule

Two days

Reserve

One day

Ship

Six days

Invoice

Two days

You add the default lead time to each orchestration process step. If a step gets delayed during fulfillment, then a process runs in the background that replans the orchestration process and resets the expected completion dates.

Set a Status

Assume you have an important customer who requires that you notify their receiving clerk one day before the shipping system ships the item. You set up an orchestration process class for the orchestration process. You determine the class must include statuses.

  • SHIPPED

  • RESERVED

  • READY TO SHIP

  • SHIPPED

  • INVOICED

You use the Orchestration Process Status tab to define a status condition.

  • If the status of the Create Shipment step is PRESHIP READY, then use the READY TO SHIP status to indicate the orchestration process status.

Your users can use the Order Management work area to determine whether the orchestration process status is READY TO SHIP.

Use a predefined orchestration process, do the required set ups, and set up replanning.

Use Predefined Orchestration Processes

Use a predefined orchestration process instead of you creating a new one. Using a predefined orchestration process and other predefined objects will help reduce your development and maintenance effort. Create a new only if none of the predefined processes meet your needs.

Each predefined process comes already set up to work with Order Management and is ready to use with little or no modification.

Predefined Orchestration Process Includes These Tasks

ShipOrderGenericProcess

  • Schedule

  • Reservation

  • Shipment

  • Invoice

ReturnOrderGenericProcess

  • Return Receipt

  • Invoice

OrderFulfillmentGenericProcess

  • Schedule Conditional. Starts the branch.

  • Request Supply. Starts the back-to-back branch.

  • Pause.

  • Create Back to Back Shipment Request.

  • Wait for Back to Back Shipment Request.

  • Create Purchase Request. Starts the drop ship branch.

  • Wait for Procurement.

  • Create Reservation. Starts the warehouse shipment branch.

  • Create Shipment Request.

  • Wait for Shipment Advice.

  • Merge. Ends the branch.

  • Invoice.

  • Wait for Invoice.

Use it for various fulfillment requirements, such as back-to-back shipments, drop ship, and so on.

Do the Required Set Ups

Do these set ups in the same order that the table lists them.

Description See This Help Topic

Set up the task types that arrange fulfillment tasks in groups. Each task type references services that communicate with a type of fulfillment system. For example, a billing system.

Task Types

Set up the orchestration process.

Set Up Orchestration Processes

Set up business rules that determine how the orchestration process handles changes to sales orders.

How Order Management Processes Change

Set up the schedule that uses process planning to display the completion date of each task and the orchestration process.

Guidelines for Setting Up Orchestration Process Steps

Set up jeopardy threshold and jeopardy priority to assess the level of risk that's associated with the delay of an orchestration process task as low, medium, or high.

Jeopardy Thresholds

Set up the status and status conditions for the sales order, task, orchestration process, fulfillment line, or order line.

Orchestration Process Statuses

Deploy your orchestration process.

Deploy Orchestration Processes

Plan Your Orchestration Process

Orchestration planning is the process of orchestrating and planning fulfillment for your sales order. For example, planning dates, planning shipments, and so on.

Specify how Order Management plans each orchestration process.

  • Set and help meet the completion date for each orchestration process step and task in an orchestration process.

  • Specify how to use the transformation rules that an orchestration process references to transform each source order, including planning for each step after it receives a source order from an order capture system.

  • Use order management parameter Enable Orchestration Process Planning and Calculate Jeopardy. For details, see the Manage Order Management Parameters topic.

Replan Your Orchestration Process

Replanning is the process of updating the orchestration plan for the sales order to accommodate a change that occurs to the sales order or in the fulfillment environment. For example, when your customer requests to change the quantity of a sales order you already submitted to fulfillment.

Specify how Order Management replans each orchestration process.

  • Replan completion dates when a change occurs to the sales order at any point in the orchestration process.

  • Replan immediately after each orchestration process step finishes.

  • Replan according to an event, such as every time the orchestration process receives an update from your order capture system. To control replanning, use the Plan Orchestration Processes scheduled process to schedule an update at regular intervals according to the frequency that your deployment requires.

    For example, if your orchestration process requires planning data that's current, then set up the scheduled process to run the orchestration process and update the planning data one time each day. For an example that uses a scheduled process, see the Fix Errors in More Than One Sales Order topic.

Enable the Replan Instantly option when you set up your orchestration process. It replans the orchestration process immediately after the process finishes the orchestration process step, then displays the revised order data according to the results of the replanning.

  • Use Replan Instantly only for high priority sales orders, or with sales orders that include a jeopardy threshold of less than one day.

  • For performance reasons, don't use Replan Instantly with an orchestration process step that's long or complex.

  • If you don't enable Replan Instantly, then Order Management updates planning data only during the scheduled replanning.

Migrate

Caution: If you use your implementation project to migrate an orchestration process instance from a development environment to a production environment, then don't modify the process name in either environment. Modifying the name might prevent Order Management Cloud from updating references to other data in the orchestration process. For details about using an implementation project, see the Guidelines for Setting Up Order-to-Cash topic.

Specify details about the step, such as branching, planning, and change management.

Each step in your orchestration process specifies the task service that the step calls to fulfill the fulfillment line. Each step specifies how to run the step, such as the task type, task, service, dependencies, planning, change management, and so on. A step might also specify branching.

To set up an orchestration process step, you open the Edit Orchestration Process Definition page, then use the Step Definition list in the Process Details area.

You can't update an order line after Order Management interfaces the line to billing, so don't add a scheduling, reservation, or shipping step after a billing step.

Set Up the Orchestration Process Step

Attribute Description

Step Type

Set the behavior for the orchestration process step.

  • Conditional. Runs a path in an orchestration process according to the results of a condition. You must specify a branching condition on a step immediately after the conditional step.

  • Merge. Identifies the point where two or more orchestration paths reunite.

  • Service. Use this step to call a service.

  • Subprocess. Use this step to call an orchestration subprocess. An orchestration subprocess is an orchestration process that another orchestration process calls.

Task Type

Each task type includes services you can use to communicate with a fulfillment system, such as a billing system. Here are the predefined task types you can use.

  • Schedule

  • Reservation

  • Shipment

  • Invoice

  • Return

Task

Specify the task to run. A task can include more than one step. For example, the Ship task calls the Create Shipment service. It also calls the Wait for Shipment service to wait for different status values to occur in the fulfillment system updates.

Caution: If you use your implementation project to migrate an orchestration process instance from a development environment to a production environment, then don't modify the task name in either environment. Modifying the name might prevent Order Management from updating references to other data in the orchestration process. For details about your implementation project, see the Guidelines for Setting Up Order-to-Cash topic.

Service

Specify the task service that this step calls.

Manual

Specify whether to wait for user input. If you specify a manual task, then the orchestration process waits until the user manually finishes the task in the Order Management work area.

For example, set the Schedule task as a manual task so your users can manually schedule all fulfillment lines at the end of the day.

Exit Criteria

Specify the task status that determines when to exit a wait step. For example, if the status of a shipment task changes to Shipped, then exit the wait step.

If your task includes more than one wait step, then make sure these steps don't use the same exit criteria.

Use the Manage Task Status Conditions page to make sure only the last step or wait step uses the exit criterion.

If you set up more than one wait step for a task, then make sure you set the exit criteria for each wait step that occurs before the final wait step to Mark as Complete. For example.

  • Assume you set up wait step x, wait step y, and wait step z on the same task, and that wait step z occurs last.

  • Make sure you set the exit criteria for step x and step y to Mark as Complete.

  • If the fulfillment system doesn't reply to step x or step y, but instead replies only to step z, then the flow can continue without waiting for step x and step y to finish.

  • If you don't set Mark as Complete for x and y, then the orchestration process might remain at x or y and never proceed to the next task.

  • Make sure you specify the value Canceled as an exit criteria status to exit the wait task in your orchestration process.

Line Selection Criteria

Add a business rule that selects fulfillment lines. The orchestration process step will then process only these fulfillment lines.

  • The rule populates the result with the fulfillment line Ids that identify the fulfillment lines to select.

  • The rule runs for each fulfillment line that the orchestration process is processing.

  • If the rule doesn't select any fulfillment line, then the orchestration process skips the step.

An orchestration process might not require all of the order lines or fulfillment lines when it calls the fulfillment task service. For example, assume the item on an order line is a warranty. You typically don't ship a warranty, so you can create a business rule that specifies not to ship items that don't ship.

For details, see the Select Fulfillment Lines for Orchestration Process Steps topic.

Pause Rule

Specify when to pause processing before calling the next step, or when to resume processing. For details, see the Pause Orchestration Processes topic.

Set Up Branching

An orchestration process branch is a path in an orchestration process that the process runs when the flow meets a condition.

You can set up an orchestration process so its linear, where steps occur in a sequence with no branching, or so it contains a branch where flow travels along different paths depending on a condition.

Here's how you set up branching.

  • Use a branching condition in a single orchestration process.

  • Use an assignment rule that examines a set of orchestration processes, then assigns one for the branch.

The technique you use depends in part on the complexity you need. For example, you can create several simple, linear orchestration processes, then use an assignment rule to choose one. Or, you can combine these orchestration processes into a single orchestration process that uses branching conditions. A more complex set up might require assignment rules and branching conditions.

For an example that uses branching, see the Add Branches to Orchestration Processes topic.

Here are the attributes you set for branching.

Attribute Description

Branching Condition

Specify the criteria that the condition must meet to run the steps in a branch.

  • Add the condition on the first step of the branch, which is the first step immediately after the conditional step.

  • If you don't add a check mark to the Otherwise option on the conditional step, then you must include a branching condition.

Evaluation Sequence

Specify the sequence that the orchestration process uses when it evaluates each branch condition.

Otherwise

If you add a check mark to the Otherwise option on the conditional step, and if the branching condition does meet the criteria you specify for the branch, then the orchestration process runs the branch that doesn't meet the branching condition.

Set Up Planning

Attribute Description

Planning Default Branch

Specify the default path that the orchestration process uses for planning. The process uses this setting only if it includes one or more conditional branches.

Fulfillment Completion Step

Add a check mark to this attribute to indicate that the fulfillment lines are fulfilled when this step finishes.

  • The orchestration process uses this setting when it does planning to make sure it meets the request date.

  • The last step that occurs in chronological order in the process isn't necessarily the Fulfillment Completion Step. For example, to indicate the completion date, the orchestration process might use the requested ship date as the last step instead of using the shipped date.

Default Lead Time

Specify the duration that the orchestration process needs to do the step.

  • The process uses lead-time to plan and to predict the completion date.

    The lead-time is the amount of time the process needs to finish the step, including wait steps and pause steps.

  • If you don't specify a lead-time expression for the step, then the process uses the value you set for Default Lead Time.

  • If actual completion dates are available, then the process uses actual dates instead of estimated dates.

  • The Gantt chart in the Order Management work area displays the planned orchestration process. Order Management uses the number of days that are past the lead time when it calculates jeopardy.

Lead Time UOM

The unit of measure for the lead-time, such as days, hours, or minutes.

Lead-Time Expression

A lead-time expression is a business rule that determines the amount of time you expect the step needs to finish.

  • Use it to calculate planning for the orchestration process. For example, an item that uses complex packing might require a longer lead-time for shipping.

  • The rule populates the result with a numeric value that represents the lead time.

  • You must use BigDecimal with your lead-time expression.

Here's an example expression that determines the difference between the current date and the scheduled ship date.

BigDecimal.valueOf((DooSeededOrchestrationRules.DOOHeader/childFLines.scheduleShipDate.time-CurrentDate.date.timeInMillis)/(1000*60*60*24))

where

  • BigDecimal is a public Java class that specifies an arbitrary-precision, signed, decimal number.

  • DooSeededOrchestrationRules is a method that contains a set of predefined business rules for an orchestration process.

  • DOOHeader/childFLines specifies a relationship between the parent order head and the child fulfillment lines. The forward slash ( / ) separates the parent from the child.

  • scheduleShipDate is a sales order attribute.

  • CurrentDate is a function that returns the current date.

  • timeInMillis converts the current date to milliseconds.

  • 1000 is the number of milliseconds in one second.

  • 60 is the number of minutes in one hour.

  • 60 is the number of seconds in one hour.

  • 24 is the number of hours in one day.

For details, see the Set Up Lead-Times for Orchestration Process Steps topic.

Set Up Change Management

Attribute Description

Hold on wait

Sends a message to the fulfillment system for each active step when the orchestration process receives a change order.

Use Transactional Item Attributes

If you enable transactional item attributes, then the step examines the transactional item attributes to help it determine the differences that exists between the change order and the previous version of the order.

Use Flexfield Attributes

If you enable flexfield attributes, then the step examines them to help it determine the differences that exists between the change order and the previous version of the order.

Compensation Pattern

Specify the set of rules that determine how to handle each step that ran before Order Management received the change order.

For example, assume a change order requests a change from carpet to tiles.

  • The orchestration process must cancel a number of the previous steps that it ran.

  • If it already scheduled carpet for shipping, then the process must cancel the steps that scheduled the shipping.

  • Order Management creates a different set of fulfillment lines for tiles when it processes the change order, so it must use a different orchestration process because a tile order requires more time to fulfill and it uses a different contractor.

  • Order Management must cancel most of the previous steps, but it doesn't cancel the Measure step because the room dimensions are still accurate.

If you don't specify a compensation pattern, then Order Management might process a step as an update, depending on the context of the operation. It might rerun some steps. If Order Management can't compensate a step for some reason, then it bypasses the step, then compensates the next step that it encounters.

Consider Date Planning

Order Management sets the required completion date for the last step of the orchestration process to the Required Fulfillment Date, then calculates the planned dates for each step and task that the orchestration process contains so they meet the Required Fulfillment Date.

Here's how Order Management does it.

  • Works through the orchestration process from beginning to end, starting with the first step in chronological order, and ending with step Last Fulfillment Completion.

  • Doesn't use the last step that occurs in chronological order to identify the completion date.

  • Incorporates lead times in the dates that it calculates. You can set up these lead times.

  • Displays the replanned schedule after it finishes the calculation.

Here's how Order Management sets the Required Fulfillment Date.

  1. Sets the Required Fulfillment Date to the date that your source system provides.

  2. If the source system doesn't provide a date, then Order Management sets Required Fulfillment Date to Requested Ship Date.

  3. If Requested Ship Date doesn't contain a value, then Order Management sets Required Fulfillment Date to Requested Arrival Date.

  4. If Requested Arrival Date doesn't contain a value, then Order Management sets Required Fulfillment Date to Order Date.

  5. If Order Date doesn't contain a value, then Order Management sets Required Fulfillment Date to System Date. The operating system of the computer that runs Order Management contains the system date.

Order Management exits this sequence as soon as it successfully sets the date. For example, if your source system provides a date, then it does only step 1, and doesn't do steps 2 through 5.

Keep this sequence in mind when you set up your integration and orchestration process.

Improve Performance

The way you set up your orchestration processes and orchestration process steps can directly affect performance in your environment. Here are some tips.

  • Remove each step that you don't need. Each step eats up resources and increases processing time. For example, if you use the predefined ShipOrderGenericProcess and don't need to do invoicing, then delete the Create Invoice and Wait for Invoice steps. Don't use line-selection criteria to skip steps you don't need because that approach increases processing time and might lead to a step that remains in a Not Started status for a long time, or a process that seems to take forever to finish.

  • Use a separate orchestration process to accomplish each goal. Don't use one large, monolithic process that has a lot of branches and skipped steps to do all your processing. Instead, use several processes with fewer branches.

Create

Set Up Orchestration Processes

Set up an orchestration process so it meets your business requirements.

In this example, you create an orchestration process that calls a scheduling service, ships, then bills the sales order.

orchestration process that calls a scheduling service,
ships, then bills the sales order.

Summary of the Steps

  1. Prepare to set up the orchestration process.

  2. Create the orchestration process.

  3. Add the orchestration process steps.

  4. Deploy the orchestration process. For details, see the Deploy Orchestration Processes topic.

This topic includes example values. You might use different values, depending on your business requirements.

Prepare to Set Up the Orchestration Process

Depending on the complexity of your orchestration process, you might need to do one or more of these steps.

  1. Do tasks in the Setup and Maintenance work area that allow you to set up an orchestration process.

  2. Create the task types that the orchestration process requires. Also define the tasks and services that these task types reference.

  3. Create the status codes that the orchestration process requires and specify how the task types, fulfillment lines, and your orchestration process will use them.

  4. Create the orchestration subprocesses that the orchestration process will reference.

  5. Create the status catalogs that the orchestration process will use for status conditions. Create catalogs for one of these applications.

    • Oracle Product Model

    • Oracle Product and Catalog Management

    • Oracle Product Hub

Create the Orchestration Process

  1. In the Navigator, click Setup and Maintenance.

  2. In the Setup and Maintenance work area, go to the task.

    • Offering: Order Management

    • Functional Area: Orders

    • Task: Manage Orchestration Process Definitions

  3. On the Manage Orchestration Process Definitions page, click Actions > Create.

  4. On the Create Orchestration Process Definition page, set values, then click Save.

    Attribute Value

    Process Name

    CustomDOO_ScheduleAndShip

    The set up page automatically adds the CustomDOO_ prefix. You must use this prefix for any orchestration process you create.

    Process Display Name

    CustomDOO_ScheduleAndShip

    Enter any value. Don't include spaces. The value you enter will display throughout the Setup and Maintenance and the Order Management work areas.

    Process Class

    Ship Order Class

    An orchestration process class contains a set of statuses you can assign to the orchestration process.

    Select a class that includes the statuses you need for the orchestration process.

    Set

    Common Set

    Note.

    • A set is a collection of business units. Use it to organize business units and control the business units that can access an orchestration process.

    • Select the set that allows the business unit to access the orchestration process.

    • Use the predefined Common Set to provide access to many business units.

    • You must add your business unit to the set you specify.

Add the Orchestration Process Steps

  1. On the Step Definition tab, click Actions > Add Row.

  2. Set values, then click Save.

    Attribute Description

    Step Name

    Enter text that describes the purpose of the step. For this example, enter Schedule Product.

    Step Type

    Select a value that indicates the type of processing that this step does.

    For example, if this step must do conditional branching, then choose Conditional. This example calls a service, so select Service.

    Task Type

    Select the group of services that Order Management uses to do a fulfillment task. For this example, select Schedule.

    Task

    Select the task that this step must perform. For this example, select Schedule.

    Service

    Identify the service that this step must call. For this example, select Create Scheduling.

  3. Repeat steps 1 and 2. Use these values.

    Attribute Value

    Step Name

    Reserve Product

    Step Type

    Service

    Task Type

    Reservation

    Task

    Reserve

    Service

    Create Inventory Reservation

    Tip: To maintain the correct sequence when you add each step, click the step that you most recently added, then click Add Row. To make sure you don't lose any work, click Save after you add each step.
  4. Repeat steps 1 and 2. Use these values.

    Attribute Value

    Step Name

    Ship Product

    Step Type

    Service

    Task Type

    Shipment

    Task

    Ship

    Service

    Create Shipping

  5. Repeat steps 1 and 2. Use these values.

    Attribute Value

    Step Name

    Wait for Product Shipment

    Step Type

    Service

    Task Type

    Shipment

    Task

    Ship

    Service

    Wait for Shipment

    Exit Criteria

    Shipped

    Note that you also specify the exit criteria in this step.

  6. Repeat steps 1 and 2. Use these values.

    Attribute Value

    Step Name

    Create Invoice

    Step Type

    Service

    Task Type

    Invoice

    Task

    Invoice

    Service

    Create Billing Lines

  7. Repeat steps 1 and 2. Use these values.

    Attribute Value

    Step Name

    Wait for Invoice

    Step Type

    Service

    Task Type

    Invoice

    Task

    Invoice

    Service

    Wait for Billing

Add Lead-Times for Orchestration Process Steps

Add a rule that sets the lead-time for an orchestration process step according to a set of conditions.

Assume your lead-time to ship the item varies depending on where the inventory organization is located, so you implement these business rules.

  • If the inventory organization is in Denver, then use a two day lead-time

  • If the inventory organization isn't in Denver, then use a four day lead-time

Here are the rules you will create.

the rules you will create.

Summary of the Steps

  1. Create the If statement for the first rule.

  2. Create the Then statement for the first rule.

  3. Create the If statement for the second rule.

  4. Create the Then statement for the second rule.

This topic includes example values. You might use different values, depending on your business requirements.

For a demonstration that creates a business rule, see Creating Business Rules: Demo.

Create the If Statement for the First Rule

  1. In the Navigator, click Setup and Maintenance.

  2. In the Setup and Maintenance work area, go to the task.

    • Offering: Order Management

    • Functional Area: Orders

    • Task: Manage Orchestration Process Definitions

  3. On the Manage Orchestration Process Definitions page, locate the CallCustomerWhenLargeInvoice orchestration process, then click Actions > Edit.

    For details about how to create CallCustomerWhenLargeInvoice, see the Add Branches to Orchestration Processes topic.

  4. On the Edit Orchestration Process Definitions page, in the Process Details area, in the Step Definition list, click Planning.

  5. In the Ship Product row, set the value.

    Attribute Value

    Lead-Time UOM

    Days

  6. In the Lead-Time Expression column, click Click for Rule.

  7. In the Lead-Time Expression dialog, click Add Rule > Expand.

    If you write a rule for an orchestration process that orchestrates more than one fulfillment line, then use Advanced Mode. However, this example treats all fulfillment lines in the same way, so Advanced Mode isn't required. To use Advanced Mode, you would click Show Advanced Settings, add a check mark to Advanced Mode, then edit the rule.

  8. In the If area, click Left Value.

  9. In the Condition Browser, expand DOOSeededOrchestrationRules > DOOFline, click InventoryOrganizationId, then click OK.

    DOOFline is an abbreviation for Distributed Order Orchestration Fulfillment line. Oracle replaced the name Distributed Order Orchestration with the name Order Management in an earlier release. Some rules still use the old name.

  10. In the Right Value attribute, enter 1234440.

    Assume 1234440 is the inventory organization ID for Denver.

Create the Then Statement for the First Rule

  1. In the Then area, click Add Action > Assert New.

  2. Click Select a Target > DooSeededOrchestrationRules.Result.

  3. Click Edit Properties.

  4. In the Edit Properties dialog, in the ResultObjKey row, enter the value, then click OK.

    Attribute Value

    Value

    BigDecimal.valueOf(2)

Create the If Statement for the Second Rule

  1. In the Lead-Time Expression dialog, in the Lead-Time Expression Set area, click Add Rule.

  2. In the lower part of the dialog, in the Rule 2 area, click Expand.

  3. In the If area of Rule 2, click Left Value, expand DOOSeededOrchestrationRules > DOOFline, select InventoryOrganizationId, then click OK.

    Tip: In some attributes, you can copy the value from one attribute to another instead of using the drop-down list. For example, you can copy DooSeededOrchestrationRules.DOOFLine.inventoryOrganizationId from Left Value of the first rule, then paste it into Left Value of the second rule.
  4. Click the down arrow for the operator, then click isn't.

  5. In the Right Value attribute, enter 1234440.

Create the Then Statement for the Second Rule

  1. In the Then area for Rule 2, click Add Action > Assert New.

  2. Click Select a Target > DooSeededOrchestrationRules.Result.

  3. Click Edit Properties.

  4. In the Edit Properties dialog, in the ResultObjKey row, enter the value.

    Attribute Value

    Value

    BigDecimal.valueOf(4)

  5. Click OK > Save.

  6. On the Edit Orchestration Process Definition page, click Save.

Select Fulfillment Lines for Orchestration Process Steps

Create a line selection rule that selects fulfillment lines, then specify whether the orchestration process step will process them.

A line selection rule is type of rule that determines whether an orchestration process step processes a fulfillment line.

In this example, you create a line selection rule that makes sure Order Management doesn't attempt to ship a nonshippable item.

Assume you sell digital video recorders. The sales order includes more than one fulfillment line for each items.

  • Digital video recorder

  • Remote control

  • Instruction manual

  • Extended warranty

Your customers can purchase the extended warranty as a contract online, but its not a shippable item, so Order Management must not attempt to send it to the fulfillment system during the Shipment task. So, you create a rule.

  • If Order Management can't ship the item, then don't attempt to ship it.

Here is the rule you will create.

line selection rule

where

  • DooSeededOrchestrationRules is a dictionary that contains a set of predefined functions, variables, objects, and other data you can use to define behavior for an orchestration process.

  • DOOFLine contains fulfillment line attributes, such as orderedQty, customerPONumber, creationDate, and so on. You can reference these attributes and use their values in your rule.

  • shippableFlag is a fulfillment line attribute.

  • Y is one possible value of shippableFlag.

This example includes a business rule that requires you to use a dictionary, fact, and other objects. Its strongly recommended that you familiarize yourself with these objects before you proceed. For details, see the Business Rules chapter in the Implementing Order Management book.

Summary of the Steps

  1. Create the If statement.

  2. Create the Then statement.

This topic includes example values. You might use different values, depending on your business requirements.

Create the If Statement

  1. In the Navigator, click Setup and Maintenance.

  2. In the Setup and Maintenance work area, go to the task.

    • Offering: Order Management

    • Functional Area: Orders

    • Task: Manage Orchestration Process Definitions

  3. On the Manage Orchestration Process Definitions page, locate the CallCustomerWhenLargeInvoice orchestration process, then click Actions > Edit.

    For details about how to create CallCustomerWhenLargeInvoice, see the Add Branches to Orchestration Processes topic.

  4. On the Edit Orchestration Process Definitions page, in the Process Details area, in the Step Definition list, locate the Ship Item row.

  5. In the Ship Item row, in the Line Selection Criteria column, click Click for Rule.

  6. In the Line Selection Criteria dialog, click Add Rule > Expand.

  7. In the If area, click Left Value, expand DOOSeededOrchestrationRules > DOOFline, click ShippableFlag, then click OK.

  8. In the Right Value attribute, enter "Y". You must include the double quotation marks.

Create the Then Statement

You will create this Then statement.

  • assert new resultObjKey:DooSeededOrchestrationRules.DOOFLine.fulfillLineId

where

  • Assert New adds the result into the Result fact of the DooSeededOrchestrationRules dictionary.

  • resultObjKey is a property of Result. It specifies the fulfillment line to examine.

  • DooSeededOrchestrationRules.DOOFLine.fulfillLineId specifies to use the value of the fulfillLineId attribute in the DOOFLine fact of DooSeededOrchestrationRules.

Create the Then statement.

  1. In the Then area, click Add Action > Assert New.

  2. Click Select a Target > DooSeededOrchestrationRules.Result.

  3. Click Edit Properties.

  4. In the Properties dialog, in the ResultObjKey row, click Value.

  5. In the Condition Browser, enter DOOFLine, wait a moment, expand DooSeededOrchestrationRules.DOOFLine, click FulfillLineId, then click OK > OK.

  6. In the Line Selection Criteria dialog, click Validate, make sure the Validation Log that displays doesn't contain errors, then click Save.

  7. On the Edit Orchestration Process Definition page, click Save.

Prevent Orchestration Process from Shipping Return Lines

Add a filter to a line selection rule that makes sure the shipping task doesn't attempt to ship a return line.

The CategoryCode attribute contains ORDER for an order line that's going to fulfillment, and RETURN for a return line. You can use CategoryCode to filter out return lines.

Here's the filter you add to each step.

the rule you create for each step

Try it.

  1. In the Setup and Maintenance work area, go to the task.

    • Offering: Order Management

    • Functional Area: Orders

    • Task: Manage Orchestration Process Definitions

  2. On the Manage Orchestration Process Definitions page, search for ShipOrderGenericProcess, then click Actions > Duplicate.

    You can't modify the predefined process, so you create a duplicate and modify it instead. Notice the process name.

    (CopyOf)CustomDOO_ShipOrderGenericProcess

    Use this process in your deployment.

  3. On the Edit Orchestration Process Definition page, locate the schedule row.

    Step Step Name

    100

    Schedule

  4. On the step 100 row, in the Line Selection Criteria column, click Click for Rule.

  5. In the Line Selection Criteria dialog, click Expand, then notice the predefined rule. Locate the last condition, immediately above the THEN area.

  6. On the row you just located, click the down arrow at the far right of the row, then click Simple Test.

  7. In the new row, enter "ORDER", change is to equals ignore case, then enter DooSeededOrchestrationRules.DOOHeader/childFLines.categoryCode.

    Verify the entire row looks like.

    "ORDER" equals ignore case DooSeededOrchestrationRules.DOOHeader/childFLines.categoryCode

  8. Click Validate, then click Save.

  9. Repeat these steps for the Create Reservation step.

  10. Repeat these steps for the Create Shipment Request step.

Deploy

Deploy Orchestration Processes

Release and deploy an orchestration process that you create so its available throughout Order Management.

If you use one of these predefined orchestration processes, then you must deploy it, but its not necessary to release it.

  • ShipOrderGenericProcess

  • ReturnOrderGenericProcess

Summary of the Steps

  1. Release the orchestration process.

  2. Deploy the orchestration process.

Release the Orchestration Process

  1. In the Navigator, click Setup and Maintenance.

  2. In the Setup and Maintenance work area, go to the task.

    • Offering: Order Management

    • Functional Area: Orders

    • Task: Manage Orchestration Process Definitions

  3. On the Manage Orchestration Process Definitions page, locate the orchestration process definition you must release, then click Actions > Edit.

  4. On the Edit Orchestration Process Definition page, click Actions > Release.

Order Management does these steps.

  1. Validates orchestration process logic to make sure it correctly created the process.

    Validation What Happens Next

    Doesn't find any errors.

    Order Management continues the release.

    An orchestration process that doesn't contain errors is valid.

    A valid orchestration process might include warning messages, but these messages don't stop the release from proceeding.

    Finds errors.

    Order Management stops the release and displays an error icon next to the orchestration process name. It keeps these errors until the next time it runs the validation.

    You must resolve errors before you can continue the release.

  2. Finishes the validation.

  3. Updates the status of the orchestration process to Released.

  4. Makes the orchestration process definition read-only.

  5. Creates and saves the BPEL artifacts that Order Management uses to deploy and run the orchestration process in a production environment.

You can release more than one version of an orchestration process in a single day. You must reject the previous version before you can release the next version on the same day.

Deploy the Orchestration Process

  1. Click Actions > Deploy Process.

  2. In the Deploy Process dialog, enter your password, then click Deploy.

If you can't access the Manage Orchestration Process Definition page to deploy the orchestration process for some reason, then you can use Oracle Middleware to deploy it. For details, see the Use Oracle Middleware to Deploy Orchestration Processes topic.

Use Oracle Middleware to Deploy Orchestration Processes

If you can't use the Manage Orchestration Process Definition page to deploy an orchestration process for some reason, then use Oracle Middleware to deploy it.

Summary of the Steps

  1. Release the orchestration process. For details, see the Deploy Orchestration Processes topic.

  2. Download the orchestration process.

  3. Modify the SOA configuration plan.

  4. Deploy the JAR file.

Download the Orchestration Process

You deploy the downloaded artifacts to the server. You use Oracle Setup Manager to export the artifacts, and Oracle Middleware to deploy them.

  1. On the Manage Orchestration Process Definitions page, select the orchestration process you must deploy, then click Edit.

  2. On the Edit Orchestration Process Definition page, click Actions > Release.

  3. In the Download Generated Process dialog, click Download.

  4. Save the archive file that Order Management displays to a local directory.

  5. Open the archive file you saved.

Modify the SOA Configuration Plan

You use an Oracle Service-Oriented Architecture (SOA) configuration plan to define the URL and properties to use for different environments. Order Management uses the plan to search the SOA project for values it must replace so the project supports each environment.

Modify this SOA configuration plan.

<?xml version="1.0" encoding="UTF-8"?>
<SOAConfigPlan 
xmlns:jca="http://platform.integration.oracle/blocks/adapter/fw/metadata" 
xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy" 
xmlns:orawsp="http://schemas.oracle.com/ws/2006/01/policy" 
xmlns="http://schemas.oracle.com/soa/configplan">
<composite name="*">
<import>
<searchReplace>
<search/>
<replace/>
</searchReplace>
</import>
<service name="client">
<binding type="ws">
<attribute name="port">
</attribute>
</binding>
</service>
<reference name="*">
<binding type="ws">
<attribute name="location">
<searchReplace>
<search>http://localhost_am:port</search>
<replace>http://actualDOOADFserver:port</replace>
</searchReplace>
<searchReplace>
<search>http://localhost_soa:port</search>
<replace>http://actualDOOSOAserver:port</replace>
</searchReplace>
</attribute>
</binding>
</reference>
</composite>
</SOAConfigPlan>

Note.

  • Replace each host name with the Oracle Application Development Framework (ADF) server.

  • Replace each port with the port that your organization uses for Order Management and the server and port that Supply Chain Management uses for SOA. Use the external-facing URLs of the servers.

Deploy the JAR File

Use one of these tools.

  • Oracle Enterprise Manager Middleware Control

  • Ant command line tool

  • Oracle WebLogic Scripting Tool

The JAR file resides in a Deploy folder. The Deploy folder resides in a folder that uses the name of the orchestration process you downloaded.

For details about how to deploy an SOA composite application, see Oracle Fusion Middleware Administrator's Guide for Oracle SOA Suite and Oracle Business Process Management Suite.

Subprocess and Branch

Orchestration Subprocesses

Use an orchestration subprocess to increase the efficiency of your design.

You can add a subprocess to an orchestration process, then reuse it in another orchestration process. You can also use a subprocess to manage a large orchestration process. In general, its easier to manage a large orchestration process that includes subprocesses than to manage a large orchestration process that doesn't.

Example of a Subprocess

Assume you use different steps to process different sales orders, depending on the item. However, all orders use these billing steps.

  • Create invoice.

  • Wait for invoice.

  • Send request to activity system that notifies customer of payment receipt.

  • Send request to activity system that creates coupons.

So, you create an orchestration subprocess that includes these steps, and then add it to each orchestration process you use.

Add Branches to Orchestration Processes

Create a branching condition that determines whether to run an orchestration process branch.

An orchestration process branch is a path in an orchestration process that the process runs when the flow meets a condition.

For example, assume you sell commercial computer systems, and you must implement a business rule.

  • If the sales order is valued at $50,000.00 or more, then make sure a representative calls the customer before sending the invoice for the order.

Here's the orchestration process flow you create for this example.

orchestration process flow you create for this
example.

Note.

  • Each step in the flow includes the step number, task name, task type, and service name.

  • The Conditional Node indicates that an orchestration process is about to branch. The first step of the branch contains the condition.

  • If the flow.

    • Meets the condition. The orchestration process runs the steps on the branch that notify the representative.

    • Doesn't meet the condition. The orchestration process runs the steps on the branch that don't notify the representative.

  • Order Management adds an empty default branch when it runs the orchestration process. If the orchestration process includes only one branch, then it isn't necessary to set an Otherwise condition.

This example uses a rule that processes only one fulfillment line. To write a rule for an orchestration process that processes more than one fulfillment line, you use advanced rules. For details, see the Overview of Using Business Rules With Order Management topic.

Summary of the Set Up

  1. Set up routing that notifies the representative.

  2. Set up the orchestration process.

  3. Set up the orchestration process steps.

  4. Create the If statement.

  5. Create the Then statement.

  6. Test your set up.

This topic includes example values. You might use different values, depending on your business requirements.

Set Up Routing That Notifies the Representative

This example sends a notification to a representative to call the customer if the invoice is valued at $50,000.00 or more. You set up the routing that enables the notification. This setup is specific to this example. Other branching usages might not require this setup, or they might require some other setup.

  1. Create the routing rules that enable the send. For details, see the Create Routing Rules That Send Notifications topic.

  2. Create the connector that you referenced in the routing rules in step 1.

  3. Use the Manage Web Service Details page to create the connector.

Set Up the Orchestration Process

Here are the values you set in the header of the orchestration process for this example.

Attribute Value

Process Name

CallCustomerWhenLargeInvoice

Process Display Name

Call the Customer

Process Class

Ship Order Class

Set

Common Set

For details about how to set up an orchestration process, see the Setting Up Orchestration Processes topic.

Set Up the Orchestration Process Steps

You will create these steps.

You will create these steps.
  1. Add a step.

    Attribute Value

    Step Name

    Schedule Item

    Step Type

    Service

    Task

    Schedule

    Service

    Create Scheduling

  2. Add another step.

    Tip: To maintain the correct sequence when you add each step, click the step you most recently added, then click Add Row.
    Attribute Value

    Step Name

    Reserve Item

    Step Type

    Service

    Task

    Reserve

    Service

    Create Inventory Reservation

  3. Add another step.

    Attribute Value

    Step Name

    Ship Item

    Step Type

    Service

    Task

    Ship

    Service

    Create Shipping

  4. Add another step.

    Attribute Value

    Step Name

    Wait for Item to Ship

    Step Type

    Service

    Task

    Ship

    Service

    Wait for Shipment

    Exit Criteria

    Shipped

    Fulfillment Completion Step

    Contains a check mark.

  5. Add another step.

    Attribute Value

    Step Name

    Conditional Node

    Step Type

    Conditional

  6. Add another step.

    Attribute Value

    Step Name

    Phone Customer

    Step Type

    Service

    Task

    Activity

    Service

    Create Activity

    Evaluation Sequence

    1

  7. Add another step.

    Attribute Value

    Step Name

    Wait for Phone Customer

    Step Type

    Service

    Task

    Activity

    Service

    Wait for Activity

    Exit Criteria

    Completed

  8. Add another step.

    Attribute Value

    Step Name

    Create Invoice

    Step Type

    Service

    Task

    Invoice

    Service

    Create Billing Lines

  9. Add another step.

    Attribute Value

    Step Name

    Wait for Invoice

    Step Type

    Service

    Task

    Invoice

    Service

    Wait for Billing

    Exit Criteria

    Billed

  10. In the Step Definition list, click the Conditional Node step, then add another step. This step creates the Otherwise branch.

    Attribute Value

    Step Name

    Otherwise Create Invoice

    Task Type

    Invoice

    Task

    Otherwise Create Invoice

    Each task name you associate with a task type must be unique. You associated the Invoice task with the Invoice task type earlier in this procedure, so you must create a new task name.

    To do this, In the Task attribute, click the Search down arrow, then click Create. In the Create Task Name dialog, enter values.

    • Code: 1

    • Name: Otherwise_Create_Invoice

    • Display Name: Otherwise Create Invoice

    • Task Type: Invoice

    Click Save and Close.

    Service

    Create Billing Lines

    Evaluation Sequence

    2

    Otherwise

    Contains a check mark.

    Planning Default Branch

    Contains a check mark.

  11. In the Step Definition list, click the Otherwise Step - Create Invoice step, then add another step. This step creates the Wait for Invoice Step on the Otherwise branch.

    Attribute Value

    Step Name

    Otherwise Wait for Invoice

    Step Type

    Service

    Task

    Otherwise Create Invoice

    Service

    Wait for Billing

    Exit Criteria

    Billed

  12. In the Step Definition list, click the Wait for Invoice step, then add another step. This step merges the branch back to the main flow.

    Attribute Value

    Step Name

    Merge

    Step Type

    Merge

Create the If Statement

You will create the next rule.

business rule in the remaining part of this procedure

Start by creating the If statement.

  • If the extendedAmount attribute on the fulfillment line is more than 50000

Do it.

  1. In the Step Definition list, in the Phone Customer step, in the Branching Condition column, click Click for Rule.

  2. In the Branching Condition Rules dialog, click Add Rule, then click Expand.

  3. Delete the value Rule 1 , and then enter Condition for invoices valued at more than 50000 dollars.

  4. Click Left Value.

  5. In the Condition Browser dialog, expand DooSeededOrchestrationRules > DOOFLine, click extendedAmount, then click OK.

    where

    • DooSeededOrchestrationRules is a dictionary that includes predefined rule sets, facts, functions, variables, bucket sets, links, and functions you can use to orchestrate fulfillment.

    • DOO means distributed order orchestration, which is an earlier name for order orchestration.

    • FLine means fulfillment line

    • extendedAmount is a fulfillment line attribute that stores the total value of the sales order.

  6. Click Is, and then click More Than.

  7. Click Right Value.

  8. In the Condition Browser dialog, enter 50000, then click OK. Don't include commas in your value.

Create the Then Statement

You will create the Then statement.

  • ( resultObj:DooSeededOrchestrationRules.Boolean.TRUE )

where

  • resultObj is a variable in the DooSeededOrchestrationRules dictionary. You use it to store the result of the business rule.

  • Boolean sets the value of resultObj to TRUE.

Do it.

  1. In the Then area, click Add Action > Assert New.

  2. Click Select a Target, then click DooSeededOrchestrationRules.Result.

  3. Click Edit Properties.

  4. In the Properties dialog, in the ResultObj row, click Value.

  5. In the Condition Browser dialog, expand DooSeededOrchestrationRules > Boolean, click True, then click OK.

  6. Make sure the Properties dialog contains these values.

    Name Type Value

    resultObj

    Object

    DooSeededOrchestrationRules.Boolean.TRUE

    resultObjKey

    Object

    Leave this cell empty.

    viewRowImpl

    oracle.jbo.server.viewRowImpl

    Leave this cell empty.

    For example.

    values in  Properties dialog
  7. Click OK.

  8. In the Branching Condition Rules dialog, click Save.

  9. On the Edit Orchestration Process Definition page, click Save.

Test Your Set Up

  1. Verify that you correctly defined the orchestration process steps and flow.

    • In the header of the Edit Orchestration Process Definition page, click Actions, then click Generate Process Diagram.

    • Make sure the diagram includes the same steps and logic that the diagram at the beginning of this topic displays.

  2. Test the nonbranching flow.

    • In the Order Management work area, create a sales order that's valued at less than $50,000.00.

    • Verify that Order Management ships the item without requesting that the user call the customer.

  3. Test the branching flow.

    • Create a sales order that's valued at more than $50,000.00.

    • Verify that Order Management doesn't ship the item until the activity that the Wait for Phone Customer step references reaches a Completed state.

Parallel Processing in Orchestration Processes

Your orchestration process can process more than one task at a time, in parallel. Use this feature to process different sets of fulfillment lines when each set needs a different set of task types.

Assume your customer purchases a laptop computer that includes a service contract, and your business flow requires that the fulfillment system ship the laptop in a truck at the same time that it sends the service contract through email. You can use parallel processing to ship the laptop and send the email at the same time.

You can use parallel processing to ship the laptop
and send the email at the same time.

This orchestration process includes branches that run in parallel with one another.

  • Step 300 begins the parallel branching.

  • Steps 400 and 500 run in one branch at the same time that steps 600 and 700 run in a parallel branch.

  • The Create Invoice and the Wait for Billing steps occur after step 800. The illustration doesn't include these final steps.

The orchestration process plans the flow after it finishes each task. However, if a task requires several days to finish, then planning data might not be current because the orchestration process can't replan the branch while it waits for a long-running task to finish. For details about how to use the Plan Orchestration Processes scheduled process to schedule an update that occurs at regular intervals, see the Orchestration Processes topic.

Guidelines for Using Parallel Processing

You set up an orchestration process so it uses parallel processing in the same way you set up an orchestration process to use a conditional branch, but with a few differences.

  • When you create the branch, you select the Parallel step type.

  • You don't create branching conditions, set an evaluation sequence, or select Otherwise.

Note.

  • Use parallel processing when more than one long-running task must run at the same time. For example, to send simultaneous requests to two different fulfillment systems that typically require elapsed time to reply.

  • Don't use parallel processing when the reply from a task request occurs almost immediately.

  • You can set up parallel processing so more than one task can run at the same time.

  • You can filter the fulfillment lines of a group so the tasks for some lines in the group run at the same time as tasks for the other lines.

  • You can create a parallel process that doesn't filter lines in a branch so that more than one task is active for each line.

  • Order Management doesn't allow you or a fulfillment system user to split a task that resides in a parallel branch.

Assign

Create an assignment rule that assigns an orchestration process to one or more fulfillment lines of a sales order.

  • Assign the orchestration process according to each set of unique conditions.

  • Order Management Cloud doesn't version assignment rules so the changes you release take effect immediately. You can save rules without releasing them.

  • Use Otherwise logic to set up a default orchestration process for each orchestration group.

  • Create an assignment rule that references data from a different product model. For details, see the Use Business Rules to Get Data from Different Product Models topic.

  • You don't need to specify versions or effective dates in the assignment rules because the orchestration process controls them.

Note.

  • You must set up your orchestration processes before you create your assignment rule.

  • Order Management can't reassign an existing order line to a different orchestration process when you revise a sales order. For details, see the Fix Problems That Occur When Assigning Orchestration Processes topic.

  • If a set of fulfillment lines are part of a shipment set, then you can't assign different orchestration processes to them. For example, if fulfillment line w and fulfillment line x are part of a shipment set, then you can't assign line w to process y and line x to process z. You must use the same orchestration process for lines w and x. Order Management uses this configuration to make sure it can schedule, reserve, and ship the lines together.

Use Orchestration Groups

Create assignment rules according to orchestration groups. An orchestration group is a collection of fulfillment lines that Order Management processes together. Each orchestration group is a subset of a sales order.

  • You create an orchestration group as a shipment set, configured item, or set of order lines.

  • An assignment rule processes each orchestration group at run time, so you must add a test that links each fulfillment line with the group. The predefined assignment rules already include this test.

Here are the predefined groups you can use.

Orchestration Group Description

Standard

Groups all fulfillment lines that fulfill items that aren't configured or are finished items.

Configured Item or Kit

Groups all fulfillment lines that fulfill a configured item or kit.

Shipment Set

Groups all fulfillment lines that fulfill a shipment set.

Examples

Assign an Orchestration Process According To Description

Item

Each sales order for the AS54888 Desktop Computer must use the same processing steps.

You write an assignment rule that assigns an orchestration process named AS54888 Desktop Computer Process to each order line that includes the AS54888 in the Item attribute of the order line.

Customer

Customer Computer Service and Rentals requires an inspection step for each sales order.

You write an assignment rule that assigns an orchestration process named Computer Service and Rentals Process to each order line that includes Computer Service and Rentals in the Customer attribute of the order header.

Destination

Each sales order that the fulfillment system must ship to a country that resides outside of your current location requires different handling, such as completing customs forms.

You write an assignment rule that assigns an orchestration process named International Orders Process to each order line that includes a foreign country in the Ship-To Address attribute of the order header.

Create an assignment rule that assigns your orchestration process to a fulfillment line.

Assume you must process sales orders differently depending on quantity. Assume you already created these processes.

Orchestration Process Name Description

Process_Small_Orders

For quantity under 100. Expedite shipping and don't measure impact to inventory.

Process_Medium_Orders

For quantity 100 to 999. Use regular shipping and measure impact to inventory only at the distributor, not the warehouse.

Process_Large_Orders

For quantity over 1,000. Use bulk freight. Measure impact to inventory at the warehouse and the distributor, and call the customer to confirm before shipping.

Here's the assignment rule you will create.

assignment rule you will create

Summary of the Steps

  1. Create and deploy orchestration processes.

  2. Create the assignment rule.

  3. Create the small order condition.

  4. Create the medium order condition.

  5. Create the large order condition.

For details about creating business rules, see topic Using Business Rules With Order Management: Overview.

This topic includes example values. You might use different values, depending on your business requirements.

Create and Deploy Orchestration Processes

Assume you already created and deployed these orchestration processes.

  • Process_Small_Orders

  • Process_Medium_Orders

  • Process_Large_Orders

For details, see the Setting Up Orchestration Processes topic.

Create the Assignment Rule

  1. In the Navigator, click Setup and Maintenance.

  2. In the Setup and Maintenance work area, go to the task.

    • Offering: Order Management

    • Functional Area: Orders

    • Task: Manage Process Assignment Rules for Sales Orders

  3. On the Manage Orchestration Process Assignment Rules page, click Create New Rule, then set values.

    Attribute Value

    Name

    Assign According to Quantity

    Description

    Assign different orchestration processes depending on quantity.

Create the Small Order Condition

  1. Create the If statement.

    • Click New Condition.

    • In the Create Condition dialog, enter ordered, wait a moment, then click Ordered Quantity (Order Fulfill Line).

      Order Fulfill Line indicates that the attribute resides on the order fulfillment line.

    • Set the operator to less than ( < ).

    • Enter 100, then click OK.

  2. Create the Do statement.

    • Click Then > Do > New Action.

    • In Create Action dialog, enter process, wait a moment, then click Process Name (Order Fulfill Line).

      The phrase Order Fulfill Line indicates that the orchestration process you set will processes order fulfillment lines.

  3. Search for your orchestration process.

    • Click Search > Advanced.

    • Set Process Name to Contains.

    • Enter Process_Small_Orders.

      The search is case sensitive.

    • Click Search.

      Note:

      If you didn't deploy your orchestration process, then Search won't find it.

    • Click the row in the search results.

    • Click OK.

    • In the Create Action dialog, click OK.

Create the Medium Order Condition

Do the same steps you used when you created the small order condition, but with these differences.

  • Click Else > If.

  • In the If statement, enter 1000.

  • In the Do statement, set Process Name to Process_Medium_Orders.

Create the Large Order Condition

Do the same steps you used when you created the medium order condition, but with these differences.

  • Click Else > Do.

  • Don't create an If statement.

  • In the Do statement, set Process Name to Process_Medium_Orders.

Make sure you activate and publish your rule.

Pause

Overview of Pausing Orchestration Processes

Use a pause task to temporarily stop an orchestration process from running so it can wait to meet a condition.

When it meets the condition, the orchestration process releases the pause task, then proceeds to the next orchestration process step. You can specify a pause task to wait between tasks, or specify when to release the pause and begin the next orchestration process step.

flow of how you can use a typical pause task

Note.

  1. You add a step that references a pause task in an orchestration process. You can add a pause task step at any point in the orchestration process. This example includes a simple three step orchestration process. For example, assume the orchestration process successfully scheduled fulfillment, and now must wait to confirm payment before shipping the item to your customer.

  2. You set up a rule that pauses the orchestration process to wait for an event to occur, time to elapse, or for a dependency to resolve.

  3. You set up a release rule that releases the pause task so the orchestration process can continue to the next step. Here's how you release a pause task.

    • Release it automatically when the timer expires, when the flow meets the release condition, or when the flow doesn't meet any of the conditions.

    • Allow a user to release it manually in the Order Management work area.

    • Use a scheduled process that releases it automatically according to a regularly scheduled interval.

    • Use a web service that informs the orchestration process when to release.

Examples

Pause Until An Event Occurs

Assume you provide a layaway program that allows your customer to reserve an item, then pay for it in installments. Use a pause task to pause the orchestration process. When the customer pays in full, the orchestration process calls the Release Paused Tasks service, releases the pause task, then ships the item to the customer.

In another example, assume you must release each sales order to shipping only if inventory is available at the fulfillment location. Use a pause task that pauses the orchestration process until the inventory is available. When the inventory is available, the web service calls Release Paused Tasks, releases the pause task, then ships the item to the customer.

If you set up a rule that waits for an event to occur, then you typically use a web service to resume the pause task. In this context, event means something that occurs outside of Order Management Cloud. Its not synonymous with a business event. For details, see the Pause Orchestration Processes Until an Event Occurs topic.

Pause Until Time Elapses

Assume you prefer not to overload the warehouse with shipment requests that aren't due for delivery for two weeks. You can pause the orchestration process to wait to send the shipment request to the warehouse until two days before the scheduled shipment date occurs.

In another example, assume you sell a video game up to seven days before the release date of the game.

  • You estimate it requires seven days to schedule and process the sales order before it ships. Use this lead time so you can ship the game as soon as its available.

  • You set up a pause task that pauses the orchestration process before the schedule step occurs, and continues to pause until the publisher releases the game.

  • You set up a rule that releases the pause task according to an extensible flexfield that includes a value of the release date minus seven days. The orchestration process releases the pause task, schedules the sales order, then resumes processing.

For details, see the Pause Orchestration Processes Until Time Elapses topic.

Pause Until a Dependency Resolves

Consider some examples.

  • A customer requests to receive a shipment that includes coffee, paper cups, sugar, and creamer at the same time. One fulfillment line fulfills each item. For example, fulfillment line x fulfills the coffee, fulfillment line y fulfills the cups, and so on. You can use a pause task that pauses each order line until the orchestration process finishes scheduling each of these lines. The orchestration process periodically evaluates the sales order. It finishes scheduling all lines, then ships them to the customer at the same time.

  • A customer must receive invoices for all fulfillment lines of a sales order at the same time, regardless of when the orchestration process ships each of these lines. You can use a pause task that pauses the orchestration process until it ships all items. It then sends the invoices for all lines to the customer at the same time.

  • Your company policy requires people in your organization to review and approve each sales order where the scheduled date occurs after the requested date. You can use a pause task to pause the orchestration process until these folks finish review and approval.

For details, see the Pause Orchestration Processes Until a Dependency Resolves topic.

Attributes You Set for the Pause Task

The pause task evaluates the condition in the IF statement of your business rule the first time the rule runs. If the condition is True, then the pause task pauses the orchestration process.

Here are the attributes you set for a pause task.

Attribute Value

reevaluateFlag

  • Y. Evaluate the condition every time the orchestration process finishes a step. If the condition doesn't evaluate to true, then release the pause task.

    For example, assume the orchestration process is processing more than one fulfillment line in a sales order, and that you must evaluate the condition after it processes each line. You can use reevaluateFlag to evaluate each line.

    For another example, assume you must print pictures for customers and then frame them. You set up a flow that includes a parallel task that prints the picture. You promise same day shipping, so you periodically examine whether the picture printed so you can frame it as soon as possible.

  • N. Don't evaluate the condition every time the orchestration process finishes a task. If the IF statement is True, then the orchestration process remains paused until you explicitly release the pause task.

sacType

Specify the action to take when your If statement evaluates to True.

Set sacType to one of these values.

  • SAC_TYPE_EVENT. Pause the orchestration process until an event occurs.

  • SAC_TYPE_TIMER. Pause the orchestration process until the date and time you specify occurs.

  • SAC_TYPE_IMMEDIATE. Release the pause task and resume processing.

  • SAC_SYSTEM_EVENT_IPC_PAUSE. Use an interprocess communication (IPC) to pause according to an event across orchestration processes.

Note that sac is an abbreviation for start after condition.

Guidelines for Pausing Orchestration Processes

Use guidelines to help make sure your pause task works correctly.

Guidelines

Add Pause Task

Add a step that references a pause task.

Add a step that references a pause task.

Note.

  • Use the Edit Orchestration Process Definition page in the Setup and Maintenance work area.

  • Add a pause step. Set values.

    Attribute Value

    Step Type

    Service

    Task Type

    Pause

    Task

    Pause

    Service

    Pause Process

  • Click the link in the Pause Rule column to set up your release rule. Prior to Release 13C, the link was labeled Start After Condition.

    You typically use line-selection criteria to filter fulfillment lines that the orchestration process step processes. However, line-selection criteria isn't available for a pause task because the pause task examines every fulfillment line in the sales order, by default.

Don't Specify Evaluation Intervals That Are Too Short

If you set up your pause task so the evaluation interval is too short, then the orchestration process might evaluate the pause condition an excessive number of times and degrade performance. Assume you.

  • Create a pause step that pauses the orchestration process until Scheduled Ship Date occurs.

  • Set reevaluateFlag to Y.

  • Evaluate the condition one time every five minutes.

Assume five days typically elapse between the time the pause step runs and when Scheduled Ship Date occurs. On average, the orchestration process will evaluate the condition 1,440 times.

  • 12 times for each hour, multiplied by 24 hours, multiplied by five days, equals 1,440

This processing consumes a lot of resources, can affect performance, and might result in memory problems that can cause your runtime environment to fail. So, set up your pause step so it evaluates the condition less frequently. In this example, the evaluation could probably occur one time every two hours without affecting the orchestration process in a negative way.

Use the Number of Times to Retry Pause order management parameter to control the maximum number of times the orchestration process evaluates the condition before it temporarily pauses the pause task and displays an error message informing your users to click Recover to manually recover the pause. For details, see the Manage Order Management Parameters topic.

Evaluate Conditions Again

Use the Recover Errors scheduled process to evaluate the conditions again. For example.

  1. Set up Recover Errors so it runs on the pause task.

  2. Set Number of Times to Retry Pause to 10.

  3. At run time, Order Management retries 10 times.

  4. If all 10 retries fail, then Order Management places the pause task on the error and displays a message that it exceeded the maximum number of retries.

  5. The Order Entry Specialist uses the Recover Order action to recover the sales order.

  6. Each order line that's in error retries pause 10 times.

  7. If the condition.

    • Satisfies during retry. Order Management releases the pause.

    • Doesn't satisfy. Order Management sets the pause task back to an error state.

Release Pause

If the flow doesn't meet the conditions in the pause rule, then the release rule releases the pause. For example, if actualShipDate in the pause rule contains a value for each fulfillment line, then.

  • All fulfillment lines already shipped.

  • The flow hasn't met the pause rule condition that pauses the task.

  • Flow is ready to proceed to the next orchestration process step.

  • Flow returns to the release rule.

  • The release rule sets SacResult to SAC_TYPE_IMMEDIATE.

  • The release rule releases the pause.

  • Flow continues to the next orchestration process step.

If you set up more than one rule that runs as a set of rules on the same start after condition, then you must set the release rule to the highest priority of all rules in the set.

Default Release Rule

Here's an example of a release rule and a pause rule together.

guidelines when you define the release rule

Note.

  • Order Management runs the rule with the highest priority first.

  • Set Priority to Highest on the rule where you use Assign New to make sure the rule runs first. It also makes sure that this rule creates the object that stores the result of the start-after condition (SAC). Other rules might set the value for the start-after condition.

  • If you don't create a release rule, then at least one of the rules in your rule set must use the Assign New action to create the SAC object.

  • If you don't set the priority correctly, you might encounter a null pointer error when the rules run.

  • Don't use the If statement on the release rule to define the condition that your business logic requires. Instead, set up your conditional logic on the pause rule.

  • The rule editor requires that you set up a condition on the release rule so it passes validation, so set up a condition that's always true.

  • Use Assign New. Assign New creates a new instance of SacResult so you can assign values to it while the rules in your rule set run.

  • The release rule is optional starting with Release 19A. If no rule satisfies the condition, then orchestration automatically releases the pause.

Here's another example of a release rule.

Adding a Release Rule

Note.

  • Use advanced mode.

  • Specify sacResult.

    Attribute Description

    sacType

    Required

    sacEventName

    ReevaluateFlag

    waitDateTime

    Optional, depending on the type of pause. For example, if the rule pauses according to a dependency to resolve, then you must include sacEventName.

    For details, see the Overview of Pausing Orchestration Processes topic.

  • Don't set default value for other attributes.

Use Some Other Technology to Release Pause

You typically use a release rule to release a pause. However, you can also use a web service, scheduled process, or the Order Management work area to release the pause.

Assume you need to send all order lines together to invoicing, but you need to control when to send them instead of using a rule to automatically release them.

Use Some Other Technology to Release Them

Note.

  • Use only one rule in your rule set.

  • Don't specify a condition.

  • Use some other technology to release the pause task.

Here's the code.

Code Description

Header is a DOOSeededOrchestrationRules.DOOHeader

Declare the Header variable, then store attributes of the order header that the orchestration process is currently processing into this variable.

Assign new DooSeededOrchestrationRules.SacResult SAC = new DooSeededOrchestrationRules.SacResult()

Create a new variable named SAC and set it to the SacResult type in the DooSeededOrchestrationRules method.

Assign Header.sacResult = SAC

Set the value of the sacResult object on the order header to the value that SAC contains.

Assign Header.sacResult.sacType = DooSeededOrchestrationRules.SacResult.SAC_TYPE_EVENT

Pause the orchestration process until an event occurs.

Assign Header.sacResult.eventName = "Waiting for Manual Release"

Specify the event you use to identify the event that's tracking the pause. In this example, assume you named it Waiting for Manual Release.

Test Your Set Up

Test your set up in a development environment. Use these conditions.

  • Sales order that includes one fulfillment line.

  • Sales order that includes more than one fulfillment line. This test helps to make sure you set up your rules so they examine fulfillment lines that the current orchestration process instance isn't examining, but where a dependency exists between these fulfillment lines and the fulfillment line that the instance is examining.

  • If your data includes a ship set, then include a ship set in your test.

  • If your data includes a configured item, then include a configured item in your test.

  • Attributes that don't contain a value.

  • Attributes that contain values that result in condition evaluating to false.

  • Attributes that contain values that result in condition evaluating to true.

  • Order revision.

  • Change order.

  • If your rules reference them, then test extensible flexfields.

Commonly Used Expressions

ExpressionCode Possible Values

DooSeededOrchestrationRules.SacResult

SAC new DooSeededOrchestrationRules.SacResult()

Header.sacResult

SAC

Header.sacResult.sacType

DooSeededOrchestrationRules.SacResult.SAC_TYPE_IMMEDIATE

DooSeededOrchestrationRules.SacResult.SAC_TYPE_EVENT

DooSeededOrchestrationRules.SacResult.SAC_TYPE_TIMER

Header.sacResult.eventName

DooSeededOrchestrationRules.SacResult.SAC_SYSTEM_EVENT_IPC_PAUSE

You can reference the name of any event that you set up.

Header.sacResult.WaitDateTime

header.getAdjustedDate(null,number of days)

Examples of Pausing Orchestration Processes

Have a look at some examples you can use to pause an orchestration process.

Various Examples

Here are some examples that pause processing.

  • Pause When Revising Sales Orders

  • Pause Large Sales Orders

  • Pause All Lines Then Use Some Other Technology to Release Them

Pause When Revising Sales Orders

Pause when the Order Entry Specialist revises a sales order. You can set attributes that control this behavior.

Pause Task That Occurs When Revising Sales Orders

Note.

  • If your pause task doesn't reference an extensible flexfield, then disable the Use Flexfield Attributes option to instruct the orchestration process to skip the pause step when the value in an extensible flexfield changes.

  • If you don't need to run your pause task when revising a sales order, then write a compensation pattern.

    Assume you write a pause step that waits for payment. The Order Entry Specialist manually indicates that the customer sent payment, and the pause ends. Some time later, the Order Entry Specialist revises the sales order in a way that doesn't affect the payment amount, such as modifying the ship-to address.

    It isn't necessary to pause to wait for payment after the revision, so you can write a compensation pattern that skips pause on the payment step.

  • The orchestration process uses the attributes that you specify on the Order Attributes That Identify Change page to determine when to compensate when revising a sales order. Use it to make sure your pause task runs only if the revision that the Order Entry Specialist makes affects an attribute that your pause task references.

    For details, see the Manage Order Attributes That Identify Change topic.

Pause Large Sales Orders

Use SAC_SYSTEM_EVENT_IPC_PAUSE and set reevaluateFlag to Y to cause the rule to examine every orchestration process instance that's in a wait state for the sales order each time an orchestration process step finishes. Assume a sales order includes 100 fulfillment lines, and 75 of them are in a wait state according to SAC_SYSTEM_EVENT_IPC_PAUSE. The rule will reevaluate each of the 75 lines every time it runs.

If a sales order includes a large number of fulfillment lines, and if you must pause according to a dependency, then don't use SAC_SYSTEM_EVENT_IPC_PAUSE. Instead, set up a rule that uses SAC_TYPE_TIMER, and that examines all fulfillment lines but only after some time elapses. Specify an appropriate interval. For example, if you determine that most fulfillment lines on a large sales order ship within six hours, and you only need to invoice one time every 12 hours, then use an interval of eight hours.

rule that Pauses Large Sales Orders

Examples That Involve Shipping

Here are some examples that use pause that involve shipping.

  • Pause All Lines Until Shipping Delivers All of Them

  • Pause Nonshippable Lines Until Shipping Ships All Shippable Lines

  • Pause Nonshippable Lines Until Shipping Ships At Least One Shippable Line

  • Send Nonshippable Lines and Return Lines to Invoicing Together

  • Pause Shipped Lines of a Kit Until Shipping Ships All of the Lines

  • Send Fulfillment Lines to Invoicing as a Single Group

For these examples.

  • Add your pause task so it happens on a step that occurs after the shipping task and before the invoicing task in your orchestration process.

  • Use the same Then statement for all examples.

Pause All Lines Until Shipping Delivers All of Them

Assume you must wait until Shipping delivers all lines of the sales order before you send the sales order to invoicing, and then send all lines together to invoicing. So you create an orchestration process that has these steps. You use step 5 to add the pause.

Step Task Type Task Name

1

Schedule

Schedule

2

Reservation

Reserve

3

Shipment

Ship Goods

4

Pause

Wait for Delivery

5

Pause

Wait for Consolidated Billing

6

Invoice

Invoice

Here's the pause rule you add on step 5.

Pause All Lines Until Shipping Delivers All of
Them

Note.

Code Description

At least one

Use this test to determine whether at least one fulfillment line in the sales order hasn't shipped. It asks the question.

  • Is there any order line in the sales order that's still on the Wait for Delivery task?

If an order line is still doing the Wait for Delivery task, then it means there's at least one order line that Shipping hasn't delivered, and we must continue to pause before proceeding to the next orchestration process step.

taskInstance is a DOOSeededOrchestrationRules.DOOTaskInstance

Declare the taskInstance variable, then store attributes of the task instance that the orchestration process is currently processing into this variable.

DOOTaskInstance gets all the task instances for all instances of the orchestration process that are currently running for all order lines on the sales order.

For example, if three task instances are currently running for three order lines, then DOOTaskInstance gets all three task instances.

taskInstance.taskName equals ignore case "Wait for Delivery"

taskName identifies the value that you enter for the Task Name attribute on the orchestration process step. In this example, you entered Wait for Delivery as the Task Name on step 4.

Step 4 is the pause step that determines whether any order lines are still waiting for delivery.

taskInstance.actualCompletionDate is null

Examine the value of the actualCompletionDate attribute in the taskInstance variable. If it doesn't contain a value, then it means Shipping hasn't delivered the item, and we must continue to pause.

Fulfillment enters a value in actualCompletionDate to indicate when Shipping delivered the item.

Header is a DOOSeededOrchestrationRules.DOOHeader

Declare the Header variable, then store attributes of the order header that the orchestration process is currently processing into this variable.

Assign Header.sacResult.sacType = DooSeededOrchestrationRules.SacResult.SAC_TYPE_EVENT

Pause the orchestration process until an interprocess communication event occurs.

Assign Header.sacResult.eventName = DooSeededOrchestrationRules.SacResult.SAC_SYSTEM_EVENT_IPC_PAUSE

Use an interprocess communication (IPC) to pause according to an event across orchestration processes. Use it to revaluate the pause every time any task finishes for any line in the sales order.

Assign Header.sacResult.reevaluateFlag = "Y"

Yes, we want to reevaluate the pause.

Pause Nonshippable Lines Until Shipping Ships All Shippable Lines

Here's what the rule does.

  • Pause the nonshippable lines in a sales order until Shipping finishes shipping all shippable lines in the order.

  • Automatically release the pause for the nonshippable lines, then proceed to the next step in the orchestration process.

    A subsequent step in the orchestration process can now send all order lines of the sales order to invoicing together.

Add your pause task after the shipping task and before the invoicing task in your orchestration process. For example, orchestration waits until Shipping ships all shippable lines so it can send all lines in the sales order - shippable lines and nonshippable lines - before proceeding to invoicing.

Pause Nonshippable Lines Until Shipping Ships All
Shippable Lines

Note.

Code Description

At least one

Use this test to determine whether at least one fulfillment line in the sales order hasn't shipped. It asks the question.

  • Is there any shippable line in the sales order that has an actual ship date that isn't empty?

If the actual ship date is empty, it means there's at least one shippable line that hasn't shipped, and we must continue to pause before proceeding to the next orchestration process step.

As an alternative, use There is no case where to pause nonshippable lines until Shipping ships at least one shippable line.

FLine is a DOOSeededOrchestrationRules.DOOFLine

Declare the FLine variable, then store attributes of the fulfillment line that the orchestration process is currently processing into this variable.

header.allFLinesInTheOrder RL.contains FLine

Declare allFLinesInTheOrder into the rules language (RL) dictionary, then set the value of allFLinesInTheOrder to the value that FLine contains.

This condition makes sure allFLinesInTheOrder references a fulfillment line that the orchestration process is processing. It also makes sure you correctly declare the variable into the dictionary.

You use it to examine all lines in the sales order, not only the line the current orchestration process instance is processing.

FLine.shippableFlag is "Y"

We are only looking at fulfillment lines that are shippable.

FLine.actualShipDate isn't null

Skip lines that don't have an actual ship date.

FLine.orderedQty isn't 0

Skip lines that have a zero quantity.

Assign Header.sacResult.sacType = DooSeededOrchestrationRules.SacResult.SAC_TYPE_EVENT

Pause the orchestration process until an interprocess communication event occurs.

Assign Header.sacResult.eventName = DooSeededOrchestrationRules.SacResult.SAC_SYSTEM_EVENT_IPC_PAUSE

Use an interprocess communication (IPC) to pause according to an event across orchestration processes. Use it to revaluate the pause every time any task finishes for any line in the sales order.

Assign Header.sacResult.reevaluateFlag = "Y"

Yes, we want to reevaluate.

Pause Nonshippable Lines Until Shipping Ships At Least One Shippable Line

Here's what the rule does.

  • Pause nonshippable lines until Shipping ships at least one of the shippable lines in the sales order.

  • Send all nonshippable lines to invoicing as soon Shipping ships the first shippable line.

  • If the sales order doesn't have any shippable lines, then proceed immediately to the next orchestration process step. There's no need to pause if no line are shippable.

Pause Nonshippable Lines Until Shipping Ships At
Least One Shippable Line

Note.

Code Description

At least one

Use this test to determine whether at least one fulfillment line in the sales order is shippable.

ShippableFLine is a DOOSeededOrchestrationRules.DOOFLine

Declare the ShippableFLine variable, then store attributes of the fulfillment line that the orchestration process is currently processing into this variable.

header.allFLinesInTheOrder RL.contains ShippableFLine

Declare allFLinesInTheOrder into the rules language (RL) dictionary, then set the value of allFLinesInTheOrder to the value that ShippableFLine contains.

This condition makes sure allFLinesInTheOrder references a fulfillment line that the orchestration process is processing. It also makes sure you correctly declare the variable into the dictionary.

You use it to examine all lines in the sales order, not only the line the current orchestration process instance is processing.

ShippableFLine.shippableFlag is "Y"

We are only looking at fulfillment lines that are shippable.

None

If none of the lines are shippable, proceed immediately to next orchestration process step.

You create a separate variable, NotShippableFLine, for the None clause so its independent of the ShippableFLine variable from the At Lease One clause.

NotShippableFLine is a DooSeededOrchestrationRules.DOOFLine

Declare NotShippableFLine into the rules language (RL) dictionary.

Header.allFLinesInTheOrder RL.contains NotShippableFLine

Make sure allFLinesInTheOrder references a fulfillment line that the orchestration process is processing.

Examine all lines in the sales order, not only the line the current orchestration process instance is processing.

NotShippableFLine.shippableFlag is "Y"

We are only looking at fulfillment lines that are shippable.

This statement is in a None clause, which asks the question.

  • If none of the lines contain "Y" for the shippableFlag. . .

    . . .then the test evaluates to true.

NotShippableFLine.actualShipDate isn't null

Skip lines that don't have an actual ship date.

NotShippableFLine.orderedQty isn't 0

Skip lines that have a zero quantity.

Send Nonshippable Lines and Return Lines to Invoicing Together

Here's what the rule does.

  • Pause nonshippable lines until Inventory Management receives all shippable lines in the sales orders.

  • Wait for Inventory Management to receive all shippable lines.

  • Automatically release the paused, nonshippable lines, then proceed to the next orchestration process step.

    The orchestration process can now send the nonshippable lines and the return lines on the order to invoicing together.

Send Nonshippable Lines and Return Lines to Invoicing
Together

Note.

Code Description

At least one

Use this test to determine whether at least one fulfillment line in the sales order is shippable and whether fulfillment has successfully returned the line.

FLine is a DOOSeededOrchestrationRules.DOOFLine

Declare the FLine variable, then store attributes of the fulfillment line that the orchestration process is currently processing into this variable.

header.allFLinesInTheOrder RL.contains ShippableFLine

Declare allFLinesInTheOrder into the rules language (RL) dictionary, then set the value of allFLinesInTheOrder to the value that FLine contains.

FLine.shippableFlag is "Y"

We are only looking at fulfillment lines that are shippable.

FLine.rmaDeliveredQty is null

FLine.rmaDeliveredQty is 0

rmaDeliveredQty is the quantity on the return line that fulfillment has delivered to inventory. If it has no value or is zero, then it means fulfillment hasn't successfully returned the line into inventory.

FLine.orderedQty isn't 0

Fulfillment sets orderedQty to zero when it cancels the line. This condition makes sure we only consider lines that aren't canceled.

FLine.CategoryCode is "RETURN"

Only consider return lines. Skip lines that aren't return lines.

Pause Shipped Lines of a Kit Until Shipping Ships All of the Lines

Assume you order a kit that has a quantity of more than one, such as 10. All of the lines aren't available in inventory, so fulfillment splits some lines and ships part of the kit while it waits for the factory to replenish inventory. You don't want to send the shipped lines to invoicing by themselves. You need to wait until fulfillment ships all of the quantity for the kit.

Here's what the rule does.

  • Pause the shipped lines until fulfillment successfully fulfills all lines for the kit.

  • Automatically release the paused lines, then proceed to the next orchestration process step.

    The orchestration process can now send all lines for the kit to invoicing together.

Pause Shipped Lines of a Kit Until Shipping Ships
All of the Lines

Note.

Code Description

FLine is a DOOSeededOrchestrationRules.DOOFLine

Declare the FLine variable, then store attributes of the fulfillment lines that the orchestration process is currently processing into this variable.

header.childFLines RL.contains FLine

Declare the childFLines attribute into the rules language (RL) dictionary, then set the value of childFLines to the value that FLine contains.

FLine.itemSubTypeCode contains "KIT"

Only get fulfillment lines that are part of a kit. Skip all other lines.

At least one

Use this test to determine whether fulfillment split at least one fulfillment line in the kit.

allFLines is a DOOSeededOrchestrationRules.DOOFLine

Declare the allFLines variable, then store attributes of the fulfillment line that the orchestration process is currently processing into this variable. We will cycle through all the lines.

header.allFLinesInTheOrder RL.contains allFLines

Declare allFLinesInTheOrder into the rules language (RL) dictionary, then set the value of allFLinesInTheOrder to the value that allFLines contains.

allFLines.fulfillLineId isn't FLine.fulfillLineId

allFLines.lineId is FLine.lineId

If fulfillment ships part of a kit, then it splits the lines in the kit, ships some lines and doesn't ship others. Let's see whether fulfillment split the lines in the kit.

Notice that.

  • The allFLines variable contains the fulfillLineId values for all fulfillment lines in the sales order.

  • The FLine variable contains only the fulfillLineId for the line that we are currently examining.

If the fulfillLineId attribute in the allFLines attribute doesn't equal the fulfillLineId attribute in the FLine variable, and if the lineId attribute in the allFLines attribute does equal the lineId attribute in the FLine variable, then we can see that fulfillment didn't split the line that we are currently examining.

How do we know? The fulfillLineId identifies the fulfillment line that contains the kit. Fulfillment must maintain the relationship between the kit's fulfillment line and new lines that it creates when it splits a kit. So fulfillment assigns the lineId of each new line that it creates to the value of the fulfillLineId.

FLine.actualShipDate is null

Only consider lines that fulfillment hasn't shipped.

FLine.orderedQty isn't 0

Fulfillment sets orderedQty to zero when it cancels the line. This condition makes sure we only consider lines that aren't canceled.

Send Shippable and Nonshippable Lines to Invoicing in Groups

Assume you must modify the pause task so the orchestration process sends all fulfillment lines to invoicing as a single group of lines, including all the lines of a sales order that fulfillment can ship and can't ship instead of only lines that fulfillment can ship. Here's what the rule does.

  • Automatically releases the pause for the nonshippable lines that are part of a group as soon as Shipping finishes shipping the shippable lines.

  • Uses an extensible flexfield to allow the Order Entry Specialist to specify which lines are part of the group.

You can use the same Then statement that you use in the Pause Nonshippable Lines Until Shipping Ships Shippable Lines example, but the If statement is different. Add the pause task so it happens between the shipping task and invoicing task in your orchestration process.

Here's the first part of the If statement.

Example of Grouping Values and Using Extensible Flexfields

Note.

Code Description

currentFline is a DOOSeededOrchestrationRules.DOOFLine

Declare the currentFline variable, then store attributes of the fulfillment line that the orchestration process is currently processing into this variable.

header.childFLines RL.contains currentFline

Declare currentFline into the rules language (RL) dictionary, then set the value of currentFline to the value that childFLines contains.

This condition makes sure currentFline references a fulfillment line that the orchestration process is processing. It also makes sure you correctly declare the variable into the dictionary.

allFlines is a DOOSeededOrchestrationRules.DOOFLine

Declare the allFlines variable, and set it to type DOOFLine.

header.allFLinesInTheOrder RL.contains allFlines

Declare the allFlines variable into the rules language dictionary, and set the value of allFlines to the value that allFLinesInTheOrder contains.

This condition makes sure you correctly declare the variable into the dictionary.

currentFlineEFF is a DOOSeededOrchestrationRules.FlexContext

Declare the currentFlineEFF variable, and set it to type FlexContext.

currentFline.flexContexts RL.contains currentFlineEFF

Declare currentFlineEFF into the rules language dictionary, and set the value of currentFlineEFF to the value that flexContexts contains.

This condition makes sure you correctly declare the variable into the dictionary.

flexContexts is a list of context rows for the extensible flexfield. FlexContext is a type of row or variable.

Here's the second part of the If statement.

second part of the If statement

Note that the FulfillLineContext1 extensible flexfield context and the FL1AttributeChar1 segment are one group.

Assume the sales order contains 10 fulfillment lines and you must group them into two sets of five lines each. You can use.

  • FulfillLineContext1 and FL1AttributeChar1 to set up GROUP1 so it contains the first five lines

  • FulfillLineContext2 and FL1AttributeChar2 to set up GROUP2 so it contains the last five lines

Here's the code from second part of the If statement.

Code Description

allFlineEFF is a DOOSeededOrchestrationRules.FlexContext

Declare the allFlineEFF variable, and store the value of object FlexContext into this variable.

Method DooSeededOrchestrationRules contains FlexContext.

FLATTR = "FL1AttributeChar1"

Declare variable FLATTR (flexfield attribute), and set it to FL1AttributeChar1.

You reference the FL1AttributeChar1 extensible flexfield attribute in more than one location in this rule. For efficiency, and to avoid problems because of typographical errors, you can declare FLATTR one time, set it to FL1AttributeChar1, and then reference FLATTR instead of declaring FL1AttributeChar1 more than one time.

currentFline.fulfillLineId isn't allFlines.fulfillLineId

Proceed to the next AND only if the fulfillLineId attribute in the currentFline variable and the fulfillLineId attribute in the allFlines variable doesn't reference the same fulfillment line.

currentFlineEFF.context equals ignore case "FulfillLineContext1"

Get the value of the flexfield context from currentFlineEFF.

Proceed to the next AND statement only if the context contains the FulfillLineContext1 string.

equals ignore case specifies to ignore the case sensitivity of the FulfillLineContext1 string. This condition avoids the situation where your deployment might use some other case for this attribute.

currentFlineEFF.getFlexAttributeValue.(FLATTR) isn't null

Use the getFlexAttributeValue method to get the value of the FL1AttributeChar1 attribute from the extensible flexfield on the current fulfillment line.

Proceed to the next AND only if FL1AttributeChar1 contains a value.

Recall that FLATTR contains FL1AttributeChar1.

currentFlineEFF.getFlexAttributeValue.(FLATTR) isn't null

Use the getFlexAttributeValue method to get the value of the FL1AttributeChar1 attribute from the extensible flexfield on the current fulfillment line.

Proceed to the next AND only if FL1AttributeChar1 contains a value.

Recall that FLATTR contains FL1AttributeChar1.

allFlineEFF.context equals ignore case "FulfillLineContext1"

Get the value of the flexfield context from allFlineEFF.

Proceed to the next AND statement only if the context contains the FulfillLineContext1 string.

allFlineEFF.getFlexAttributeValue.(FLATTR) isn't null

Get the value of the FL1AttributeChar1 attribute from allFlineEFF.

Proceed to the next AND only if FL1AttributeChar1 contains a value.

currentFlineEFF.getFlexAttributeValue.(FLATTR) is allFlineEFF.getFlexAttributeValue.(FLATTR)

Proceed to the next AND only if the extensible flexfield attribute contains the same value on the current line and on all lines.

This condition makes sure these fulfillment lines are part of the same group.

Example That Involves Time

If the current time is.

  • Before 1:10:10 PM. Pause all fulfillment lines until 1:10:10 PM of the current day, then release them.

  • On or after 1:10:10 PM. Pause all fulfillment lines until 1:10:10 PM of the next day, then release them.

Here's the rule.

Assume you must pause all lines according to the
current time.

Note.

Code Description

Header is a DOOSeededOrchestrationRules.DOOHeader

Declare the Header variable, then store attributes of the order header that the orchestration process is currently processing into this variable.

currentdate is a DOOSeededOrchestrationRules.Timestamp

Declare the currentdate variable, then store the current time stamp from the Oracle server into this variable.

Assign new DooSeededOrchestrationRules.SacResult SAC = new DooSeededOrchestrationRules.SacResult()

Create a new variable named SAC and set it to the SacResult type in the DooSeededOrchestrationRules method.

Assign Header.sacResult = SAC

Set the value of the sacResult object on the order header to the value that SAC contains.

Assign Header.sacResult.sacType = DooSeededOrchestrationRules.SacResult.SAC_TYPE_TIMER

Specify the type of pause as a timer.

Assign new DooSeededOrchestrationRules.Timestamp cdate = Header.current_date

Declare the cdate variable and set its value to the current system time stamp of the Oracle server.

Assign cdate.hours = 13

Set the hours of the cdate variable to 1PM in the time zone of the Oracle server.

Note that the rule uses a 24 hour clock.

Assign cdate.minutes = 10

Set the minutes of the cdate variable to 10.

Assign cdate.seconds = 10

Set the seconds of the cdate variable to 10.

cdate now contains 13:10:10.

Assign Header.sacResult.waitDateTime = cdate

Store the value of the cdate variable in the waitDateTime parameter of the sacResult object on the order header.

If cdate.before(currentdate) is true

If the value in the cdate attribute occurs before the value of the currentdate attribute.

Assign cdate = Header.getAdjustedDate(cdate,1)

set the value of cdate to cdate plus 1 day.

The getAdjustedDate function adds the value of the second parameter as the number of days to the first parameter, which is cdate.

Assign Header.sacResult.waitDateTime = cdate

Store the value of the cdate variable in the waitDateTime parameter of the sacResult object on the order header.

Let's consider an example. Assume the current time is 12:00:00, noon.

Code Example Value

currentdate is a DOOSeededOrchestrationRules.Timestamp

Timestamp equals 12:00:00, using format HH:MM:SS on a 24 hour clock..

currentdate equals 12:00:00.

Assign new DooSeededOrchestrationRules.Timestamp cdate = Header.current_date

cdate equals 12:00:00.

Assign cdate.hours = 13

cdate equals 13:00:00.

Assign cdate.minutes = 10

cdate equals 13:10:00.

Assign cdate.seconds = 10

cdate equals 13:10:10.

Assign Header.sacResult.waitDateTime = cdate

waitDateTime equals 13:10:10.

If cdate.before(currentdate) is true

cdate contains 13:10:10 and currentdate contains 12:00:00, so the condition evaluates to false.

The rule doesn't proceed to the Then clause of this If statement. Instead, the rule pauses all fulfillment lines until 13:10:10 PM of the current day, then releases them.

Assume the current time is 14:00:00, or 2 PM.

Code Example Value

currentdate is a DOOSeededOrchestrationRules.Timestamp

Timestamp equals 14:00:00, using format HH:MM:SS on a 24 hour clock..

currentdate equals 14:00:00.

Assign new DooSeededOrchestrationRules.Timestamp cdate = Header.current_date

cdate equals 14:00:00.

Assign cdate.hours = 13

cdate equals 13:00:00.

Assign cdate.minutes = 10

cdate equals 13:10:00.

Assign cdate.seconds = 10

cdate equals 13:10:10.

Assign Header.sacResult.waitDateTime = cdate

waitDateTime equals 13:10:10.

If cdate.before(currentdate) is true

cdate contains 13:10:10 and currentdate contains 14:00:00, so the condition evaluates to True.

The rule proceeds to the Then clause of this If statement.

Assign cdate = Header.getAdjustedDate(cdate,1)

cdate equals 13:10:10 plus 1 day.

Assign Header.sacResult.waitDateTime = cdate

waitDateTime equals 13:10:10 plus 1 day.

The rule pauses all fulfillment lines until 13:10:10 PM of the next day, then releases them.

Pause Orchestration Processes Until Events Occur

Use a pause task to temporarily stop an orchestration process from running so it can wait for an event to occur.

Example

Pause processing when a web service sends an event that requests a payment check.

rule that Pauses According to Event

Note.

  • Assume the application sets paymentTermId to 1 when it requires the orchestration process to pause and makes sure you received payment from your customer.

  • Most orchestration processes process one fulfillment line at a time when they pause according to time or an event. If you pause according to time or event, then, to filter fulfillment lines, use one of these codes.

    Code Description

    Header.childFLines

    Reference the fulfillment line that the orchestration process is processing.

    Header.allFLinesInTheOrder

    References all fulfillment lines in the sales order that the orchestration process is processing.

  • Use isn't null. If your rule examines an attribute that doesn't contain a value, then your rule might fail with results you can't predict.

  • Use Assign. If you use Assert New, then the rule creates more than one instance, and it might fail with results you can't predict.

  • If you use Assign New for a rule in a pause rule set, then you must set priority for the Assign New rule to Highest, and make sure no other rule in the set is Highest.

Use Case

Assume you work for a publisher who will release a new book at some point in the future, and must provide your Gold customers an opportunity to order the book before your company releases it to the public. You can set up an orchestration process that allows a Gold customer to order the book but pauses processing so it doesn't attempt to ship the book before the release date occurs.

Here are the rules you will create.

  • If the customer is Gold, then pause the orchestration process.

  • If the customer isn't Gold, then skip the pause task.

Summary of the Set Up

  1. Create the orchestration process.

  2. Add orchestration process steps.

  3. Create If statement for first rule.

  4. Create Then statement for first rule.

  5. Create second rule.

  6. Deploy the orchestration process. For details, see the Deploy Orchestration Processes topic.

This topic includes example values. You might use different values, depending on your business requirements.

For background details about.

  • The properties you set in this topic for the pause task, see the Overview of Pausing Orchestration Processes topic.

  • The business rule you create in this topic, see Overview of Using Business Rules with Order Management.

Create the Orchestration Process

  1. In the Navigator, click Setup and Maintenance.

  2. In the Setup and Maintenance work area, go to the task.

    • Offering: Order Management

    • Functional Area: Orders

    • Task: Manage Orchestration Process Definitions

  3. On the Manage Orchestration Process Definitions page, click Actions > Create.

  4. On the Create Orchestration Process Definition page, set values, then click Save.

    Attribute Value

    Process Name

    Pause_for_Gold

    Process Display Name

    Pause_for_Gold

    Process Class

    Ship Order Class

    Set

    Common Set

Add Orchestration Process Steps

You will add these steps.

Orchestration Process Steps

Try it.

  1. On the Step Definition tab, click Actions > Add Row.

  2. Set values, then click Save.

    Attribute Value

    Step Name

    Schedule Goods

    Step Type

    Service

    Task

    Schedule

    Service

    Create Scheduling

  3. Add more steps. Repeat steps 1 and 2. Use these values.

    • Create Reservation

    • Create Shipment

    • Wait for Shipment Advice

    • Create Invoice

    • Wait for Invoice

    Note.

    • Set the Step Type attribute for all steps to Service.

    • Set other attributes so they reflect step behavior.

      For example, for the Create Reservation step, set these values.

      Attribute Value

      Step Type

      Service

      Task

      Reserve

      Service

      Create Inventory Reservation

    • Make sure you set the Exit Criteria attribute for each wait step. For example, set Exit Criteria for the Wait for Shipment Advice step to Shipped.

  4. Add the pause step. Click the Create Reservation step, click Add Row, set values in the new row, then click Save.

    Attribute Value

    Step Name

    Pause

    Step Type

    Service

    Task

    Pause

    Service

    Pause Process

Create If Statement for First Rule

You will create the start-after condition. This condition determines whether the customer is Gold.

You will create this If statement.

If Statement for First Rule

where

  • DOOFLine is a function in the DooSeededOrchestrationRules dictionary.

  • DOO is an abbreviation for distributed order orchestration, which is an earlier name for order orchestration.

  • FLine is an abbreviation for fulfillment line.

  • demandClassCode is a fulfillment line attribute. This attribute stores the customer class, such as Gold, Silver, or Bronze.

  • isn't determines whether demandClassCode contains Gold.

  • For details about these values, see the Guidelines for Pausing Orchestration Processes topic.

Create the If statement for the first rule.

  1. Create the rule.

    • On the Pause step, in the Pause Rule column, click Click for Rule.

    • In the Start After Condition dialog, click Add Rule, then replace Rule 1 with Pause for Gold Customers.

    • Click Expand > Show Advanced Settings.

    • Add a check mark to Advanced Mode.

  2. Specify the dictionary and facts to examine.

    • In the IF area, in the window to the left of Is A, enter header.

    • Set the window to the right of Is A to DooSeededOrchestrationRules.DOOHeader.

    • Click Add Pattern.

    • In the window to the left of Is A, enter FLine.

    • Set the window to the right of Is A to DooSeededOrchestrationRules.DOOFLine.

  3. Make sure to evaluate only fulfillment lines.

    • Under FLine, click Add Test.

    • Click Left Value.

    • In the Condition Browser, expand Header, click ChildFLines, then click OK.

    • Change Is to Contains.

    • Click Right Value.

    • In the Condition Browser, click FLine, then click OK.

  4. Make sure the attribute you're about to test isn't empty.

    • On the test you just added, to the far right, click the down arrow, then click Simple Test.

    • On the new line that displays, click Left Value.

    • In the Condition Browser, expand FLine.

      Notice that each value under FLine references a fulfillment line attribute.

    • Click demandClassCode, then click OK

    • Change Is to Isn't.

    • Click Right Value.

    • In the Condition Browser, click null, then click OK.

  5. Determine whether the customer is Gold.

    • On the test you just added, to the far right, click the down arrow, then click Simple Test.

    • On the new line that displays, click Left Value.

    • In the Condition Browser, expand FLine.

    • Click demandClassCode, then click OK.

    • In the Right Value window, enter "Gold".

      You must include the double quotation marks ( " " ).

Create Then Statement for First Rule

You will create this Then statement.

Then Statement for First Rule

For brevity, this screen print doesn't include the entire value for the event.

Create the Then statement for the first rule.

  1. In the Then area, click Add Action > Assign.

  2. Click Select a Target, then click header.SacResult.

  3. In the window to the right of the equal sign ( = ), enter this value.

    ( eventName:"Gold Preorders", reevaluateFlag:"N",sacType:DooSeededOrchestrationRules.SacResult.SAC_TYPE_EVENT )

    where

    • eventName is a variable that you can use to help track the status of the pause task. The Order Management work area uses the text you enter wherever it displays status details, such as in the Gantt chart on tab Orchestration Plan of page Orchestration Process that the user can access from page Manage Orchestration Process. This example specifies to use event Gold Preorders.

    • reevaluateFlag:"N" specifies not to evaluate this rule again.

    • sac is an abbreviation for start after condition.

    • sacType specifies the dictionary, rule set, and event to use for the start after condition.

    • DooSeededOrchestrationRules is a dictionary that contains predefined rules you can use in your business rule.

    • SacResult is a rule set in DooSeededOrchestrationRules. It contains events and variables you can use to specify how to handle the result of a start after condition.

    • EVENT is an event in SacResult. It specifies to raise a business event.

    • A pause type of EVENT causes the orchestration process to pause until an event occurs.

    • An attribute on a scheduled process references this event, but you can also use it with a web service. You can also use other parameters to release a pause task. This event isn't related to the events that the event framework in Oracle Middleware uses.

    • You must include double quotation marks ( " " ).

  4. Click Save.

Create the Second Rule

You will create this rule.

the Second Rule

Try it.

  1. On the Pause step, in the Pause Rule column, click Click for Rule.

  2. In the Pause Rule Set dialog, in the check box to the left of Pause for Gold Customers, add a check mark.

  3. Click Cut > Paste.

  4. Scroll down to the bottom of the dialog and notice the rule that the paste added.

  5. Make these changes to this new rule.

    Replace This Value . . . . . . With This Value

    Pause for Gold Customers

    Skip Customers Who Are Not Gold

    FLine.demandClassCode is "Gold"

    FLine.demandClassCode isn't "Gold"

    header.sacResult = ( eventName:"Gold Preorders", reevaluateFlag:"N",sacType:DooSeededOrchestrationRules.SacResult.SAC_TYPE_EVENT )

    header.sacResult = ( eventName:"Gold Preorders", ( reevaluateFlag:"N", sacType:DooSeededOrchestrationRules.SacResult.SAC_TYPE_IMMEDIATE )

    Start after condition IMMEDIATE ends the pause task and allows the orchestration process to continue to the next step.

  6. Click Save.

  7. On the Edit Orchestration Process Definition page, click Save.

Pause Orchestration Processes Until Time Elapses

Set up a pause task to temporarily stop an orchestration process from running until time elapses.

rule that pauses according to time

Note.

  • Use the Assign action to set the waitDateTime variable.

  • Don't specify a duration for waitDateTime. For example, if you specify a duration of 5 hours, then the rule might convert it to a date and time that already occurred, and the rule will never pause the task because the date that it uses to determine whether to pause already occurred. Instead, specify a date and time.

    For example, Header.getAdjustedDate(null, 1) specifies to get the current system date, and then wait for current system date plus one day before releasing the pause.

    Use dateTime for the first parameter in the function. For example, to wait until two days before the schedule ship date, use Header.getAdjustedDate(FLine.ScheduleShipDate,-2).

  • reevaluateFlag evaluates the conditions in the IF part of the rule to determine whether the condition changed. Set reevaluateFlag to Y only if you must periodically evaluate your rule. If you set it to Y, then carefully consider the interval you use for waitDateTime. For example, if you set getAdjustedDate to refresh every minute, then reevaluateFlag will cause the rule to run the IF statement every minute until it evaluates the condition in the IF statement to True.

Example

Assume you must limit the time you allow your business partners to provide quotes to 90 days. Assume you already set up an extensible flexfield with a context named Quote and segment named quoteexpiration that allows the Order Entry Specialist to use the Order Management work area to specify the expiration date for the quote.

You can create a pause task that expires on the date and time that the expire quote segment specifies. This segment resides in the Quote context of an extensible flexfield.

Here are the rules you create.

Rule Description

Pause for 90 Days

Pause for 90 days without conditions.

Pause Until Quote Expires

Pause task that expires on the date and time that the expire quote segment specifies. This segment resides in the Quote context of an extensible flexfield. If Pause Until Quote Expires expires, then it will override Pause for 90 Days.

Here's the first rule.

rule that Pauses for 90 Days

Note.

Code Description

Priority equals High

Make sure you run this rule before you run any other rule.

Header is a DooSeededOrchestrationRules.DOOHeader and

Declare the Header variable, then load values into Header from the DOOHeader object of the DooSeededOrchestrationRules method. DOOHeader contains order header attributes and their values.

This If statement doesn't include conditional logic because we must run the rule in all conditions.

DooSeededOrchestrationRules.SacResult SAC new DooSeededOrchestrationRules.SacResult()

Create a new instance of the SAC variable, set it to the SacResult type in the DooSeededOrchestrationRules method.

header.sacResult = SAC

Set the value of the sacResult object on the order header to the value that SAC contains.

header.sacResult.reevaluateFlag = "N"

The IF statement doesn't contain a condition that we must reevaluate.

header.sacResult.sacType = DooSeededOrchestrationRules.SacResult.SAC_TYPE_TIMER

Specify the type of pause as a timer.

header.sacResult.waitDateTime = header.GetAdjustedDate(null,90)

Get the current date, add 90 days to it, and store the result in the waitDateTime parameter of the sacResult object on the order header. The rule won't release the pause until waitDateTime occurs.

Here are the parameters that you can use with the GetAdjustedDate function.

  • First parameter. A date, a date variable, or null for current date.

  • Second parameter. Number of days. Use a whole number or a fraction, such as 0.5 for 12 hours.

GetAdjustedDate adds the number of days to the first parameter, then returns the result as date and time.

Here's the If statement for the second rule.

If statement for the second rule

Note.

Code Description

Priority equals Medium

Make sure you run this rule after you run the Pause for 90 Days rule.

If equals True

If all conditions in the If statement are true, then override the Pause for 90 Days rule.

Header is a DooSeededOrchestrationRules.DOOHeader and

Declare the Header variable, then load values into Header from the DOOHeader object of the DooSeededOrchestrationRules method.

DOOHeader contains order header attributes and their values.

Fline is a DooSeededOrchestrationRules.DOOFline and

Declare the Fline (fulfillment line) variable, then load values into Fline from the DOOFline object of the DooSeededOrchestrationRules method.

DOOFline (Distributed Order Orchestration Fulfillment Line) contains fulfillment line attributes and their values.

header.childFLines RL.contains fline

Declare the fline variable into the rules language (RL) dictionary, then set the value of fline to the value that childFLines contains.

This condition makes sure that the fline variable contains a child fulfillment line of the parent sales order that the orchestration process instance is processing. It also makes sure you correctly declare the variable into the dictionary.

flineEFF is a DOOSeededOrchestrationRules.FlexContext

Declare the flineEFF variable, then store the value of object FlexContext into this variable.

Note that the DooSeededOrchestrationRules method contains FlexContext.

flineEFF isn't null

Proceed to the next AND only if the flineEFF variable contains a value.

fline.flexContexts contains flineEFF

Proceed to the next AND only if flineEFF references an extensible flexfield on the fulfillment line.

To reference an extensible flexfield on the order header, use header.flexContexts instead of fline.flexContexts.

flineEFF.context isn't null

Proceed to the next AND only if the context contains a value.

flineEFF.context equals ignore case "Quote"

Proceed to the next AND only if context equals the string Quote.

flineEFF.getFlexAttributeDateValue("quoteexpiration") isn't null

Proceed to the THEN statement only if the Order Entry Specialist enters a value in the flexfield.

Here's the Then statement for the second rule.

Then statement for the second rule

Note.

Code Description

header.sacResult.sacType = DooSeededOrchestrationRules.SacResult.SAC_TYPE_TIMER

Set SacResult so it uses the timer.

header.sacResult.reevaluateFlag = "N"

Don't reevaluate the condition when the timer expires.

This rule doesn't evaluate according to a timer. Instead, it waits until the quote expiration date occurs, so reevaluate isn't necessary.

If the user submits a revision that includes a new value for the date, then the rule reevaluates the date and time, and sets this new time as part of compensation.

header.sacResult.waitDateTime = flineEFF.getFlexAttributeDateValue("quoteexpiration")

Set the waitDateTime variable of the sacResult rule set on the order header to the value that the Order Entry Specialist entered into the flexfield.

Use Case

Assume your supply chain analysis determines it typically requires two days to ship goods from warehouse to customer when your customer orders through your legacy system. Your supply chain uses just-in-time fulfillment. You don't want to send the order to shipping too early to avoid the cost of reserving inventory any time longer than necessary to meet the requested delivery date. So you set up a pause task that pauses the orchestration process until two days before the scheduled ship date occurs.

You create a business rule.

  • If source system is Legacy, then release pause on ShipDate minus two.

Summary of the Set Up

  1. Set up orchestration process.

  2. Create If statement.

  3. Create Then statement.

  4. Deploy the orchestration process. For details, see the Deploy Orchestration Processes topic.

This topic includes example values. You might use different values, depending on your business requirements.

For background details about.

  • Properties you set for the pause task, see the Overview of Pausing Orchestration Processes topic.

  • Business rules, see Overview of Using Business Rules With Order Management.

Set Up Orchestration Process

  1. In the Navigator, click Setup and Maintenance.

  2. In the Setup and Maintenance work area, go to the task.

    • Offering: Order Management

    • Functional Area: Orders

    • Task: Manage Orchestration Process Definitions

  3. On the Manage Orchestration Process Definitions page, click Actions > Create.

  4. On the Create Orchestration Process Definition page, set values, then click Save.

    Attribute Value

    Process Name

    Pause_for_Time

    Process Display Name

    Pause_for_Time

    Process Class

    Ship Order Class

    Set

    Common Set

  5. Set up orchestration process steps.

    Follow the instructions in section Define the Orchestration Process Steps of topic Pause Orchestration Processes Until an Event Occurs.

Create If Statement

Create the If statement that determines whether the source system is Legacy.

If statement that determines whether the source
system is Legacy

Create the If statement.

  1. Create the rule.

    • On the Pause step, in the Pause Rule column, click Click for Rule.

    • In the Start After Condition dialog, click Expand > Show Advanced Settings.

    • Set values.

      Attribute Value

      Name

      Rule That Pauses Until Ready to Ship

      Description

      If source system is Legacy, then release pause on ShipDate minus two.

      Advanced Mode

      Contains a check mark.

      Tree Mode

      Doesn't contain a check mark.

  2. Specify the header.

    • In the IF area, in the Left Value attribute, enter Header.

    • Set the field that's located to the right of Is A to DooSeededOrchestrationRules.DOOHeader.

    • In the IF area, click the down arrow next to the magnifying glass, then click Delete Test.

  3. Specify the line.

    • Click Add Pattern.

    • In the left field, under Add Test, enter Line.

    • Set the field that's located to the right of Is A to DooSeededOrchestrationRules.DOOFLine.

  4. Add the test.

    • Immediately under the left field that contains the value Line, click down arrow > Simple Test.

    • Click Left Value.

    • In the Condition Browser, expand Header.

      Notice that the list displays order header attributes that you can use to specify which attribute to examine. For this example, this If statement creates a filter that causes the rule to only consider source orders where the Source Order System attribute contains a value of LEG, where LEG is an abbreviation for the term legacy.

    • Click sourceOrderSystem > OK.

    • In the Right Value attribute, enter "LEG".

Create the Then Statement

This statement adds the pause and specifies to release it two days before the scheduled ship date occurs.

statement that adds the pause and specifies to
release it two days before the scheduled ship date occurs

Create the Then statement.

  1. Use Assign New to create a variable named DateTime. You will use this variable to calculate the amount of time to delay shipment.

    • In the Then area, click Add Action > Assign New.

    • Click Select a Target > DooSeededOrchestrationRules.Timestamp.

    • In the empty attribute immediately to the right of Select a Target, enter DateTime.

      Don't include quotation marks. Adding DateTime in this attribute creates the variable that this example uses for the date calculation.

  2. Choose the fulfillment line attribute that you will use to calculate the date.

    • Click Expression Value.

    • In the Condition Browser, expand Line.

      The dialog displays a list of fulfillment line attributes. You can set up you rule so it considers the value of one of these attributes.

    • Click scheduleShipDate > OK.

    • Make sure the attribute where you added DateTime still contains DateTime.

    • Click Add Action > Modify.

    • Click Select a Target > DateTime.

  3. Calculate the amount of time to delay shipment.

    • Click Edit Properties.

    • In the Properties dialog, in the Time row, click Value.

    • In the Condition Browser, expand DateTime, then click Time.

      Note that the Condition Browser adds a value of DateTime.time to attribute Expression.

    • In the Expression attribute, append -(2*24*60*60*1000) to the end of DateTime.time.

      where

      • 2 is the number of days.

      • 24 is the number of hours in one day.

      • 60 is the number of minutes in one hour.

      • 60 is the number of seconds in one hour.

      • 1000 is the number of milliseconds in one second.

      This value calculates the number of milliseconds so the pause task ends two days before the orchestration process schedules the order lines for shipping.

      You can use the getAdjustedDate instead function of DateTime.time.

    • Make sure the Expression attribute includes DateTime.time-(2*24*60*60*1000), then click OK.

      For example.

      condition browser with DateTime.time-(2*24*60*60*1000)
    • Make sure the Properties dialog includes the value in the time property.

      values in Properties dialog
    • Click OK.

  4. Pause the orchestration process.

    You will set these properties.

    ( reevaluateFlag:"N", sacType:DooSeededOrchestrationRules.SacResult.SAC_TYPE_TIMER, waitDateTime:DateTime )
    • Click Add Action > Assert New.

    • Click Select a Target > DooSeededOrchestrationRules.SacResult.

    • Click Edit Properties.

    • In the Properties dialog, in the reevaluateFlag row, in the Value attribute, enter "N". You must include the double quotation marks.

    • In the sacType row, click Value.

    • In the Condition Browser dialog, expand DooSeededOrchestrationRules > SacResult, click SAC_TYPE_TIMER, then click .

      A pause type of TIMER causes the orchestration process to pause until time elapses.

    • In the Properties dialog, in the waitDateTime row, click Value.

    • In the Condition Browser, click DateTime, then click OK.

    • Make sure the Properties dialog contains these values.

      dialog with the required values
  5. Click OK, then, in the Pause Rule dialog, click Save.

  6. On the Edit Orchestration Process Definition page, click Save and Close.

Pause Orchestration Processes Until Dependencies Resolve

Set up a pause task to temporarily stop an orchestration process from running until a dependency resolves.

Example

The dependency in this example is to wait for all lines to ship before continuing to the invoicing step.

he dependency in this example is to wait for all
lines to ship before continuing to the invoicing step.

Note.

  • The Pause step references the pause task. The Pause step resides between the Shipping step and the Invoicing step in the orchestration process.

  • If no fulfillment line meets any condition in the IF statement, then all fulfillment lines have shipped, the rule releases the pause, and the flow continues to the next orchestration process step.

Note.

Code Description

Header is a DooSeededOrchestrationRules.DOOHeader

Declare the Header variable, then load values into Header from object DOOHeader of method DooSeededOrchestrationRules.

DOOHeader contains order header attributes and their values.

At least one

Ask a question. Does the sales order include at least one fulfillment line that order fulfillment hasn't shipped, and that order fulfillment can ship?

Fline is a DooSeededOrchestrationRules.DOOFline and

Declare variable Fline (fulfillment line), then load values into Fline from object DOOFline of method DooSeededOrchestrationRules.

DOOFline (Distributed Order Orchestration Fulfillment Line) contains fulfillment line attributes and their values.

Header.allFLinesinTheOrder

Examine all fulfillment lines in the sales order, including lines that the orchestration process isn't currently processing.

A dependency might exist between the fulfillment line that the orchestration process is currently processing, and other fulfillment lines in the sales order, so you must inspect all of them.

Fline.shippableFlag is "Y"

If the shippableFlag attribute on the fulfillment line is Y, then proceed.

Make sure each fulfillment line is shippable. Some items can't ship, such as a subscription. If a fulfillment line contains a subscription, then shippableFlag is N for the line, the rule ignores the line, and moves to the next line.

Fline.actualShipDate is null

If the actualShipDate attribute on the fulfillment line doesn't contain a value, then it indicates the fulfillment line hasn't shipped, and the rule must pause the orchestration process.

Fline.orderedQty more than 0

If the orderedQty attribute on the fulfillment line is 0, then it indicates the fulfillment line is a canceled line, the rule ignores the line, and moves to the next line.

SAC_SYSTEM_EVENT_IPC_PAUSE

Use SAC_SYSTEM_EVENT_IPC_PAUSE, where IPC means Interprocess Communication.

The rule evaluates this type of pause each time a task finishes for each fulfillment line.

reevaluateFlag = Y

Evaluate the condition each time an orchestration process step finishes.

In this example, the Shipping step ships the fulfillment lines, so the rule must evaluate after the Shipping step finishes for each fulfillment line to determine whether order fulfillment shipped all fulfillment lines.

Use Case

This use case coordinates orchestration processes to make sure Order Management invoices all the fulfillment lines that a sales order contains at the same time, even if the shipment dates vary. The orchestration process uses the same sequence of steps to process each fulfillment line, but these lines might not be synchronized.

Assume a school district places a sales order for 600 new history books and requires that they receive the invoice for the sales order only after Order Management ships all books.

Assume that the orchestration process must get the books from different warehouses.

  • Fulfillment line 1 gets 80 books from the Seattle warehouse

  • Fulfillment line 2 gets 400 books from the Denver warehouse

  • Fulfillment line 3 gets 120 books from the Chicago warehouse

You set up an orchestration process that processes the fulfillment lines, pauses until fulfillment shipped all lines, resumes processing, then sends the lines to billing.

Summary of the Steps

  1. Set up the orchestration process.

  2. Create the first rule.

  3. Create the If statement for the second rule.

  4. Create the Then statement for the second rule.

This topic includes example values. You might use different values, depending on your business requirements.

For background details about.

  • Properties you set for the pause task, see the Overview of Pausing Orchestration Processes topic.

  • Business rules, see Overview of Using Business Rules With Order Management.

Set Up the Orchestration Process

For an example that describes how to do this set up, see the Pause Orchestration Processes Until an Event Occurs topic.

  1. Create a new orchestration process and set up the header.

  2. Add orchestration process steps.

    • Schedule

    • Reserve

    • Ship

    • Wait for Shipment

    • Pause

    • Invoice

    • Wait for Billing

Create the First Rule

You will create a business rule.

the First Rule

Note.

Code Description

DooSeededOrchestrationRules

A dictionary that contains predefined rules you can use in your business rule.

DOOHeader

An object in the DooSeededOrchestrationRules dictionary that stores details about the sales order header.

Assign New

Assign DOOHeader as a new object in the DooSeededOrchestrationRules dictionary. This assignment makes the object available throughout your rule.

SacResult

A rule set in the DooSeededOrchestrationRules dictionary. It contains events and variables you can use to specify how to handle the result of a start after condition.

SAC

A value you can set for SacResult. sac is an abbreviation for start after condition.

Assign Header.sacResult = SAC

Set the value of SacResult to SAC.

sacType

A property of SacResult. sacType stores the value that the rule uses to determine whether to pause the orchestration process or release it.

SAC_TYPE_IMMEDIATE

A value of sacType. If sacType contains IMMEDIATE, then the rule will immediately release the pause task.

Header.SacResult.sacType = DooSeededOrchestrationRules.SacResult.SAC_TYPE_IMMEDIATE

Set sacType to SAC_TYPE_IMMEDIATE.

Create the first rule.

  1. On the Pause step, in the Pause Rule column, click Add Rule.

    In the Start After Condition dialog, click Add Rule > Expand > Show Advanced Settings, then set values.

    Attribute Value

    Name

    Default Rule for Dependent Pause

    Description

    Default rule that pauses orchestration process until a dependency resolves.

    Priority

    Highest

    Advanced Mode

    Contains a check mark.

  2. In the field below If, enter an alias, such as Header.

  3. In the field to the right of Is A, select DooSeededOrchestrationRules.DOOHeader.

  4. Click the down arrow next to Right Value, then click Delete Test.

    If you remove the test, then the rule always applies the actions that the Then area contains.

  5. In the Then area, click Add Action, then click Assign New.

  6. Click Select a Target, then click DooSeededOrchestrationRules.SacResult.

  7. In the field to the left of the equal sign (=), enter SAC.

  8. In the field to the right of the equal sign (=), click Expression Value.

  9. In the Condition Browser dialog, expand DooSeededOrchestrationRules, expand SacResult, click New, then click OK.

  10. Click Add Action > Assign.

  11. Click Select a Target, then click Header.sacResult.

  12. In the field to the right of the equal sign (=), enter SAC.

  13. Click Add Action > Assign.

  14. Click Select a Target, then click Header.sacResult.sacType.

  15. In the field to the right of the equal sign (=), click Expression Value.

  16. In the Condition Browser dialog, expand DooSeededOrchestrationRules, expand SacResult, click SAC_TYPE_IMMEDIATE, and then click OK.

  17. Click Validate, then click Save.

Create the If Statement for the Second Rule

You will create this rule.

rule that states if the actual ship date isn't
null on all fulfillment lines, then release

It states that if the actual ship date isn't null on all fulfillment lines, then release the pause task.

First, you create the If statement.

if statement in second rule

where

Code Description

At least one

Pause all shipped lines even if the fulfillment system shipped all lines except one line.

FLine is a OrderHeader/allFLinesIntheOrder

Coordinate across more than one orchestration process when more than one orchestration process processes the fulfillment lines for the sales order.

FLine.actualShipDate is null

Determine whether any of the fulfillment lines haven't shipped.

actualShipDate is null when orchestration starts. Orchestration sets actualShipDate to a value when it ships the item.

Create the If statement for the second rule.

  1. On the Pause step, in the Pause Rule column, click Add Rule.

    In the Start After Condition dialog, collapse the rule you just created.

  2. click Add Rule > Expand > Show Advanced Settings, then set values.

    Attribute Value

    Name

    Rule for Pause Dependency

    Description

    Rule that pauses orchestration process until a dependency resolves.

    Priority

    Medium

    Advanced Mode

    Contains a check mark.

    Tree Mode

    Contains a check mark.

  3. Set Root to DooSeededOrchestrationRules.DOOHeader.

  4. In the If area, in the field to the left of Is A, replace the default value with an alias, such as OrderHeader.

  5. Click the down arrow to the right of Right Value, and then click Delete Test.

  6. Click Add Pattern to the right of the If statement.

  7. To the right of the empty fields, click Surround Pattern with Parenthesis, then click Surround.

  8. In the list of values under And, click At least one.

  9. In the field on the left, under At least one, enter FLine.

  10. In the field to the right of Is A, select OrderHeader/allFLinesIntheOrder.

  11. Click the down arrow next to Add Test, then click Simple Test.

  12. Click Left Value.

  13. In the Condition Browser, expand FLine, click actualShipDate, then click OK.

  14. Click Right Value.

  15. In the Condition Browser, click null, then click OK.

Create the Then Statement for the Second Rule

You will create a Then statement.

Then Statement for the Second Rule

For details about these properties, see the Overview of Pausing Orchestration Processes topic.

Create the Then Statement for the second rule.

  1. In the Then area, click the down arrow next to Add Action, then click Assign.

  2. Click Select a Target, then click OrderHeader.sacResult.eventName.

  3. Click Expression Value.

  4. In the Condition Browser, expand DooSeededOrchestrationRules, expand SacResult, select SAC_SYSTEM_EVENT_IPC_PAUSE, then click OK.

    This step sets up the rule to evaluate fulfillment lines until the flow ships all of them, and then to release them. Interprocess communication (IPC) implements a pause according to an event.

  5. Click the down arrow next to Add Action, then click Assign.

  6. Click Select a Target, then click OrderHeader.sacResult.reevaluateFlag.

  7. In the field to the right of the equal sign (=), enter "Y".

    You must include the double quotation marks.

  8. Click the down arrow next to Add Action, then click Assign.

  9. Click Select a Target, then click OrderHeader.sacResult.sacType.

  10. Click Expression Value on the same line.

  11. In the Condition Browser, expand DooSeededOrchestrationRules, expand SacResult, click SAC_TYPE_EVENT, then click OK.

  12. Click Validate, then click Save.

Resume Paused Orchestration Processes

You must resume the orchestration process that your pause task paused.

Use a scheduled process or a web service to release a pause task so your orchestration process can automatically resume processing sales orders, depending on how you set sacType.

Value of sacType Description

SAC_TYPE_TIMER or SAC_SYSTEM_EVENT_IPC_PAUSE

Let the condition evaluate and release the process, or use one of the set ups described in this topic.

SAC_TYPE_EVENT

You must use one of the set ups described in this topic.

Note: You must release a paused orchestration process. If you don't, then the orchestration process will remain in a paused state, which might result in failed sales orders, failed order fulfillment, and so on.

You can also manually release the pause task.

Use a Scheduled Process to Automatically Release a Pause Task

  1. Go to the Scheduled Processes work area.

  2. On the Scheduled Processes page, click Schedule New Process.

  3. In the Schedule New Process dialog, set the value, and then click OK.

    Attribute Value

    Name

    Release Pause Tasks

    This scheduled process releases a pause task that's waiting for a business event to finish.

  4. Use one of the parameters to specify the orchestration process you must resume, such as Item, Customer, Task Name, and so on.

    For example, if you set up a pause task on an orchestration process that's waiting for the Gold Preorders event, then set the event parameter to Gold Preorders.

    You can also set the Manual Release Type parameter.

    Value Description

    Tasks That Exceed Maximum Retries

    Use this value for most situations.

    Tasks That Can't Establish Wait

    Release a pause task that fails to release because of some problem that's internal to Order Management. Set this value only in consultation with Oracle Support.

  5. Click Submit.

For an example that uses this scheduled process, see the Pause Orchestration Processes Until an Event Occurs topic.

Use a Web Service to Automatically Release the Pause Task

An application that resides outside of Order Management Cloud can call the ReleasePausedTasks operation of the Receive Order Request Service to release a pause task. Use the settings of this service to identify the pause tasks to release. The event handler calls the service to release the pause tasks according to the settings that you specify.

To get the attributes that the sales order references, you can use the order capture service that requests order details.

Manually Release a Pause Task

  1. Sign in with the Order Orchestration Error Recovery Manager role.

  2. Go to the Order Management work area, then navigate to the Orchestration Process page.

  3. Click Release Pause Task.

For details, see the Resume Paused Sales Orders topic.

Hold

Guidelines for Setting Up Holds on Sales Orders

Use these guidelines to help set up sales order holds.

Determine the Type of Hold You Need

You can apply different kinds of holds.

Type Description

Generic

Hold that you apply on any step of an orchestration process. It doesn't apply a hold for a specific task. You enable Hold All Services when you create the hold code.

Service

Hold that you apply on a specific task type and service, such as the Create Billing Lines service of the Invoice task type. You specify the service when you create the hold code.

System

Hold that Order Management automatically applies and releases. Here are some examples.

  • Hold_for_Change_Request. Order Management applies the Hold_for_Change_Request hold when the user revises a sales order so no other user or process can modify the sales order during the revision.

  • DOO_CreditCheck. Order Management applies this hold when the customer exceeds their credit limit. For example, if credit check fails because the customer exceeded their credit limit, then you don't want the orchestration process to proceed to the ship step and ship the item.

Create Your Hold Code

Create Your Hold Code

Note.

  • Use the Setup and Maintenance work area to manage hold codes, orchestration processes, and task types.

  • Use the hold code to specify the task to hold, such as creating the invoice.

  • Specify the service, or specify the task type.

    If You Don't Enable the Hold All Services Option If You Enable the Hold All Services Option

    The service you specify affects each orchestration process step that references the service.

    Assume you.

    • Don't add a check mark to Hold All Services for the HOLD CREATE SHIP hold.

    • On the services tab, you specify the Create Billing Lines service.

    Your hold affects only step 300 of orchestration process ShipOrderGenericProcess because step 300 is the only step that references the Create Shipping service.

    Use this option when you want some of the services of the task type to run but not others. For example, you want to put a hold on Create Shipping until you verify the orchestration process successfully created the shipment request, but you want the process to automatically do the Wait for Shipment task after you remove the hold for Create Shipping.

    The task type you specify affects each orchestration process step that references the task type.

    Assume you.

    • Add a check mark to Hold All Services for the HOLD CREATE SHIP hold.

    • You leave the Services tab empty.

    Your hold affects step 300 and step 400 because these steps reference the Shipment task type.

    Use this option when you don't any part of the task to run. Let's say you're shipping a highly flammable, dangerous item. Before shipping, you place a hold to verify the carrier is licensed to handle hazardous material. Enable the Hold All Services option on the shipping task type to make sure no part of shipping runs.

  • Use the Applicable Roles tab to specify who can apply and release the hold, such as the Order Manager. Note that you can't specify a role for applying a system hold, but you can specify a role to release a DOO_CreditCheck hold.

  • As an option, use the Set attribute of the hold code to specify the business unit where Order Management applies the hold. You can also use Set to create a set of hold codes and apply them all to the same business unit.

  • Order Management automatically enables the Hold Tasks In Progress option when the user applies it on the Order page in the Order Management work area or when you import a hold. Disable this option only if you haven't set up your fulfillment system to correctly interpret it.

  • Order Management comes with a number of predefined hold codes that hold a variety of task types and services. Add your own hold code only if the predefined ones don't meet your needs.

  • Don't set the End Date for a predefined, system hold code, such as HOLD_FOR_CHANGE_REQUEST. Order Management uses these codes internally. If you set the end date on one, you might introduce errors in your implementation. Examine the description to determine whether a predefined hold code is a system hold code. The description usually identifies system holds. For example, here's the description for HOLD_FOR_CHANGE_REQUEST.

    System defined hold code used in change management process

  • If you set the End Date for a hold code, then you can't apply the hold after the end date occurs, but you can release the hold after the end date occurs.

  • If you don't see the task type and service you need on the Services tab, then use the Manage Task Types page to specify the tasks and services that you can choose for the hold. You must set the Hold Enabled option to make the service display on the Services tab. You can't enable some services for hold, such as Billing Response or Wait for Billing. For details, see the Set Up Task Types for Holds topic.

  • If you create a hold code for a long-running task, such as a shipping or invoicing task, then set it up so Order Management applies it on a wait step.

    Using this approach will help to avoid a concurrency problem that happens when the user revises a sales order while a long-running task is running. Placing the hold on a wait step helps to make sure any actions that were in process finish before the user can revise the order.

    An orchestration process that references a service that does a Wait operation is a wait step. To determine which services do a wait operation, go to the Manage Task Types page in the Setup and Maintenance work area, click the row that includes your task type of interest, such as Shipment, then, in the Details area, examine the services. Look for services that do a Wait operation.

    Apply the hold on the Wait for Shipment service for a shipment task, and the Wait for Billing service for an invoice task. Each of these services do a wait operation.

Points to Consider

  • Your downstream fulfillment systems can't finish the task until you release the hold.

  • Order Management ignores a hold that you apply on a pause task. The pause task will resume according to its own conditions.

  • For a configured item, make sure you apply the hold on the configured item. Don't apply a hold on a configure option. For details, see the Sales Order Hold topic.

  • You can't enable a hold on a service that uses a Wait, Apply Hold, Release Hold, or Inbound operation. For example, the Wait for Shipment task places the orchestration process in a wait state that's effectively the same as a hold, so its not necessary to place a hold when the process is already waiting. If you must hold the orchestration process, then add the hold to the step immediately before the Apply Hold, Release Hold, or Inbound operation step.

Example Hold Codes

Here are some examples you might find useful.

Code Name Task Type Service to Hold

DOO_ACTIVTY

HOLD CREATE ACTIVITY

Activity

Create Activity.

DOO_SCHDL

SCHLD

Schedule

Create Scheduling and Cancel Scheduling.

DOO_SCHLD_ALL

SCHLD_ALL

-

All scheduling services.

DOO_RSRV

RESRV

Reservation

Create Reservation and Cancel Reservation.

DOO_RSRV_ALL

RESRV_ALL

-

All reservation services.

DOO_SHIP_CREATE

HOLD CREATE SHIP

Shipment

Create Shipping.

DOO_SHIP_ALL

SHIP_ALL

-

All shipping services.

DOO_RCV_CREATE

HOLD CREATE RECEIVE

Return

Create Expected Receipt Advice.

DOO_INVOICE_CREATE

HOLD CREATE INVOICE

Invoice

Create Billing Lines.

See Where You Can Release Holds

If I Apply Hold Here Can I Release it on Create Order or Revise Order Page in Order Management Work Area Can I Release It in Fulfillment View in Order Management Work Area Can I Release It Through Web Service

Create Order or Revise Order Page in Order Management Work Area

Yes

Yes

Yes, but only if you applied the hold on the order header or order line.

You can't use the web service to release a hold that you apply on a fulfillment line on the Revise Order page.

Fulfillment View

Yes, but only if you applied the hold on the order header or fulfillment line.

You can't use the Revise Page to release a hold that you applied on an order line because you already submitted the order, and Order Management transformed the order line to a fulfillment line.

Yes

Yes, but only if you applied the hold on the order header.

You can't use the web service to release a hold that you apply on a fulfillment line in a fulfillment view.

Web Service

Yes, but only if you applied the hold on the order header.

You can't use the Create page or Revise page to release a hold that you apply on an order line or fulfillment line through the web service.

Yes

Yes

Make Sure You Have the Privileges

A job role has privileges. Make sure you sign in with a job role that has the privileges you need.

What I Need to Do Job Role You Need to Do It Formal Name of Job Role

Set up a hold code.

Order Administrator

ORA_DOO_ORDER_ADMINISTRATOR_JOB

Apply, release, or view a hold on a sales order, order line, or fulfillment line on the Create Order page, Revise Order page, or in a fulfillment view.

Order Entry Specialist or Order Manager

ORA_DOO_ORDER_ENTRY_SPECIALIST_JOB ORA_DOO_ORDER_MANAGER_JOB

View a hold on an orchestration process in a fulfillment view.

Order Manager

ORA_DOO_ORDER_MANAGER_JOB

Apply or release a hold through a web service.

Create your own role.

Add privileges to your role.

  • DOO_MANAGE_ORDER_ORCHESTRATION_DECOMPOSITION_WEB_SERVICE_PRIV

  • DOO_MANAGE_ORDER_ORCHESTRATION_ORDER_MODIFICATION_PRIV

Import Holds Through Web Service

Use a web service to import holds.

Here's an example payload that applies the DOO_SHIP_ALL hold on order line 101 for source order 20156 that you import from source system LEG.

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope> 
  <soapenv:Header/> 
  <soapenv:Body> 
    <dood:RequestHoldProcessRequest>
      <!-1 or more repetitions:--> 
      <dood:ApplyHoldRequestParams>
        <dood:SourceOrderSystem>LEG</dood:SourceOrderSystem> 
        <!--Optional:--> 
        <dood:SourceOrderId>20156</dood:SourceOrderId> 
        <!--Optional:--> 
        <dood:SourceLineId>101</dood:SourceLineId> 
        <!--Optional:--> 
        <dood:SourceHoldCode>DOO_SHIP_ALL</dood:SourceHoldCode> 
        <!--Optional:--> 
        <dood:HoldComments>Hold Shipping</dood:HoldComments> 
        <!--Optional:--> 
        <dood:SourceOrderNumber></dood:SourceOrderNumber> 
        <!--Optional:--> 
        <dood:SourceOrderLineNumber></dood:SourceOrderLineNumber> 
        <!--Optional:--> 
        <dood:HoldName></dood:HoldName> 
        <!--Optional:--> 
        <dood:AppliedBy>?</dood:AppliedBy>
      </dood:ApplyHoldRequestParams>
    </dood:RequestHoldProcessRequest>
  </soapenv:Body> 
</soapenv:Envelope>

Here's an example payload that releases the hold.

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope> 
  <soapenv:Header/> 
  <soapenv:Body> 
  <dood:ReleaseHoldProcessRequest>
    <!-1 or more repetitions:--> 
    <dood:ReleaseHoldRequestParams>
        <dood:SourceOrderSystem>LEG</dood:SourceOrderSystem> 
        <!--Optional:--> 
        <dood:SourceOrderId>20156</dood:SourceOrderId> 
        <!--Optional:--> 
        <dood:SourceLineId>101</dood:SourceLineId> 
        <!--Optional:--> 
        <dood:SourceHoldCode>DOO_SHIP_ALL</dood:SourceHoldCode> 
        <!--Optional:--> 
        <dood:HoldReleaseReasonCode>DOO_RELEASE_SHIP</dood:HoldReleaseReasonCode> 
        <!--Optional:--> 
        <dood:HoldComments>Remove Hold</dood:HoldComments> 
        <!--Optional:--> 
        <dood:SourceOrderNumber>?</dood:SourceOrderNumber> 
        <!--Optional:--> 
        <dood:SourceOrderLineNumber>?</dood:SourceOrderLineNumber> 
        <!--Optional:--> 
        <dood:HoldName>?</dood:HoldName> 
        <!--Optional:--> 
        <dood:HoldReleaseReasonName>?</dood:HoldReleaseReasonName> 
        <!--Optional:--> 
        <dood:ReleasedBy>?</dood:ReleasedBy>
      </dood:ReleaseHoldRequestParams>
    </dood:ReleaseHoldProcessRequest>
  </soapenv:Body> 
</soapenv:Envelope>

Note.

  • Use web service ReceiveOrderRequestService. For details, see the Web Services You Can Use to Integrate Order Management topic.

  • To apply a hold on the order header, include a value for SourceOrderId but not for SourceLineId. The hold will apply to the header and all lines in the order.

  • To apply or release a hold on the order line, you must include a value for SourceOrderId and for SourceLineId.

  • Apply or release a hold on more than one sales order. Use the same soapenv:Header and soapenv:Body, and include a separate RequestHoldProcessRequest section or ReleaseHoldProcessRequest section for each sales order. For example.

    <soapenv:header> ..... </soapenv:header>
    <soapenv:body>
    <RequestHoldProcessRequest>
       <SalesOrderNumber>1234</SalesOrderNumber>
       <SalesOrderSystem>GPR</SalesOrderSystem>
    </RequestHoldProcessRequest>
    <RequestHoldProcessRequest>
       <SalesOrderNumber>2345</SalesOrderNumber>
       <SalesOrderSystem>GPR</SalesOrderSystem>
    </RequestHoldProcessRequest>
    </soapenv:body>
    
  • You can't include RequestHoldProcessRequest and ReleaseHoldProcessRequest in the same soapenv:Body.

  • The web service imports the order with the Hold Tasks In Progress option as enabled when applying or releasing a hold.

  • If you apply or release a hold on any source line that's part of a shipment set, then Order Management applies or releases the hold on all lines that are part of the set.

    If you apply a hold on a line that's part of a shipment set, then Order Management queries the database to determine whether other lines in the same shipment set exist on the sales order. If it doesn't find any other lines in the set, then it applies the hold only on the line that you specify in the payload. The same behavior applies when you release a hold.

    Assume shipment set n includes lines x, y, and z. If your import applies a hold on line x, then Order Management applies the same hold on lines y and z. Order Management applies the hold on lines y and z even if you don't include them in your payloads.

  • You can use the web service to apply or release a hold on a sales order that's in Draft status.

Migrate Your Hold Setups

For details, see the Copy Setups Between Instances of Order Management topic.

Set up a hold code that allows your users to place a hold on a sales order.

The hold stops the service that the orchestration process references.

You can set up a hold code only for a hold that originates in Order Management. You can't use it for a hold that originates in some other application.

Summary of the Set Up

Assume you're an order administrator for Vision Corporation, and your sales engineers have informed you that a problem might exist with an item. You must create a hold code that your users can use to temporarily hold all sales orders that reference the item while your sales engineers investigate the problem.

  1. Create a hold code.

  2. Specify job roles that manage holds.

  3. Create a release reason.

  4. Test your set up.

This topic includes example values. You might use different values, depending on your business requirements.

Create a Hold Code

  1. In the Navigator, click Setup and Maintenance.

  2. In the Setup and Maintenance work area, go to the task.

    • Offering: Order Management

    • Functional Area: Orders

    • Task: Manage Hold Codes

  3. On the Manage Hold Definitions page, click Actions > Add Row, then set values.

    Attribute Value

    Code

    hold_item_issue

    Name

    Hold to Investigate Item

    Description

    This hold allows us to investigate a problem that occurred with the item.

    Hold All Services

    Contains a check mark.

    This value specifies to apply a hold on all services. Task layer services determine whether Order Management attaches a hold code to the fulfillment line, or to the sales order for one or more fulfillment tasks that the orchestration process references.

    Set

    COMMON

    You can use Set to specify the business unit set that Order Management uses with a hold code. You can assign a hold code to a single business unit, or you can assign more than one hold code to sets of business units. These sets can share hold codes.

  4. Optional. Specify each service where Order Management must apply the hold.

    For example, do these steps to apply the hold only for the Shipment service.

    • Make sure the Hold All Services option doesn't contain a check mark.

    • In the Hold to Investigate Item: Services area, click Actions > Select and Add.

    • In the Select and Add: Services dialog, leave all attributes empty, then click Search.

    • Click a row that displays Shipment in the Task Type column.

    • For this example, you must apply the hold to all services, so click Cancel, then add a check mark to option Hold All Services.

  5. Click Save.

Specify Job Roles That Manage Holds

As an option, you can specify who can apply or release a hold according to the job role that the user uses when signing into Order Management.

Order Management might place a sales order on hold for a variety of reasons. Your business requirements might demand that a person who possesses the correct knowledge or authority to release a hold. Controlling holds according to job role helps you improve security by limiting functionality according to role. It also helps you decrease order processing time and reduce downstream problems that might be related to a hold that nobody released.

For example, allow role x to apply and release hold 1, and apply hold 2 but not release hold 2.

how you can use one role to control apply and release
differently for different holds

Assume you must allow the Order Manager job role to apply and release a hold, and allow the Order Entry Specialist job role to apply a hold but not release it.

Specify job roles that manage holds.

  1. In the Details area, click Applicable Roles, then, in the Apply Hold area and in the Release Hold area, make sure the Selected Roles option is black.

  2. Click Actions > Select and Add.

  3. In the Search dialog, search for Order Manager, then click Apply > OK.

  4. Click Actions > Select and Add.

  5. In the Search dialog, search for Order Entry Specialist, then click Apply > OK.

  6. In the Details area, set options for the roles.

    Role Apply Hold Release Hold

    Order Manager

    Contains a check mark.

    Contains a check mark.

    Order Entry Specialist

    Contains a check mark.

    Doesn't contain a check mark.

  7. Click Save and Close.

Create Your Own Job Role

If none of the predefined job roles meet your needs, then create your own job role.

Assume users in the Vision Services department of Vision Corporation receive service calls from customers who are inquiring about the status of a sales order, such as what item the customer ordered, and expected delivery date. The user must view the sales order, but not edit it. Assume you already created a user named order_entry_specialist_vision_services to meet this requirement.

For details about job roles, see the Assign Job Roles in Order Management topic.

Create your own job role.

  1. Examine the predefined job roles to determine whether any of them meet your needs.

    • Scan the Security Reference for Order Management book.

    • For this example, examine the Privileges section in the Job Role: Order Entry Specialist chapter, then notice the View Orders privilege.

  2. Sign into Oracle Applications with job role IT Security Manager (ora_fnd_it_security_manager_job).

  3. Create the job role.

    • In the Navigator, click Setup and Maintenance.

    • In the Setup and Maintenance work area, go to the task.

      • Offering: Order Management

      • Functional Area: Users and Security

      • Task: Manage Job Roles

    • On the Roles page, click Create Role, set values, then click Next.

      Attribute Value

      Role Name

      View Orders

      Role Code

      view_orders

      Role Category

      SCM - Job Roles

    • Click Add Function Security Policy.

    • In the Add Function Security Policy dialog, search for View Orders, click Add Privilege to Role, confirm the addition, then click Cancel.

    • On the Create Role View Orders: Function Security Policies page, click Next several times until you reach the Users page.

    • On the Create Role View Orders: Users page, search for, then add the order_entry_specialist_vision_services user.

      The values you can search for depend on the users you created in your environment.

    • Click Next > Save and Close.

  4. Get LDAP (Lightweight Directory Access Protocol) changes.

    • In the Navigator, click Scheduled Processes.

    • On the Scheduled Processes page, run the Retrieve Latest LDAP Changes scheduled process.

    • In the Confirmation dialog, note the process number, such as 75603.

    • On the Scheduled Processes page, click Actions > Refresh. Continue to refresh until the status of your scheduled process is Succeeded.

  5. Synchronize users and roles.

    • In the Navigator, click Setup and Maintenance.

    • On the Setup and Maintenance page, search for, then open Run User and Roles Synchronization.

      For details about this task, see book SCM Cloud: Implementing Common Features for Oracle SCM Cloud.

    • On the page that displays, click Submit.

  6. Use the Manage Hold Definitions page to add your new job role to the hold code.

Create a Release Reason

Create a reason that your user can choose to indicate why they released the hold.

Create a reason that your user can choose to indicate
why they released the hold.

Try it.

  1. In the Setup and Maintenance work area, go to the task.

    • Offering: Order Management

    • Functional Area: Orders

    • Task: Manage Order Lookups

  2. On the Manage Order Lookups page, enter the value, then click Search.

    Attribute Value

    Lookup Type

    DOO_HLD_RELEASE_REASON

  3. In the DOO_HLD_RELEASE_REASON: Lookup Codes area, click Actions > New then set values.

    Attribute Value

    Lookup Code

    doo_hldrel_item_ok

    Display Sequence

    1

    Start Date

    The current date.

    End Date

    One week from today.

    Meaning

    Fixed Problem with Item

    Description

    Fixed the problem with the item.

  4. Click Save and Close.

Test Your Set Up

  1. Sign into Order Management with the Order Manager job role.

  2. In the Order Management work area, on the Overview page, click Actions > Manage Orders.

  3. On the Manage Orders page, enter the value, then click Search.

    Attribute Value

    Status

    Equals Processing

  4. In the search results, in the Order column, click a link.

  5. On the Order page, in the Order Lines area, click Apply Hold.

  6. In the Apply Hold dialog, set the value, then click Save and Close.

    Attribute Value

    Hold Name

    Hold to Investigate Item

    This is the name of the hold that you created earlier in this topic.

  7. In the Order Lines area, to verify that Order Management placed a hold on the order line, make sure it displays the On Hold icon.

    verify that Order Management placed a hold
  8. Click the arrow next to Apply Hold, then click Release Hold.

  9. In the Release Hold dialog, set values, then click Save and Close. You defined these values earlier in this topic.

    Attribute Value

    Hold Name

    Hold to Investigate Item

    Release Reason

    Fixed the Item Problem

  10. Sign out of Order Management, then sign back in with the Order Entry Specialist role.

  11. Repeat the steps described above, but verify that Order Management doesn't display Release Hold when you click the arrow next to Apply Hold.

Use a web service to manage sales order holds across systems and channels, including your source systems and fulfillment systems.

flow of  how you can use a web service to manage
sales order holds across channels

Note.

  • Apply or release a hold regardless of the channel where you applied it.

  • Apply hold n in fulfillment system x, then release it in fulfillment system y.

  • Use web services to communicate changes through Order Management to your fulfillment systems.

  • Release holds in the Order Management work area.

Here's an example web service payload that uses the SourceHoldCode attribute to apply and release a hold.

example payload that illustrates how you can use
attribute SourceHoldCode to apply and release a hold through a web
service

Note.

  • The top line in the image is truncated. Here's the full line.

    <soapenv:Evelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:dood=href
  • Release a hold regardless of the channel that applied the hold. For example, assume fulfillment system x is a channel, fulfillment system y is a channel, and the Order Management work area is a channel. Assume fulfillment system x uses a web service to apply hold on sales order 759674. You can use the Order Management work area to release the hold on sales order 759674.

  • Use a web service to release a hold on a sales order header that the Order Management work area applied.

  • Use a web service to apply a hold on a fulfillment line.

  • Use the Order Management work area to manually release a hold that a web service automatically placed.

  • Use the Order Management work area to manually apply a hold on a Draft sales order.

  • Use the Order Lines tab in a fulfillment view in the Order Management work area to apply a hold on a fulfillment line. The Order page that you access from the Manage Orders page is an example of a fulfillment view.

Note the limitations.

  • Release a hold on a fulfillment line only from the Order Lines tab in a fulfillment view in the Order Management work area.

  • You can't use a web service to release a hold on a fulfillment line.

  • You can't use a web service to apply a hold on a fulfillment line when the web service integrates with an order capture system. Most order capture systems focus on inputs to sales order, such as customer and item. They don't integrate directly with a fulfillment system, so they don't provide or manage the details that a fulfillment line hold requires.

Set Up Task Types for Holds

The Order Entry Specialist can choose the service when placing a hold on a sales order or order line, such as the shipping service. If you create your own task type that references the service, then you must set up the task type so it supports the hold.

If you create your own task type that references
the service, then you must set up the task type so it supports the
hold.

Assume you create your own task type named My Shipment. You want to allow the Order Entry Specialist to place the sales order on hold when the order reaches the orchestration process step that references the My Shipment task type.

  1. In the Setup and Maintenance work area, go to the task.

    • Offering: Order Management

    • Functional Area: Orders

    • Task: Manage Task Types

  2. On the Manage task types page, click Actions > Add Custom, set values, then click Save.

    Attribute Value

    Task Type

    My Shipment

    Description

    My Shipment

  3. Click the row that contains My Shipment in the Task Type column.

  4. Click Services.

    Notice that the Manage Task Types page automatically adds a create service and enables it for holds.

    Code Name Operation Code Hold Enabled

    My Shipment Create

    My Shipment Create

    Create

    Contains a check mark.

    Don't modify this service.

  5. Add a service that applies the hold and another one that releases the hold.

    For example.

    Code Name Operation Code Hold Enabled

    Hold My Shipping

    Hold My Shipping

    Apply hold

    Doesn't contain a check mark.

    Release Hold on My Shipping

    Release Hold on My Shipping

    Release hold

    Doesn't contain a check mark.

  6. Click Save and Close.

Fulfillment Task

Use a task type to specify the type of fulfillment task that the orchestration process step does, such as schedule a fulfillment line for shipment, ship it, or confirm delivery.

A task type is group of services that Order Management uses to do a fulfillment task. It represents a common business function that processes a sales order from the time your user creates the sales order to the time that Order Management sends the order to your order fulfillment system.

Here are some typical task types, the services they call, and the sequence you use to run them. This example starts with reservation.

typical task types, the services they call, and
the sequence you use to run them.

Note.

  • Each predefined task type comes with a set of services.

  • Reservation is an example of a task type. It contains a set of services that communicate with your fulfillment system to reserve inventory according to the Item attribute and Quantity attribute of your fulfillment line. For example, it uses the Create Inventory Reservation service to reserve supply in inventory.

  • A typical sequence is to use services to reserve inventory for your item, schedule it for shipping, ship it, then invoice it.

    • Create Inventory Reservation

    • Create Schedule

    • Create Shipping

    • Create Billing Lines

You can.

  • Use a task to represent the services that the task type references. For example, if you create a Ship Goods task that references services from the Shipment task type, then the Order Management work area displays Ship Goods when a Shipment service runs, regardless of whether it calls the Create Shipment service or the Update Shipment service. The Order Management work area doesn't display the service. It displays only the task.

  • Create a new task type.

  • Add more than one task to your new task type, such as ShipGoods or ShipWidgets.

  • Add a predefined service to your new task type.

  • Edit the service names of an activity or task type you create.

You can't.

  • Modify the name of a task type after you create it because other objects in your setup might reference the name.

  • Modify or delete a predefined task type.

  • Edit or delete a predefined service.

Predefined Task Types

To reduce set up time and maintenance, use a predefined task type. Create a new task type only if the predefined ones don't meet your needs.

Here are some task types you frequently use.

Task Type Description

Schedule

Schedule the fulfillment line.

Reservation

Reserve inventory for the item.

Shipment

Communicate with your fulfillment system to ship the item.

Invoice

Communicate with your billing system to create an invoice for the fulfillment line.

Return

Communicate with your fulfillment system to return the item.

FulfillOrder

Integrate between Order Management and an Enterprise Resource Planning (ERP) system. Note that fulfillment tasks can run more than one fulfillment action through a single request, such as shipment and invoice.

Pause

Temporarily pause processing to wait until a date to occur, an event to occur, or a dependency to resolve before proceeding to the next orchestration process step.

Use the pause task to coordinate processing across more than one fulfillment line in one sales order.

Activity

Communicate with your fulfillment system to manage a human activity, such as install the AS54888 Desktop Computer.

DOO_Procurement

Source and ship the item when you procure the item from an organization that resides outside of your typical supply chain.

DOO_Supply

Communicate with Oracle Fusion Supply Chain Orchestration so you can use more complex logic when you source the item.

Use the Manage Task Types page in the Setup and Maintenance work area to get the complete list of task types and the services you can use with each task type.

Create Your Own Task Type

The Create Orchestration Process Definition page references the Manage Task Types page to get the values it displays for the task, type task, and service that you can choose on each step.

The Create Orchestration Process Definition page
references the Manage Task Types page to get the values it displays
for the task, type task, and service that you can choose on each step.

Note.

  • Use the Manage Task Types page to create your own task type.

  • Add services to your task type.

  • For example, the Schedule task type includes services.

    • Create Scheduling

    • Update Scheduling

    • Cancel Scheduling

  • Set the task type, task, and service on the step.

Task Services

Use different task services to fulfill different types of fulfillment requests.

Use different task services to fulfill different
types of fulfillment requests.

Note.

  • You set the task service on the orchestration process step.

  • Each service does a specific fulfillment task, such as Create Scheduling.

  • The service communicates a fulfillment request to an application in your fulfillment system. For example.

    • The Create Scheduling service communicates with Order Promising.

    • The Create Inventory Reservation, Create Shipping, and Wait for Shipment services communicate with Inventory Management.

    • The Create Billing Lines and Wait for Billing services communicate with Receivables.

  • Fulfillment systems communicate updates back to the services, such as status.

  • Communication occurs through the external interface.

  • You can set up other fulfillment systems. For details, see the Integrate chapter in the Implementing Order Management book.

Activity Services

Activity services send an activity request to your fulfillment system. The fulfillment system creates and fulfills the activity, then sends replies and updates to the activity service. The activity service interprets these replies and updates.

An activity is an event that occurs outside of Order Management Cloud. For example, an orchestration process might include an activity task type to set up a network router.

  • An activity contains the details needed to finish the task.

  • Your users can do an activity as part of finishing order fulfillment. Order Management can assign an activity to one of your users.

  • Each activity includes attributes, such as subject, activity type, earliest start date, due date, scheduled duration, actual duration, percent complete, and assignee.

  • Order Management can associate an activity with one or more fulfillment lines.

  • The activity service doesn't typically immediately fulfill an activity task, so a wait service allows the orchestration process to wait for the activity to finish.

  • Order Management doesn't support partial fulfillment. An activity step must finish before the orchestration process can proceed to the next orchestration process step.

Note.

Service Feature Description

Send request to fulfillment system.

Send a Create Activity request to the fulfillment system that creates the activity.

If the service receives a change order, then it changes or cancels the activity, as necessary.

If Order Management applies a hold on a sales order, then the activity service sends a request to the fulfillment system to hold the activity that's currently in progress.

Receive activity status update.

You can schedule an orchestration process that periodically gets the updated activity status.

Modify activity.

  • An activity is a predefined task type. You can also create a new activity task type, and use an extensible flexfield to modify an activity.

  • You can enable an activity default in a task type or orchestration process step. Default the activity type so you can categorize activities, then your fulfillment system can run business logic and do validation according to the activity type.

  • If you don't set the default value for the task type or the orchestration process step, then Order Management sets the subject of the activity to the name of the step.

  • You can use some fulfillment systems to create an activity template that supports a human task. To use the template, you can specify the activity template for a task type or an orchestration process step that creates the activity according to the predefined template when you define the task type and the orchestration process.

Reserve, Schedule, and Hold Services

Use these services to orchestrate the item in inventory.

Service Description

Reserve services

Send a reservation request to the part of your fulfillment system that manages inventory. A reservation reserves the supply for a sales order so no other sales order or inventory system can use the supply.

Schedule services

Send a scheduling request to order promising. For example, to schedule a sales order, remove the schedule from a sales order, or determine whether the item is available.

  • Scheduling applies to fulfillment lines that are waiting for manual scheduling and fulfillment lines that fail scheduling in the automated or manual process.

  • Scheduling works only for fulfillment lines that aren't scheduled. Order Management doesn't allow automatic rescheduling from the Order Management work area.

Hold services

Send a hold request to the fulfillment system. For example, the Hold Shipping service can send a hold request from Order Management to the part of your fulfillment system that does shipping.

Shipment Services

Shipment services send a shipment request to the part of your fulfillment system that does shipping.

Service Feature Description

Send shipment request to fulfillment system.

If Order Management receives a change order, then the shipment service changes or cancels the shipment request, if necessary.

If someone applies a shipping hold, and if the Hold on Running Task option is enabled, and if the task that's running is a Shipping task, then the shipment service sends a request to the shipping system to hold the shipment request that its currently processing.

Consolidate fulfillment lines.

Consolidate the fulfillment lines of a shipment set or a configured item, then send all the lines of the shipment set or the configured item as a group to the shipping system.

Receive fulfillment line details and status updates from the shipping system and update business objects in Order Management.

The shipping system might send fulfillment line details to Order Management when a status update occurs, including before it confirms the shipment. These details might include freight cost, tracking number, way bill number, and so on.

Order Management interprets the update it gets from the shipping system, then uses one of these predefined values to update status.

  • Picked

  • Packed

  • Shipped

  • Backordered

Note.

  • The shipment service continues to interpret the updates it receives from the shipping system even after the shipping system ships fulfillment lines. It sends details about these updates to Order Management.

  • If the shipping system uses more than one currency to represent cost, then the shipment service converts them before it sends the update to Order Management.

  • If the shipping system uses a unit of measure to represent shipping that's different from the unit of measure that Order Management uses in the sales order, then the shipment service converts the unit of measure back to the unit of measure that the sales order uses, then communicates the shipped quantity to Order Management.

Split a fulfillment line, shipment set, or configured item when only part of a shipment ships.

If only part of a fulfillment line ships, then the shipment service splits the line into.

  • One fulfillment line that includes the quantity that shipped

  • Another fulfillment line that includes the quantity that didn't ship

If only some fulfillment lines ship for a.

  • Shipment set. The shipment service removes the lines that didn't ship from the shipment set.

  • Configured item. The shipment service splits the configured item into a shipped item and an item that hasn't shipped.

Invoice Services

Invoice services send a request to the part of your fulfillment system that does billing and interprets the replies it receives from this system.

  • The billing system creates the invoice and the credit transactions.

  • Order Management doesn't allow you to modify a fulfillment line after the invoice service sends the request.

  • If you use a source system that resides outside of Order Management, then the source system must provide most of the data that the billing system requires to finish billing. Order Management stores these details, then routes the billing request to the billing system.

Service Feature Description

Send fulfillment line details from the fulfillment system.

The Create Billing Lines service sends billing details from the sales order or the return order each time the fulfillment line is eligible for billing. For example, it sends unit list price, unit selling price, discounts, charges, tax attributes, sales credits, and fulfillment details.

  • An invoice service sends charges that occur in the order header with the first fulfillment line that Order Management fulfills for the sales order.

  • If the fulfillment line doesn't include payment details or sales credits, then the invoice service sends these details from the order header.

  • The invoice service sends prepayment details from the order header for all fulfillment lines.

  • Order Management doesn't support discounts that occur in the order header.

Return lines

The invoice service sends the reference to the original sales order line, the return reason, received quantity, and delivered quantity.

Shipment set or configured item

The invoice service sends the fulfillment lines that the shipment set or the configured item contains together. If the fulfillment system fulfills only some lines in the shipment set or configured item, then the invoice service sends only the fulfilled lines.

Note: A change order from Order Management can't update an invoice. A change to an invoice is typically a credit from a return order or prepayment. Its not typically a cancel.

The billing system processes the data that it receives, then sends details to the invoice service.

  • Invoice details

  • Credit memo details

  • Billing amount

  • Billing date

  • Invoice date or credit memo date

  • Number

  • Status

  • Legal entity details

It sends one of these statuses.

  • Await Billing

  • Billed

Return Services

Return services send a request to the part of your fulfillment system that does receiving and interprets the reply and update that it receives from the receiving system.

  • The return service creates a change receipt advice or a cancel receipt advice when Order Management receives a return request.

  • The request might include one or more attribute updates, such as to increase the receipt quantity.

  • If Order Management receives a request to change the original copy of the sales order that the customer returned, then the return service sends a request to the fulfillment system that creates the receipt advice.

  • If Order Management receives a request to cancel the original copy of the sales order line that the customer returned, then the return service cancels the receipt advice. Order Management typically allows cancel until the fulfillment system receives the returned items.

  • If the ordered quantity is greater than the delivered quantity on the receipt advice, and if the customer doesn't require the ordered quantity, then the return service can request to cancel the remaining quantity.

How Return Services Handle Partial Returns

Return services can process a partial receipt, such as the return of only some items of a configured item.

If the customer returns only part of the return, then the return service splits the fulfillment line into two lines.

  • One line includes a status of Delivered for the items the customer returned

  • One line includes the items the customer didn't return

If the customer returns only part of the original order, and if the return includes a configured item or kit, then the return service splits the fulfillment line into two orchestration groups.

  • One group includes the fulfillment lines that the customer returned

  • One group includes the fulfillment lines that the customer didn't return or that aren't returnable

How Return Services Handle Events

The receiving system that starts the event might send a status update for the return. For example, if the receiving dock receives the item, then the receiving system might send a status update that starts an event that creates the receipt advice. Here are the events in the receiving system that might start a status update in Order Management.

  • Receive the item on the receiving dock when the receipt is created.

  • Deliver the item into inventory.

  • Return the item to a customer.

  • Correct the sales order after a receipt transaction occurs. For example, a customer can't return a deliver transaction.

Fulfill Order Services

Fulfill order services send a request to and receives a status update from your fulfillment system. They can also send a request to and receive a status update from a system that manages enterprise resource planning (ERP).

Fulfill order services can send a request that modifies a sales order that resides in Order Management, and that the fulfillment system uses.

  • Create.

  • Update.

  • Place hold.

  • Release hold.

  • Update status.

  • Cancel.

Fulfill order services also.

  • Send an update to the fulfillment system each time Order Management accepts a change order that affects fulfillment.

  • Receive interim and final status updates from the fulfillment system. Fulfill order services don't immediately send a reply. They send the reply when the fulfillment activity runs.

For more details, see the Parameters You Can Use When Routing Requests to Fulfillment Systems topic.

Create Your Own Task Type

Create a task type that specifies the services you need to finish a fulfillment task.

Assume you need to create a new task type named Pause_for_Backorder.

  1. Add the task type.

    • In the Navigator, click Setup and Maintenance.

    • In the Setup and Maintenance work area, go to the task.

      • Offering: Order Management

      • Functional Area: Orders

      • Task: Manage Task Types

    • On the Manage Task Types page, click Actions > Add Custom.

    • The page adds a new row. Enter a value.

      Attribute Value

      Task Type

      Pause_for_Backorder

    • Step out of the Task Type attribute.

    Notice that the page adds services in the Services list. The page copies the value you enter in the Task Type attribute, appends it with the type of service, such as Create, then inserts the value in the Code column of the service. For example.

    Code Name

    Pause_for_Backorder Create

    Pause_for_Backorder Create

    Pause_for_Backorder Inbound

    Pause_for_Backorder Inbound

    Note.

    • One service references the outbound Create operation code.

    • One service references the Inbound operation code.

    • You can specify a name for each service, and you can add a service that references some other operation code, such as Change, Get Status, Apply Hold, Release Hold, or Cancel. You must create at least one task for each new task type.

    • If you step out of the Task Type attribute, and then come back to the Task Type attribute and change the value, then the page doesn't update values in the Code column, and values between the task type and the services it references will be different. If you then click Save, the Code attribute in the Services list becomes read-only and you can't change it. The task type and its services will work, but having code names that are different from the task type might be confusing in other parts of your set up. So, its recommended that, if you change the Task Type attribute, that you also change the Code in the Services list before you click Save.

      For example, assume you create a new task type, set the Task Type attribute to Pause_for_Backorder, tab out of the attribute, the page adds service Pause_for_Backorder Create, you change the Task Type attribute to Pause_for_Backorder_During_Drop_Ship, but the Code attribute in the service is still Pause_for_Backorder Create. Its recommended that you change the Code column in the services lists to Pause_for_Backorder_During_Drop_Ship Create before you click Save.

  2. Assign a status code to the task type.

    Order Management sets a default value for some system status codes, such as Pending, Change Pending, Cancel, or Canceled. The status code that each task type references also controls the values for the exit criteria on a wait step that uses the task type, and the value of the task status in the next orchestration process step. You can create a new status code, or you can assign a status code that already exists.

  3. Click Save.

  4. Connect Order Management to the fulfillment system that will do the tasks and services that your new task type references.

  5. Reference your new task type when you create the orchestration process step.

    Reference it in the same way you reference a predefined task type.

For details about exit criteria, branches, wait steps, and using a task type in an orchestration process, see the Orchestration Processes chapter in the Implementing Order Management book.

Optional Setup for New Task Types

Type of Setup Description

Preprocessing

Add preprocessing logic. For example.

  • Set default values for data onto the outbound request.

  • Validate data on the outbound request.

Postprocessing

Add postprocessing logic. For example.

  • Set default values for data on the inbound request.

  • Validate data on the inbound request.

  • Interpret attributes or messages that your fulfillment system returns that might require Order Management to split processing across more than one orchestration process.

Change management

Use change management on an orchestration process step that references your new task type. Specify the attributes for the task type on the Manage Order Attributes That Identify Change page.

Make sure your task type references the Update service and the Cancel service, and the connectors that these services require.

Hold code

To apply a hold to your new service, create hold codes for it. Hold All applies to your new service and to services that already exist.

Jeopardy threshold

To include a jeopardy score for your new task, set up a jeopardy threshold for it.

Processing constraint

Create a processing constraint that controls when to use your new task. For example, use a processing constraint that specifies the attributes that are required in the outbound request or on the inbound reply.

Data set used as part of outbound request

Consider these requests.

  • GetValidFLineData

  • The preprocessing service

  • Routing rules for the interface layer

If you use one of them, then the template task uses a complete data set to communicate Order Management attributes.

Reduce the data set to make processing more efficient.

Register error messages

If your fulfillment system sends error messages to Order Management and you prefer to process and display them in Order Management, then you must register them.

Maintain Data Integrity

Order Management automatically maintains data integrity for your new task type.

  • Makes sure the service data object includes data for each required attribute.

  • Determines the transaction data to update as a result of the service call to your fulfillment system. This data resides in the transaction tables that Order Management uses.

Maintaining data integrity makes sure the task type you create displays correctly throughout the Order Management work area. Order Management also makes sure functionality works correctly with your new task type.

  • Status update

  • Wait step

  • Forward planning

  • Jeopardy

  • Hold processing

  • Split processing

  • Change management

  • Error recovery

Guidelines for Reserving Inventory

Reserve inventory to make sure its available for your sales order when its time to pick your item in the warehouse.

Reserve supply for a sales order so no other demand can use the supply. Demand includes other fulfillment lines in your sales order, fulfillment lines in other sales orders, transfer orders, work orders, and so on.

Reserve supply for a sales order so no other demand
can use the supply.

You use the Create Inventory Reservations fulfillment task to reserve supply. Here's what it does.

  • Uses your inventory system to reserve physical supply that currently exists in the warehouse.

  • Doesn't reserve future supply, such as supply that's scheduled to be built.

  • Reserves supply for each fulfillment line.

  • Reserves the entire quantity on the fulfillment line.

    • You can't reserve only part of the quantity.

    • If the entire quantity isn't available in inventory, then the reservation task doesn't reserve any quantity.

      For example, if the quantity on fulfillment line x for item AS54888 is 4, and if there's only a quantity of 3 in inventory, then the reservation task doesn't reserve any quantity.

  • Reserves only from inventory that's currently available. It doesn't reserve according to date. It reserves from current inventory even if your sales order includes a scheduled ship date that occurs in the future.

  • Automatically reserves each item where you set the Reservable attribute and the Back-to-Back Enabled attribute to Yes for the item in Product Information Management.

  • Reserves items that aren't configured and items that are configured.

  • Reserves all items in each assemble-to-order model, pick-to-order model, kit, or ship set together. It doesn't reserve individual items or only some items in each model, kit, or ship set.

    Assume you sell a desktop computer as a model, and the model includes the CPU, memory, hard drive, monitor, keyboard, and mouse. If inventory has everything in stock except the memory, then the task doesn't reserve anything.

You can't reserve.

  • Coverage, such as a warranty for a desktop computer

  • Subscription, such as a magazine subscription

  • Item that a lot or serial controls from a specific lot or a specific set of serial numbers

  • From a specific subinventory.

  • Through a web service.

Set Up Your Orchestration Process

The predefined DOO_OrderFulfillmentGenericProcess orchestration process comes already set up with a step that references the create reservation task. Use it to automatically reserve inventory.

  • Reserve only according to quantity.

  • Your flow must provide the item, quantity, unit of measure, and warehouse.

  • Reserve the total requested quantity or it fails. You can't use it to reserve only part of the quantity.

  • It doesn't consider the requested date.

Use DOO_OrderFulfillmentGenericProcess or create a copy of it, then add an optional pause step.

Add an optional pause step

Note.

  • Use the pause step to pause the orchestration process until the shipment is almost ready to ship.

  • The reservation step will provide a more accurate picture of supply that's available because it's closer to the ship date.

  • Waiting to reserve supply can also reduce the cost of holding inventory until it's time to ship.

If you.

  • Enable the Manual Attribute on any step in the orchestration process. Order Management enables the Reserve action on the Management Fulfillment Lines page and waits for the user to manually reserve the fulfillment line.

  • Don't enable it on any step.. Order Management disables the Reserve action and the process doesn't wait for the user to manually reserve the fulfillment line.

The step details in the graphic might be a little hard to read. Here are the same details.

Step Step Name Step Type Task Type Task Service Manual

100

Pause for Inventory

Service

Pause

Pause

Pause Process

Doesn't contain a check mark

200

Create Reservation

Service

Reservation

Reserve

Create Inventory Reservation

Contains a check mark

Reserve Supply Automatically for Your Item

Try it.

  1. Set up your item in Product Information Management.

    • In the Navigator, click Product Management > Product Information Management.

    • On the Product Information Management page, search for your item, then open it for editing.

    • On the Edit Item page, click Specifications.

    • Click Inventory, then set the attribute.

      Attribute Value

      Reservable

      Yes

    • Click Sales and Order Management, then set the attribute.

      Attribute Value

      Back-to-Back Enabled

      Yes

  2. Add a reserve step to your orchestration process.

Reserve Supply Manually for Your Item

Try it.

  1. In the Order Management work area, click Tasks > Manage Fulfillment Lines, then search for your fulfillment line.

  2. In the search results, in the General Tab, click the link next to Orchestration Process Number, such as 300100181483263.

  3. On the Orchestration Process page, click Fulfillment Lines.

  4. Click Actions > Reserve.

Use Global Order Promising

Use Global Order Promising to reserve supply.

  • Global Order Promising is an application that collects supply data from a planning system and promises to reserve the supply it collects.

  • Supply isn't physical inventory. Its planned supply that the factory hasn't built yet.

  • You can set up Global Order Promising to account for expected future supply and to split a fulfillment line.

  • Recall that the reservation service in Order Management doesn't consider future supply. It only reserves from on-hand inventory.

  • If you use Global Order Promising to reserve future supply, then don't use the reservation service in Order Management. Use one or the other, but not both at the same time.

There's a trade off between using Global Order Promising and the reservation service in Order Management. If there isn't enough supply to fulfill the line by the request date, and if you set the Allow Partial Shipments of Lines attribute on the line to Yes, then.

  • The scheduling service in Global Order Promising will split the line into two lines. The second line will contain a future date.

  • The reservation service in Order Management never splits the line, so it fails.

If you use Global Order Promising to schedule your fulfillment lines, then consider removing the reserve step from your orchestration process. If you must keep the reserve step, or if you don't use Global Order Promising, then.

  • Enable the Manual property on the step so the user must click a button when close to the request date.

  • Only send lines to the reservation step that you can fulfill with the inventory that you have on hand. Or use a pause step to pause lines that you can't fulfill from on-hand inventory. The pause delays the reservation until nearer the request date.

Another option is to remove the reserve step and let shipping handle reserving inventory.