PA Task Upload

Description

PA Task Upload creates and updates Oracle Projects tasks – the work breakdown structure under an existing project, with top tasks and subtasks – from Excel, via the standard Oracle public API.

When to use it

  • Bulk-create a new work breakdown structure (top tasks plus subtasks) on an existing project.
  • Add several subtasks under existing parent tasks in one pass.
  • Mass-update task attributes – organization, task manager, work type, dates, billing/burden/transfer-price schedules, or the task flags.
  • Apply consistent billing and burden setup across many tasks at once.
  • Populate or update task-level descriptive flexfield values in bulk.
  • Round-trip existing tasks (download, edit, re-upload) instead of editing them one at a time.

Before you start

  • Blitz Report is installed and you are signed in to a responsibility with access to the operating unit.
  • The project already exists – this upload does not create projects.
  • For versioned-workplan projects, a working structure version exists.

Step 1 – Choose a mode, set the parameters and download

In Blitz Report, open PA Task Upload, choose an Upload Mode (Create for an empty template, or Create, Update to download existing tasks), and set the parameters:

ParameterPurpose
Upload ModeCreate or Create, Update. Default is Create.
Operating UnitThe operating unit (required); drives the project pickers.
Project Number / Name / Type / StatusRestrict which project’s tasks are downloaded.

Run the upload to download and open the Excel file. Each task is automatically handled as a create or an update depending on whether it already exists in the project.

Step 2 – Enter the tasks

On each row enter the Project Number, the Task Number and Task Name. To nest a subtask, set its Parent Task Number to an existing task in the same project; leave it blank for a top task. Add the Organization, Task Manager, dates, classification and flags as needed.

Step 3 – Validate and Save

Click Validate and Save. This checks for missing required values and runs the upload’s validation, then saves the file. Correct anything it flags before continuing.

Step 4 – Upload and view the result

Back in Blitz Report, click Upload and select your saved file. This submits the Blitz Upload request, which creates or updates each task. When it finishes, a result report opens showing each row as success or error.

What’s produced

  • Created and updated project tasks (top tasks and subtasks) in the work breakdown structure.
  • A result report listing every row with a status (success or error) and a message.

Common questions

Can I create a project with this?
No. It only adds or updates tasks inside an existing project.

Can I delete a task?
No. There is no delete action or delete column.

How do I make a subtask?
Put the parent’s task number in the Parent Task Number column; leave it blank for a top-level task. The parent task must already exist.

Can I change a task’s number on update?
No. The task number is the key used to find the task; other attributes are updated.

Why did my upload fail with a structure-version error?
The project has workplan versioning enabled but no working structure version. Create one in Projects (Workplan tab) and re-run.

I can’t see another user’s project tasks – why?
You need the “PA: Cross Project User — Update” profile option enabled for your responsibility.

Troubleshooting

MessageCauseWhat to do
Parent task number not found in projectThe Parent Task Number doesn’t match an existing task in that project.Correct the parent task number, or create the parent task first.
The structure version cannot be updatedA versioned-workplan project has no working structure version.In Projects, open the Workplan tab and update the workplan to create a working version, then re-run.
Operating-unit context could not be initializedThe operating unit isn’t accessible to the responsibility.Run under a responsibility with access to that operating unit.
Organization / work type / schedule is not validA supplied value isn’t valid for the task/project context.Use the dropdowns to pick valid values that belong to the same operating unit/project.
API returned an unspecified errorThe Oracle API failed without a message.Check the request log and re-validate the row’s values against the source project setup.
select
null action_,
null status_,
null message_,
null request_id_,
null modified_columns_,
-- operating unit
haouv.name operating_unit,
-- project
ppv.segment1 project_number,
ppv.name project_name,
ppv.project_type,
ppv.project_status_m project_status,
ppf0.full_name project_manager,
-- task
pt.task_id,
pt.task_number,
pt.task_name,
pt.long_task_name,
pt.description,
lpad(' ',2*(pt.wbs_level-1))||pt.wbs_level wbs_level,
pt2.task_number parent_task_number,
-- task dates
pt.start_date,
pt.completion_date end_date,
-- organization
haouv2.name organization,
-- task manager
ppf.full_name task_manager,
-- service type
xxen_util.meaning(pt.service_type_code,'SERVICE TYPE',275) service_type,
-- work type
pwtv.name work_type,
-- flags
decode(pt.chargeable_flag,'Y',xxen_util.meaning('Y','YES_NO',0)) allow_charges,
decode(pt.billable_flag,'Y',xxen_util.meaning('Y','YES_NO',0)) billable,
decode(pt.ready_to_bill_flag,'Y',xxen_util.meaning('Y','YES_NO',0)) ready_to_bill,
decode(pt.ready_to_distribute_flag,'Y',xxen_util.meaning('Y','YES_NO',0)) ready_to_distribute,
decode(pt.limit_to_txn_controls_flag,'Y',xxen_util.meaning('Y','YES_NO',0)) limit_to_txn_controls,
decode(pt.receive_project_invoice_flag,'Y',xxen_util.meaning('Y','YES_NO',0)) receive_inter_project_invoices,
decode(pt.retirement_cost_flag,'Y',xxen_util.meaning('Y','YES_NO',0)) retirement_cost,
-- billing schedules
xxen_util.meaning(pt.labor_sch_type,'PROJECT SCHEDULE TYPE',275) labor_schedule_type,
psbrsa4.std_bill_rate_schedule labor_std_bill_rate_schedule,
pt.labor_schedule_fixed_date,
pt.labor_schedule_discount,
xxen_util.meaning(pt.labor_disc_reason_code,'RATE AND DISCOUNT REASON',275) labor_discount_reason,
xxen_util.meaning(pt.non_labor_sch_type,'PROJECT SCHEDULE TYPE',275) non_labor_schedule_type,
haouv4.name non_labor_bill_rate_org,
psbrsa5.std_bill_rate_schedule non_labor_std_bill_rate_sched,
pt.non_labor_schedule_fixed_date,
pt.non_labor_schedule_discount,
xxen_util.meaning(pt.non_labor_disc_reason_code,'RATE AND DISCOUNT REASON',275) non_labor_discount_reason,
pt.labor_cost_multiplier_name,
psbrsa1.std_bill_rate_schedule employee_bill_rate_schedule,
psbrsa2.std_bill_rate_schedule job_bill_rate_schedule,
psbrsa3.std_bill_rate_schedule non_labor_bill_rate_schedule,
xxen_util.meaning(pt.invoice_method,'INVOICE METHOD',275) invoice_method,
xxen_util.meaning(pt.gen_etc_source_code,'PA_TASK_LVL_ETC_SRC',275) generate_etc_source,
xxen_util.meaning(pt.adj_on_std_inv,'PA_ADJ_ON_STD_INV',275) adjust_on_standard_invoice,
-- burden schedules
pirsab1.ind_rate_sch_name cost_burden_schedule,
pt.cost_ind_sch_fixed_date cost_ind_schedule_fixed_date,
pirsab2.ind_rate_sch_name revenue_burden_schedule,
pt.rev_ind_sch_fixed_date revenue_ind_sched_fixed_dt,
pirsab3.ind_rate_sch_name invoice_burden_schedule,
pt.inv_ind_sch_fixed_date invoice_ind_sched_fixed_dt,
-- cross charge
decode(pt.allow_cross_charge_flag,'Y',xxen_util.meaning('Y','YES_NO',0)) allow_cross_charge,
decode(pt.cc_process_labor_flag,'Y',xxen_util.meaning('Y','YES_NO',0)) cross_charge_process_labor,
decode(pt.cc_process_nl_flag,'Y',xxen_util.meaning('Y','YES_NO',0)) cross_charge_process_non_labor,
pctsb1.name labor_transfer_price_schedule,
pt.labor_tp_fixed_date labor_transfer_price_fixed_dt,
pctsb2.name non_labor_transfer_price_sched,
pt.nl_tp_fixed_date non_labor_xfer_price_fxd_dt,
-- intercompany
pctsb3.name ic_labor_transfer_price_sched,
pt.ic_labor_tp_fixed_date ic_labor_transfer_price_fxd_dt,
pctsb4.name ic_non_lab_xfer_price_sched,
pt.ic_nl_tp_fixed_date ic_non_lab_xfer_price_fxd_dt,
-- rate info
gdct1.user_conversion_type project_rate_type,
pt.project_rate_date,
gdct2.user_conversion_type task_functional_cost_rate_type,
pt.taskfunc_cost_rate_date task_functional_cost_rate_date,
-- capital interest
decode(pt.cint_eligible_flag,'Y',xxen_util.meaning('Y','YES_NO',0)) capital_interest_eligible,
pt.cint_stop_date capital_interest_stop_date,
-- address
hl.address1||nvl2(hl.city,', '||hl.city,null)||nvl2(hl.state,', '||hl.state,null)||nvl2(hl.country,', '||hl.country,null) address,
-- customer
hp.party_name customer_name,
-- DFF
xxen_util.display_flexfield_context(275,'PA_TASKS_DESC_FLEX',pt.attribute_category) attribute_category,
xxen_util.display_flexfield_value(275,'PA_TASKS_DESC_FLEX',pt.attribute_category,'ATTRIBUTE1',pt.rowid,pt.attribute1) attribute1,
xxen_util.display_flexfield_value(275,'PA_TASKS_DESC_FLEX',pt.attribute_category,'ATTRIBUTE2',pt.rowid,pt.attribute2) attribute2,
xxen_util.display_flexfield_value(275,'PA_TASKS_DESC_FLEX',pt.attribute_category,'ATTRIBUTE3',pt.rowid,pt.attribute3) attribute3,
xxen_util.display_flexfield_value(275,'PA_TASKS_DESC_FLEX',pt.attribute_category,'ATTRIBUTE4',pt.rowid,pt.attribute4) attribute4,
xxen_util.display_flexfield_value(275,'PA_TASKS_DESC_FLEX',pt.attribute_category,'ATTRIBUTE5',pt.rowid,pt.attribute5) attribute5,
xxen_util.display_flexfield_value(275,'PA_TASKS_DESC_FLEX',pt.attribute_category,'ATTRIBUTE6',pt.rowid,pt.attribute6) attribute6,
xxen_util.display_flexfield_value(275,'PA_TASKS_DESC_FLEX',pt.attribute_category,'ATTRIBUTE7',pt.rowid,pt.attribute7) attribute7,
xxen_util.display_flexfield_value(275,'PA_TASKS_DESC_FLEX',pt.attribute_category,'ATTRIBUTE8',pt.rowid,pt.attribute8) attribute8,
xxen_util.display_flexfield_value(275,'PA_TASKS_DESC_FLEX',pt.attribute_category,'ATTRIBUTE9',pt.rowid,pt.attribute9) attribute9,
xxen_util.display_flexfield_value(275,'PA_TASKS_DESC_FLEX',pt.attribute_category,'ATTRIBUTE10',pt.rowid,pt.attribute10) attribute10,
null publish_structure,
0 upload_row
from
pa_projects_v ppv,
pa_tasks pt,
pa_tasks pt2,
hr_all_organization_units_vl haouv,
hr_all_organization_units_vl haouv2,
hr_all_organization_units_vl haouv4,
per_all_people_f ppf,
per_all_people_f ppf0,
pa_project_parties ppp,
pa_work_types_vl pwtv,
pa_std_bill_rate_schedules_all psbrsa1,
pa_std_bill_rate_schedules_all psbrsa2,
pa_std_bill_rate_schedules_all psbrsa3,
pa_std_bill_rate_schedules_all psbrsa4,
pa_std_bill_rate_schedules_all psbrsa5,
pa_ind_rate_schedules_all_bg pirsab1,
pa_ind_rate_schedules_all_bg pirsab2,
pa_ind_rate_schedules_all_bg pirsab3,
pa_cc_tp_schedules_bg pctsb1,
pa_cc_tp_schedules_bg pctsb2,
pa_cc_tp_schedules_bg pctsb3,
pa_cc_tp_schedules_bg pctsb4,
gl_daily_conversion_types gdct1,
gl_daily_conversion_types gdct2,
hz_party_sites hps,
hz_locations hl,
hz_cust_accounts hca,
hz_parties hp
where
1=1 and
ppv.template_flag='N' and
ppv.org_id=haouv.organization_id and
ppv.project_id=pt.project_id and
pt.parent_task_id=pt2.task_id(+) and
pt.carrying_out_organization_id=haouv2.organization_id and
pt.task_manager_person_id=ppf.person_id(+) and
trunc(sysdate) between ppf.effective_start_date(+) and ppf.effective_end_date(+) and
ppv.project_id=ppp.project_id(+) and
ppp.project_role_id(+)=1 and
nvl(ppp.end_date_active(+),sysdate)>=sysdate and
ppp.resource_source_id=ppf0.person_id(+) and
trunc(sysdate) between ppf0.effective_start_date(+) and ppf0.effective_end_date(+) and
pt.work_type_id=pwtv.work_type_id(+) and
pt.emp_bill_rate_schedule_id=psbrsa1.bill_rate_sch_id(+) and
pt.job_bill_rate_schedule_id=psbrsa2.bill_rate_sch_id(+) and
pt.non_lab_std_bill_rt_sch_id=psbrsa3.bill_rate_sch_id(+) and
pt.labor_std_bill_rate_schdl=psbrsa4.std_bill_rate_schedule(+) and
pt.labor_bill_rate_org_id=psbrsa4.org_id(+) and
pt.non_labor_std_bill_rate_schdl=psbrsa5.std_bill_rate_schedule(+) and
pt.non_labor_bill_rate_org_id=psbrsa5.org_id(+) and
pt.cost_ind_rate_sch_id=pirsab1.ind_rate_sch_id(+) and
pt.rev_ind_rate_sch_id=pirsab2.ind_rate_sch_id(+) and
pt.inv_ind_rate_sch_id=pirsab3.ind_rate_sch_id(+) and
pt.non_labor_bill_rate_org_id=haouv4.organization_id(+) and
pt.labor_tp_schedule_id=pctsb1.tp_schedule_id(+) and
pt.nl_tp_schedule_id=pctsb2.tp_schedule_id(+) and
pt.ic_labor_tp_schedule_id=pctsb3.tp_schedule_id(+) and
pt.ic_nl_tp_schedule_id=pctsb4.tp_schedule_id(+) and
pt.project_rate_type=gdct1.conversion_type(+) and
pt.taskfunc_cost_rate_type=gdct2.conversion_type(+) and
pt.address_id=hps.party_site_id(+) and
hps.location_id=hl.location_id(+) and
pt.customer_id=hca.cust_account_id(+) and
hca.party_id=hp.party_id(+)
Parameter NameSQL textValidation
Upload Mode
:p_upload_mode like '%' || xxen_upload.action_update
LOV
Operating Unit
haouv.name=:p_operating_unit
LOV
Project Number
ppv.segment1=:p_project_number
LOV
Project Name
ppv.name=:p_project_name
LOV
Project Type
ppv.project_type=:p_project_type
LOV
Project Status
ppv.project_status_m=:p_project_status
LOV