UDFUpdate - nsbassi/eln-docs GitHub Wiki

package insight.common;

import java.util.logging.Level;
import java.util.logging.Logger;

import com.primavera.common.value.BeginDate;
import com.primavera.common.value.Cost;
import com.primavera.common.value.EndDate;
import com.primavera.integration.client.EnterpriseLoadManager;
import com.primavera.integration.client.Session;
import com.primavera.integration.client.bo.BOIterator;
import com.primavera.integration.client.bo.BusinessObject;
import com.primavera.integration.client.bo.enm.UDFDataType;
import com.primavera.integration.client.bo.enm.UDFIndicator;
import com.primavera.integration.client.bo.enm.UDFSubjectArea;
import com.primavera.integration.client.bo.object.Activity;
import com.primavera.integration.client.bo.object.ActivityExpense;
import com.primavera.integration.client.bo.object.ActivityStep;
import com.primavera.integration.client.bo.object.ActivityStepTemplate;
import com.primavera.integration.client.bo.object.Project;
import com.primavera.integration.client.bo.object.ProjectDocument;
import com.primavera.integration.client.bo.object.ProjectIssue;
import com.primavera.integration.client.bo.object.Resource;
import com.primavera.integration.client.bo.object.ResourceAssignment;
import com.primavera.integration.client.bo.object.Risk;
import com.primavera.integration.client.bo.object.UDFType;
import com.primavera.integration.client.bo.object.UDFValue;
import com.primavera.integration.client.bo.object.WBS;

/**
 * Created by nsb on 07/06/17.
 */
public class UpdateUDFValue {
	//static Logger logger = JLogger.getLogger(UpdateUDFFromExcel.class.getName());
	
    public UDFValue getUDFValue(Session session, BusinessObject bo, UDFType udfType) throws Exception {
        EnterpriseLoadManager elm = session.getEnterpriseLoadManager();
        BOIterator<UDFValue> boUDFVal = elm.loadUDFValues(UDFValue.getAllFields(), "UDFTypeObjectId=" + udfType.getObjectId()
                + " and ForeignObjectId=" + bo.getObjectId(), null);
        if (boUDFVal.hasNext()) {
            return boUDFVal.next();
        }
        return null;
    }

    public UDFType getUDFType(Session session, BusinessObject bo, String title) throws Exception {
        UDFSubjectArea subjectArea = null;
        if (bo instanceof Project) {
            subjectArea = UDFSubjectArea.PROJECT;
        } else if (bo instanceof ProjectIssue) {
            subjectArea = UDFSubjectArea.PROJECT_ISSUE;
        } else if (bo instanceof Risk) {
            subjectArea = UDFSubjectArea.PROJECT_RISK;
        } else if (bo instanceof Activity) {
            subjectArea = UDFSubjectArea.ACTIVITY;
        } else if (bo instanceof ActivityExpense) {
            subjectArea = UDFSubjectArea.ACTIVITY_EXPENSE;
        } else if (bo instanceof ActivityStep) {
            subjectArea = UDFSubjectArea.ACTIVITY_STEP;
        } else if (bo instanceof ActivityStepTemplate) {
            subjectArea = UDFSubjectArea.ACTIVITY_STEP_TEMPLATE_ITEM;
        } else if (bo instanceof Resource) {
            subjectArea = UDFSubjectArea.RESOURCE;
        } else if (bo instanceof ResourceAssignment) {
            subjectArea = UDFSubjectArea.RESOURCE_ASSIGNMENT;
        } else if (bo instanceof WBS) {
            subjectArea = UDFSubjectArea.WBS;
        } else if (bo instanceof ProjectDocument) {
            subjectArea = UDFSubjectArea.WORK_PRODUCTS_AND_DOCUMENTS;
        }
        EnterpriseLoadManager elm = session.getEnterpriseLoadManager();

        BOIterator<UDFType> boUDFType = elm.loadUDFTypes(UDFType.getAllFields(), "SubjectArea='"
                + subjectArea.getValue() + "' and Title='" + title + "'", null);
        if (boUDFType.hasNext()) {
            return boUDFType.next();
        }
        return null;
    }

	public void setUDFValue(Session session, BusinessObject bo, String title, Object value, Logger logger) throws Exception {
        UDFType udfType = getUDFType(session, bo, title);
        UDFValue udfValue = null;
        if (udfType != null) {
        	logger.info("UDF found with title : "+udfType.getTitle());
            udfValue = getUDFValue(session, bo, udfType);
            if (udfValue == null) {
                udfValue = new UDFValue(session, udfType.getObjectId(), bo.getObjectId());
                udfValue.create();
                //System.out.println("New UDF Value created..");
                logger.info("New UDF value field created, now loading again..");
                udfValue = getUDFValue(session, bo, udfType);
                logger.info("UDF value field loaded..!!");
            }
            
            UDFDataType type = udfValue.getUDFTypeDataType();
            logger.info("UDF Data Type : "+type);
            logger.info("UDF Value : "+value);
            if (type == UDFDataType.TEXT) {
                udfValue.setText((String) value);
            } else if (type == UDFDataType.COST) {
                udfValue.setCost((Cost) value);
            } else if (type == UDFDataType.DOUBLE) {
                udfValue.setDouble(Double.parseDouble(value.toString()));
            } else if (type == UDFDataType.FINISH_DATE) {
                udfValue.setFinishDate((EndDate) value);
            } else if (type == UDFDataType.START_DATE) {
                udfValue.setStartDate((BeginDate) value);
            } else if (type == UDFDataType.INTEGER) {
                udfValue.setInteger(Integer.parseInt(value.toString()));
            } else if (type == UDFDataType.INDICATOR) {
                udfValue.setIndicator((UDFIndicator) value);
            }

            logger.info("Updating udf value..");
            udfValue.update();
            logger.info("UDF value updated successfully................!!");
        } else {
            //System.out.println("UDF with title " + title + " not found.");
            logger.log(Level.SEVERE,"UDF with title " + title + " not found.");
        }
    }

    public void printUDFValue(Session session, BusinessObject bo, String title) throws Exception {
    	 UDFType udfType = getUDFType(session, bo, title);
         UDFValue udfValue = getUDFValue(session, bo, udfType);
        if (udfValue != null) {
            UDFDataType type = udfValue.getUDFTypeDataType();
            if (type == UDFDataType.TEXT) {
                System.out.println(udfValue.getText());
            } else if (type == UDFDataType.CODE) {
                System.out.println(udfValue.getCodeValue());
            } else if (type == UDFDataType.COST) {
                System.out.println(udfValue.getCost());
            } else if (type == UDFDataType.DOUBLE) {
                System.out.println(udfValue.getDouble());
            } else if (type == UDFDataType.FINISH_DATE) {
                System.out.println(udfValue.getFinishDate());
            } else if (type == UDFDataType.START_DATE) {
                System.out.println(udfValue.getStartDate());
            } else if (type == UDFDataType.INTEGER) {
                System.out.println(udfValue.getInteger());
            } else if (type == UDFDataType.INDICATOR) {
                System.out.println(udfValue.getIndicator());
            }
        }
    }
}
⚠️ **GitHub.com Fallback** ⚠️