Salesforceの標準、カスタムオブジェクトの項目定義書を作成するjavaサンプル

Salesforceでは、Webで簡単に項目を追加したり、項目の属性を変更したりすることができ、非常にスピーディーな開発を行うことができます。

ただ、その項目名や属性を設計書に起こすのは、結構手間だったりします。。。

ツールを使うのもいいですし、javaであれば、自分の好きな項目を好きな形にフォーマットして出力するのも比較的簡単にできます。

ここでは、以前の記事で作成したテンプレートを使って、オブジェクトの項目定義をCSVに出力するプログラムを作成してみましょう。

csvであれば、出力結果をエクセルに貼り付けるのも簡単です。

なお、csv出力には、以前の記事で作成した、「CSVFileWriter」クラスを使っていますので、そちらも参照してください。

 

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import com.sforce.soap.partner.Connector;
import com.sforce.soap.partner.DescribeGlobalResult;
import com.sforce.soap.partner.DescribeSObjectResult;
import com.sforce.soap.partner.Field;
import com.sforce.soap.partner.PartnerConnection;
import com.sforce.soap.partner.PicklistEntry;
import com.sforce.ws.ConnectionException;
import com.sforce.ws.ConnectorConfig;


public class MainPrefix {
	  
	  //static final String USERNAME = "YOUR-USERNAME";
	  //static final String PASSWORD = "YOUR-PASSWORD&SECURITY-TOKEN";
	  static final String OUTPUT_DIR = "D:\OUTPUT\";
	  static PartnerConnection connection;
	  
	  static private List<ArrayList> gLineList = null;

	  public static void main(String[] args) {

	    ConnectorConfig config = new ConnectorConfig();
	    config.setUsername(USERNAME);
	    config.setPassword(PASSWORD);
            //本番かSandboxかで向き先を切り替えてください。
            config.setAuthEndpoint(ENDPOINT);
	    //config.setTraceMessage(true);
	    //config.setProxy("xxxxxx.xxxxx.xx.xx", 8000);

	    
	    try {
	      
	      connection = Connector.newConnection(config);
	      
	      // display some current settings
	      System.out.println("Auth EndPoint: "+config.getAuthEndpoint());
	      System.out.println("Service EndPoint: "+config.getServiceEndpoint());
	      System.out.println("Username: "+config.getUsername());
	      System.out.println("SessionId: "+config.getSessionId());

	      queryAttachments();      
	      
	    } catch (ConnectionException e1) {
	        e1.printStackTrace();
	    }  

	  }
	  

	  private static void queryAttachments() {
	       
	    try {
	    	
	    	DescribeGlobalResult dgr = connection.describeGlobal();
	    	
	    	for (int i = 0; i < dgr.getSobjects().length; i++) {
	    		
	    		System.out.println(dgr.getSobjects()[i].getName());
	    		System.out.println(dgr.getSobjects()[i].getLabel());
	    		System.out.println(dgr.getSobjects()[i].getKeyPrefix());
	    		
	    		//オブジェクトをAccountに制限してます。ここを変更すれば、他のオブジェクトを出力したりできます。
	    		if(dgr.getSobjects()[i].getName().equals("Account")){
	    			writeSObjectDesc(dgr.getSobjects()[i].getName());
	    		}

			}
	      
	    } catch (Exception e) {
	      e.printStackTrace();
	    }    
	    
	  }
	  
	  
	  private static void writeSObjectDesc(String objectName) throws IOException, ConnectionException {
	    	
	    	gLineList = new ArrayList<ArrayList>();
	    	
	    	
			ArrayList lineList = null;
			
			
	    	String objectToDescribe = objectName;
			
			DescribeSObjectResult[] dsrArray = connection.describeSObjects(new String[] { objectToDescribe });
			DescribeSObjectResult dsr = dsrArray[0];

			System.out.println("Object Name: " + dsr.getName());
			lineList = new ArrayList();
			lineList.add("オブジェクト名"); lineList.add(dsr.getName());
			gLineList.add(lineList);
			
			lineList = new ArrayList();
			lineList.add("表示ラベル(日本語)"); 
			if (dsr.getLabel() != null)
				System.out.println("Label: " + dsr.getLabel());
			lineList.add(dsr.getLabel());
			gLineList.add(lineList);
			
			lineList = new ArrayList();
			lineList.add("表示ラベル(英語)"); lineList.add("");
			gLineList.add(lineList);
			
			lineList = new ArrayList();
			lineList.add("カスタムオブジェクトかどうか"); 
			if (dsr.isCustom()){
				System.out.println("Custom Object");
				lineList.add("TRUE");
			}else{
				System.out.println("Standard Object");
				lineList.add("FALSE");
			}
			gLineList.add(lineList);
			
			lineList = new ArrayList();
			lineList.add(""); lineList.add("");
			gLineList.add(lineList);
			
			lineList = new ArrayList();
			lineList.add("項目"); lineList.add("");
			gLineList.add(lineList);
			
			//ヘッダ項目
			lineList = new ArrayList();
			lineList.add("標準項目/カスタム項目");
			lineList.add("項目名");
			lineList.add("表示ラベル");
			lineList.add("必須");
			lineList.add("データ型");
			lineList.add("データ長");
			lineList.add("参照先");
			lineList.add("式");
			lineList.add("ピックリスト項目");
			gLineList.add(lineList);
			

			System.out.println("Number of fields: " + dsr.getFields().length);
			// Now, retrieve metadata for each field
			for (int i = 0; i < dsr.getFields().length; i++) {
				
				
				System.out.println("Field No = ." + i);
				
				// Get the field
				Field field = dsr.getFields()[i];
				
				lineList = new ArrayList();
				//カスタム項目かどうか
				if (field.isCustom())
					System.out.println("tThis is a custom field.");
				if (field.isCustom()){
					System.out.println("Custom field");
					lineList.add("カスタム項目");
				}else{
					System.out.println("Standard field");
					lineList.add("標準項目");
				}
				
				//項目名
				System.out.println("Field name: " + field.getName());
				lineList.add(field.getName());
				
				//表示ラベル
				System.out.println("tField Label: " + field.getLabel());
				lineList.add(field.getLabel());
				
				//必須
				if (field.isNillable()){
					System.out.println("tCan be nulled.");
					lineList.add("");
				}else{
					System.out.println("tCan be required.");
					lineList.add("必須");
				}
							
				//データ型
				System.out.println("tType is: " + field.getType());
				if (field.getCalculatedFormula()!=null ){
					//nullでなければ数式が入っているということ
					if(field.getType().toString().equals("double")){
						lineList.add("数式 (数値)");
					}else if(field.getType().toString().equals("string")){
						lineList.add("数式 (テキスト)");
					}else{
						lineList.add("想定外の数式");
					}
					
					
				}else{
					lineList.add(field.getType().toString());
				}
				
				
				//データ長
				if (field.getLength() >= 0)
					System.out.println("tLength: " + field.getLength());
				if (field.getScale() >= 0)
					System.out.println("tScale: " + field.getScale());
				if (field.getPrecision() >= 0)
					System.out.println("tPrecision: " + field.getPrecision());
				if (field.getDigits() >= 0)
					System.out.println("tDigits: " + field.getDigits());
				
				if (field.getType().toString().equals("string") ||
						field.getType().toString().equals("textarea") ||
						field.getType().toString().equals("picklist") ||
						field.getType().toString().equals("id")||
						field.getType().toString().equals("email")) {
					lineList.add(""+ field.getLength());
				}else if(field.getType().toString().equals("percent")||
						field.getType().toString().equals("double")||
						field.getType().toString().equals("currency")){
					lineList.add("("+ (field.getPrecision()-field.getScale()) + ":" +field.getScale() + ")");
				}else{	
					lineList.add(""+ field.getPrecision());
				}
				
				//参照先
				if (field.getType().toString().equals("reference")) {
					System.out.println("tCan reference these objects:");
					StringBuffer sb1 = new StringBuffer("");
					for (int j = 0; j < field.getReferenceTo().length; j++) { System.out.println("tt" + field.getReferenceTo()[j]); sb1.append("参照->" + field.getReferenceTo()[j] + "/");
					}
					lineList.add(sb1.toString());
				}else{
					lineList.add("");
				}
				
				//式
				System.out.println("数式=" + field.getCalculatedFormula());
				if (field.getCalculatedFormula()!=null ){
					lineList.add(field.getCalculatedFormula());
				}else{
					lineList.add("");
				}
				
				//ピックリスト
				if (field.getType().toString().equals("picklist")) {
					System.out.println("ttPicklist values: ");
					PicklistEntry[] picklistValues = field.getPicklistValues();
					StringBuffer sb2 = new StringBuffer("");
					for (int j = 0; j < field.getPicklistValues().length; j++) {
						System.out.println("ttValue: " + picklistValues[j].getValue());
						sb2.append(picklistValues[j].getValue() + "/");
					}
					lineList.add(sb2.toString());
				}else{
					lineList.add("");
				}
				
				gLineList.add(lineList);
				
				if (field.isNameField())
					System.out.println("tThis is a name field.");
				if (field.isRestrictedPicklist())
				System.out.println("This is a RESTRICTED picklist field.");

			}

			writeCSVFile(gLineList, objectName);
			
	    }
	    
	    
	    private static void writeCSVFile(List<ArrayList> gLineList, String objectName) throws IOException{

			File csvFile = null;
			CSVFileWriter writer = null;
			
			try {

				csvFile = new File(OUTPUT_DIR + objectName + ".csv");
				writer = new CSVFileWriter(csvFile);
				writer.open();

				Iterator<ArrayList> iter = gLineList.iterator();
				while(iter.hasNext()){
					
					writer.writeLine(iter.next());
				}
				

			} finally {

				if (writer != null) {
					writer.close();
				}

			}

	    }
	    
	}


 

出力した結果は、こんな風に出力されます。

csv3
 

 

サンプルでは、出力する対象のオブジェクトを「Account」だけに制限しています。(67行目)

ここは、制限を解除したり、出力の必要なオブジェクトのリストを渡すように修正すれば、必要なオブジェクトの項目定義を出力可能ですので、お好きに変更してみてください。

 



こんな記事も関係あるかも。読んでみてね。

コメントを残す

サブコンテンツ

このページの先頭へ