My Oracle Support Banner

When Running a Synchronization in Primavera Gateway That Contains a Custom Script the Error "com.oracle.pgbu.gsl.GSLTimeoutException: The script has exceeded the excecution time set and has quit executing" Occurs (Doc ID 2747918.1)

Last updated on JANUARY 29, 2021

Applies to:

Primavera P6 Enterprise Project Portfolio Management Cloud Service - Version 19.12 and later
Primavera Gateway - Version 19.12 and later
Primavera Unifier Cloud Service - Version 19.12 and later
Information in this document applies to any platform.

Symptoms

When attempting to run a synchronization with a custom step, the step fails with a timeout on larger projects.

ERROR
-----------------------
The following error seems to always occur around 5 seconds:

com.oracle.pgbu.gsl.GSLTimeoutException: The script has exceeded the excecution time set and has quit executing at com.oracle.pgbu.gsl.GSLContext.checkTimeout(GSLContext.java:109)
at com.oracle.pgbu.gsl.ASTForStatement.interpret(ASTForStatement.java:34)
at com.oracle.pgbu.gsl.ASTCompilationUnit.interpret(ASTCompilationUnit.java:25)
at com.oracle.pgbu.gsl.GSL.run(GSL.java:29)


STEPS
-----------------------
The issue can be reproduced at will with the following steps:
1. In Gateway go to the Configuration tab.
2. Click on the Custom Steps tab
3. Click Add

  1. Enter a name for the custom step
  2. Select P6 from the Provider list
  3. Select Source from the Flow Side list
  4. Select Project from the Flow Type list
  5. Place the custom step after the Load from Source step by choosing a sequence number between 10 and 20
  6. Save the changes.

4. Click on the up arrow below the step ^ . This will expand the formula at the bottom of the page.
5. Copy the formula below into the window and click Validate to verify it was copied correctly.
for(wbs: <WBS>){
  wbs.WBSPath = wbs.Code; //2
    if(wbs.ParentObjectId != ""){
      <WBS> parent = <WBS>.findOne( w -> w.ObjectId == wbs.ParentObjectId);
      wbs.WBSPath = parent.Code + "." + wbs.WBSPath; //3
      if(parent.ParentObjectId != ""){
         parent = <WBS>.findOne( w -> w.ObjectId == parent.ParentObjectId);
         wbs.WBSPath = parent.Code + "." + wbs.WBSPath; //4
         if(parent.ParentObjectId != ""){
            parent = <WBS>.findOne( w -> w.ObjectId == parent.ParentObjectId);
            wbs.WBSPath = parent.Code + "." + wbs.WBSPath; //5
            if(parent.ParentObjectId != ""){
               parent = <WBS>.findOne( w -> w.ObjectId == parent.ParentObjectId);
               wbs.WBSPath = parent.Code + "." + wbs.WBSPath; //6
               if(parent.ParentObjectId != ""){
                 parent = <WBS>.findOne( w -> w.ObjectId == parent.ParentObjectId);
                 wbs.WBSPath = parent.Code + "." + wbs.WBSPath; //7
                 if(parent.ParentObjectId != ""){
                   parent = <WBS>.findOne( w -> w.ObjectId == parent.ParentObjectId);
                   wbs.WBSPath = parent.Code + "." + wbs.WBSPath; //8
                   if(parent.ParentObjectId != ""){
                     parent = <WBS>.findOne( w -> w.ObjectId == parent.ParentObjectId);
                     wbs.WBSPath = parent.Code + "." + wbs.WBSPath; //9
                     if(parent.ParentObjectId != ""){
                       parent = <WBS>.findOne( w -> w.ObjectId == parent.ParentObjectId);
                       wbs.WBSPath = parent.Code + "." + wbs.WBSPath; //10
                       if(parent.ParentObjectId != ""){
                         parent = <WBS>.findOne( w -> w.ObjectId == parent.ParentObjectId);
                         wbs.WBSPath = parent.Code + "." + wbs.WBSPath; //11
                         if(parent.ParentObjectId != ""){
                           parent = <WBS>.findOne( w -> w.ObjectId == parent.ParentObjectId);
                           wbs.WBSPath = parent.Code + "." + wbs.WBSPath; //12
                           if(parent.ParentObjectId != ""){
                             parent = <WBS>.findOne( w -> w.ObjectId == parent.ParentObjectId);
                             wbs.WBSPath = parent.Code + "." + wbs.WBSPath; //13
                             if(parent.ParentObjectId != ""){
                               parent = <WBS>.findOne( w -> w.ObjectId == parent.ParentObjectId);
                               wbs.WBSPath = parent.Code + "." + wbs.WBSPath; //14
                               if(parent.ParentObjectId != ""){
                                 parent = <WBS>.findOne( w -> w.ObjectId == parent.ParentObjectId);
                                 wbs.WBSPath = parent.Code + "." + wbs.WBSPath; //15
                               }
                            }
                         }
                      }
                    }
                 }
              }
            }
         }
       }
     }
   }
  }
wbs.WBSPath = wbs.ProjectId + "." + wbs.WBSPath; //1
}
2. Create a new field to store the WBS Path. The field must match the field name used in the script.

  1. Go to the Configuration tab
  2. Click on the Field Mapping Templates tab
  3. Select WBS from the drop-down
  4. Click Add
  5. In the P6: WBS  drop-down select Add New Field...  and enter a name for the WBS Path that will be calculated using the custom script. e.g WBSPath
  6. In the Gateway: WBS drop-down select Add New Field....  and enter a name for the WBS Path that will be calculated using the custom script. e.g WBSPath
  7. In the Unifier: WBS drop-down select Add New Field...  and enter a name for the WBS Path that will be calculated using the custom script. e.g WBSPath
  8. Click Add
  9. Save the changes

3. Edit the P6 to Unifier synchronization, select the new field mapping for WBS Path on the Mappings screen and select the custom script on the Custom Steps screen.
4. Synchronize a large P6 project from P6 to Unifier using the modified synchronization.

Cause

To view full details, sign in with your My Oracle Support account.

Don't have a My Oracle Support account? Click to get started!


In this Document
Symptoms
Cause
Solution
References


My Oracle Support provides customers with access to over a million knowledge articles and a vibrant support community of peers and Oracle experts.