Primavera API create udfcode local mode

1.7k Views Asked by At

Knows someone where I can find a sample of adding primavera UDF through API? My code is below but nothing happens when I run it. I can connect to the database, read the UDF, delete the udf, but not to create

Thank you

package apitest;

  import com.primavera.bo.base.u;
  import com.primavera.common.value.ObjectId;
  import com.primavera.integration.client.*;
  import com.primavera.integration.client.Session;
  import com.primavera.integration.client.EnterpriseLoadManager;
  import com.primavera.integration.client.RMIURL;
  import com.primavera.integration.common.DatabaseInstance;
  import com.primavera.integration.client.bo.BOIterator;
  import com.primavera.integration.client.bo.object.Project;
  import com.primavera.integration.client.bo.object.UDFCode;
  import com.primavera.integration.client.bo.InternalBOHelper;
  import com.primavera.integration.client.bo.helper.UDFCodeHelper;
  public class API
  {

 public static void main( String[] args )
{
    System.setProperty("primavera.bootstrap.home","C:\\P6IntegrationAPI_1");
    Session session = null;
    try
    {
        DatabaseInstance[] dbInstances = Session.getDatabaseInstances(
            RMIURL.getRmiUrl( RMIURL.LOCAL_SERVICE ) );

        // Assume only one database instance for now, and hardcode the username and
        // password for this sample code
        session = Session.login( RMIURL.getRmiUrl( RMIURL.LOCAL_SERVICE ),
            dbInstances[0].getDatabaseId(), "admin", "admin" );


        //u.delete(session, (UDFCode)(new String ("High")));

        UDFCode u = new UDFCode(session);

        u.setCodeValue("cdc");
        u.setDescription("cdcds");    
        u.setObjectId(ObjectId.USESSION_OVERRIDE_ID);
        u.setCodeTypeObjectId(ObjectId.USESSION_OVERRIDE_ID);
        u.setSequenceNumber(0);

        u.create();            


        System.out.println("cdcx");


    }
    catch ( Exception e )
    {
        System.out.println(e.getCause());
    }
    finally
    {
        if ( session != null )
            session.logout();
    }
}

}

2

There are 2 best solutions below

0
On

A UDF Field in P6 is in fact 3 Types of Tables/Classes.

  1. UdfType - is the type of UDF (Name, Datatype etc...)
  2. UdfValue - this is the actual value u want to set i guess ?
  3. UdfCodes - Thats UserDefined Codes so its a bit complex and is in fact a Code and no Field!

So if u want a simple UDF, just create a UdfType, this is part of the globaldata and must exists befor u add values. You can also add it over the client/web and fill it with values later.

Next try to insert some UdfValues on Activities. Thats the way i go every time ;)

0
On

Use the following template code to connect to the DB . Make sure you change bootstrap,username password values before using it.

import java.util.Date;
import java.util.Iterator;
import com.primavera.PrimaveraException;
import com.primavera.ServerException;
import com.primavera.bo.events.enm.SpreadPeriodType;
import com.primavera.common.value.Duration;
import com.primavera.common.value.ObjectId;
import com.primavera.common.value.spread.ActivitySpread;
import com.primavera.common.value.spread.ActivitySpreadPeriod;
import com.primavera.integration.client.GlobalObjectManager;
import com.primavera.integration.client.Session;
import com.primavera.integration.client.bo.BOIterator;
import com.primavera.integration.client.bo.BusinessObjectException;
import com.primavera.integration.client.bo.enm.ActivityStatus;
import com.primavera.integration.client.bo.enm.ProjectStatus;
import com.primavera.integration.client.bo.object.Activity;
import com.primavera.integration.client.bo.object.ActivityNote;
import com.primavera.integration.client.bo.object.EPS;
import com.primavera.integration.client.bo.object.NotebookTopic;
import com.primavera.integration.client.bo.object.Project;
import com.primavera.integration.client.bo.object.BaselineProject;
import com.primavera.integration.common.CopyActivityOptions;
import com.primavera.integration.common.CopyProjectOptions;
import com.primavera.integration.common.CopyWBSOptions;
import com.primavera.integration.common.DatabaseInstance;
import com.primavera.integration.client.bo.object.*;
import com.primavera.integration.client.*;
import com.primavera.integration.network.NetworkException;
import com.primavera.integration.*;


public class EPSFilter {

    static Session session = null;
    //static Session session = null;
     private static final String PRIMAVERA_BOOTSTRAP_HOME = "primavera.bootstrap.home";
    static final String PRIMAVERA_BOOTSTRAP_HOME_VALUE = "C:\\P6EPPM_832\\p6";
    static final String PRIMAVERA_USERNAME = "admin";
    static final String PRIMAVERA_PASSWORD = "admin";
    static final String PRIMAVERA_SYSTEM = "pmdb832_n1";

    static void openSession() throws PrimaveraException {
        for (DatabaseInstance dbi : Session.getDatabaseInstances(null)) {
          if (PRIMAVERA_SYSTEM.equalsIgnoreCase(dbi.getDatabaseName())) {

            session = Session.login(null, dbi.getDatabaseId(), PRIMAVERA_USERNAME, PRIMAVERA_PASSWORD);
            //session = Session.login (RMIURL.getRmiUrl( RMIURL.LOCAL_SERVICE ), "1", "admin", "admin");
            System.out.println("Connected to Primavera instance " + PRIMAVERA_SYSTEM);
            return;
          }
        }
        throw new RuntimeException("Error, Primavera instance " + PRIMAVERA_SYSTEM + " not found");
      }



    public static void main(String[] args) throws BusinessObjectException, ServerException, NetworkException {

         try {
             System.setProperty(PRIMAVERA_BOOTSTRAP_HOME, PRIMAVERA_BOOTSTRAP_HOME_VALUE);
            openSession();
        } catch (PrimaveraException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }

Your code should follow to create the UDF's. If you still face issues. Please post the error you are getting