0

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();
    }
}

}

4

2 回答 2

0

使用以下模板代码连接到 DB。确保在使用之前更改引导程序、用户名密码值。

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();
        }

您的代码应遵循以创建 UDF。如果您仍然面临问题。请发布您遇到的错误

于 2014-09-19T12:09:11.057 回答
0

P6 中的 UDF 字段实际上是 3 种类型的表/类。

  1. UdfType - 是 UDF 的类型(名称、数据类型等...)
  2. UdfValue - 我猜这是你想设置的实际值?
  3. UdfCodes - 那是用户定义的代码,所以它有点复杂,实际上是一个代码,没有字段!

因此,如果您想要一个简单的 UDF,只需创建一个 UdfType,这是全局数据的一部分,并且在您添加值之前必须存在。您也可以在客户端/网络上添加它并稍后用值填充它。

接下来尝试在活动中插入一些 UdfValues。这就是我每次去的方式;)

于 2014-02-10T16:45:29.053 回答