Tree Classes Implementation

You will often want to create a new tree. The following procedure discusses this action in more detail.

The TreeMover Application Engine program uses the Tree API (and File Layouts) for importing a tree from a flat file or exporting a tree to a flat file.

To create a new tree:

In this example, you are creating a new tree based on an existing tree structure. The following is the complete code sample: the steps explain each line.

Local ApiObject &Session; 
Local ApiObject &TreeList, &MyTree; 
Local ApiObject &LvlColl; 
 
&Session = %Session; 
 
&MyTree = &Session.GetTree();
   /* create new tree */ 

If All(&MyTree) Then 
  &TreeReturn = &MyTree.Create("", "", "PERSONAL_DATA2", "1999-06-01", "PERSONAL_DATA"); 
 
   If &TreeReturn <> 0 then
      /* check PSMessages collection */
   End-if;

   &MyTree.description = "test tree"; 
    
   /* add level */ 
   &LvlColl = &MyTree.levels; 
   &Level = &LvlColl.add("FIRST LVL"); 
   &Level.description = "First Level"; 
 
   /* add root node */ 
   &RootNode= &MyTree.insertroot("00001");
 
If ALL(&RootNode) Then 
 /* insert a leaf */
       &NewLeaf = &RootNode.InsertChildLeaf("8000", "8999"); 
 
   /* save new tree */ 
   &RSLT = &MyTree.Save(); 
 
   /* Do error checking */ 
   If &RSLT <> 0 Then 
      /* errors occurred = do error checking */ 
      &ERRORCOL = &Session.PSMessages; 
      For &I = 1 To &ERRORCOL.count 
         /* do error processing */ 
      End-For; 
   Else 
      /* no errors - saved correctly - do other processing */ 
   End-If;
End-if;

End-if;
  1. Get a session object.

    Before you can get a tree, you have to get a session object. The session controls access to the tree, provides error tracing, enables you to set the runtime environment, and so on. Use the %Session system variable to return a reference to the current PeopleSoft session.

    &Session = %Session;
  2. Get a tree object.

    Use the GetTree method specifying a null value (" ") to return a closed tree object.

    &MyTree = &Session.GetTree();
  3. Create the Tree.

    The Create method creates a new tree with the name PERSONAL_DATA2. To ensure that you have a valid tree, use the All built-in function. Description is a required property (if you don’t specify something for Description you cannot save the tree.)

    &TreeReturn = &MyTree.Create("", "", "PERSONAL_DATA2", "1999-06-01", "PERSONAL_DATA"); 
     
    &MyTree.description = "test tree";
  4. Add a level.

    To add a level, you have to instantiate a level collection. Although there aren’t any levels in the tree, you can still access this collection. Use the Add method with the level collection to add a new level. Remember, the level name must be 8 characters or less. Description is a required property (if you don’t specify something for Description you cannot save the tree.)

    &LvlColl = &MyTree.levels; 
    &Level = &LvlColl.add("FIRST LVL"); 
    &Level.description = "First Level";
  5. Add the root node.

    Because this is a new tree, you must first add the root node.

    &RootNode = &MyTree.insertroot("00001");
  6. Add a leaf.

    To add a new leaf, you must have a reference to the parent node object. Using the All built-in function ensures that there is a root node before you try to insert the leaf with the InsertChildLeaf method.

    If ALL(&RootNode) Then 
       &NewLeaf = &RootNode.InsertChildLeaf("8000", "8999");
  7. Save the tree.

    When you execute the Save method, the new tree is saved to the database.

    &RSLT = &MyTree.Save();

    Note: If you’re running the tree API from an Application Engine program, the data won’t actually be committed to the database until the Application Engine program performs a COMMIT.

  8. Check for errors.

    You can check if there were any errors using the PSMessages property on the session object.

    If All (&RSLT) Then 
       /* errors occurred = do error checking */ 
       &ERRORCOL = &Session.PSMessages; 
       For &I = 1 To &ERRORCOL.count 
          /* do error processing */ 
       End-For; 
    Else 
       /* no errors - saved correctly - do other processing */ 
    End-If;

    If there are multiple errors, all errors are logged to the PSMessages collection, not just the first occurrence of an error.

Note: If you’ve called the Tree API from an Application Engine program, all errors are also logged in the application engine error log tables.