お知らせ:

当社は、お客様により充実したサポート情報を迅速に提供するため、本ページのコンテンツは機械翻訳を用いて日本語に翻訳しています。正確かつ最新のサポート情報をご覧いただくには、本内容の英語版を参照してください。

関数ディレクトリの設定

ここからAdvanced I/O関数を設定して、Lead Managerアプリケーションのコーディングを開始します。

関数ディレクトリ functions/crmCRUDには以下が含まれています:

  • CRMCRUD.javaメイン関数ファイル
  • catalyst-config.json設定ファイル
  • libフォルダ内のJavaライブラリファイル
  • .classpathおよび.project依存関係ファイル

CRMCRUD.javaにコードを追加します。

任意のIDEを使用して関数を設定できます。

Note: このセクションのコードを十分に理解してください。関数とクライアントコードについては、クライアントの設定後に説明します。

以下のコードをコピーして、functions/crmCRUDディレクトリにあるCRMCRUD.javaに貼り付けてファイルを保存してください。

CRMCRUD.java
copy
import java.util.logging.Logger;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.logging.Level;
import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.catalyst.advanced.CatalystAdvancedIOHandler;
import com.zc.auth.connectors.ZCConnection;
import com.zc.component.ZCUserDetail;
import com.zc.component.object.ZCObject;
import com.zc.component.object.ZCRowObject;
import com.zc.component.object.ZCTable;
import com.zc.component.users.ZCUser;
import com.zc.component.zcql.ZCQL;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import okhttp3.HttpUrl;
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
public class CRMCRUD implements CatalystAdvancedIOHandler {
	private static final Logger LOGGER = Logger.getLogger(CRMCRUD.class.getName());
	private String apiUrl = "https://www.zohoapis.com/crm/v2/Leads";
	private String GET = "GET";
	private String POST = "POST";
	private String PUT = "PUT";
	private String DELETE = "DELETE";
	private String CLIENT_ID = "{{YOUR_CLIENT_ID}}"; //クライアントIDを追加してください
	private String CLIENT_SECRET = "{{YOUR_CLIENT_SECRET}}"; //クライアントシークレットを追加してください
	OkHttpClient client = new OkHttpClient();
	@Override
	@SuppressWarnings("unchecked")
	public void runner(HttpServletRequest request, HttpServletResponse response) throws Exception {
		try {
			LOGGER.info("STARTED!!!");
			String url = request.getRequestURI();
			String method = request.getMethod();
			String responseData = "";
			String recordID = "";
			Pattern p = Pattern.compile("([0-9]+)");
			MediaType mediaType = MediaType.parse("application/json");
			JSONParser jsonParser = new JSONParser();
			JSONObject data = new JSONObject();
			org.json.simple.JSONArray reqData = new org.json.simple.JSONArray();
			//getRefreshToken()関数を呼び出してリフレッシュトークンを取得し、userIDとともにTokenテーブルに挿入します
			if (Pattern.matches("/generateToken", url) && method.equals(GET)) {
				LOGGER.info("generateToken!!!");
				String code = request.getParameter("code");
				String domain = (request.getHeader("host").contains("localhost") ? ("http://" + request.getHeader("host")) : ("https://") + request.getHeader("host").split(":")[0]);
				LOGGER.info("Domain: "+domain);
				LOGGER.info("Code: "+code);
				ZCUserDetail details = ZCUser.getInstance().getCurrentUser();
				ZCObject object = ZCObject.getInstance();
				ZCRowObject row = ZCRowObject.getInstance();
				row.set("refresh_token", getRefreshToken(code, domain));
				row.set("userId", details.getUserId());
				ZCTable tab = object.getTable(1824000000686079L); //テーブルのTable IDに置き換えてください
				tab.insertRow(row);
				response.setStatus(200);
				response.sendRedirect(domain + "/app/index.html");
			//getUserDetails()関数を呼び出してユーザー情報を取得します
			} else if (Pattern.matches("/getUserDetails", url) && method.equals(GET)) {
				ArrayList<ZCRowObject> user = getUserDetails();
	JSONObject resp = new JSONObject();
	if (user.isEmpty()) {
	resp.put("userId", null);
	response.setContentType("application/json");
	response.getWriter().write(resp.toJSONString());
	response.setStatus(200);
	} else {
	resp.put("userId", user.get(0).get("Token", "userId"));
	response.setContentType("application/json");
	response.getWriter().write(resp.toJSONString());
	response.setStatus(200);
	}
	//CRMのリードにアクセス、追加、変更するための各種APIを実行します
	//すべてのリードを取得します
	} else if (Pattern.matches("/crmData", url) && method.equals(GET)) {
	responseData = getResponse(GET, null);
	//特定のリードを取得します
	} else if (Pattern.matches("/crmData/([0-9]+)", url) && method.equals(GET)) {
	Matcher m = p.matcher(url);
	if (m.find()) {
	recordID = m.group(1);
	}
	apiUrl = apiUrl + "/" + recordID;
	responseData = getResponse(GET, null);
	//新しいリードを追加します
	} else if (Pattern.matches("/crmData", url) && method.equals(POST)) {
	ServletInputStream requestBody = request.getInputStream();
	JSONObject jsonObject = (JSONObject) jsonParser.parse(new InputStreamReader(requestBody, "UTF-8"));
	reqData.add(jsonObject);
	data.put("data", reqData);
	RequestBody body = RequestBody.create(mediaType, data.toString());
	responseData = getResponse(POST, body);
	//リードを削除します
	} else if (Pattern.matches("/crmData/([0-9]+)", url) && method.equals(DELETE)) {
	Matcher m = p.matcher(url);
	if (m.find()) {
	recordID = m.group(1);
	}
	apiUrl = apiUrl + "/" + recordID;
	responseData = getResponse(DELETE, null);
	//リードを編集します
	} else if (Pattern.matches("/crmData/([0-9]+)", url) && method.equals(PUT)) {
	Matcher m = p.matcher(url);
	if (m.find()) {
	recordID = m.group(1);
	}
	apiUrl = apiUrl + "/" + recordID;
	ServletInputStream requestBody = request.getInputStream();
	JSONObject jsonObject = (JSONObject) jsonParser.parse(new InputStreamReader(requestBody, "UTF-8"));
	reqData.add(jsonObject);
	data.put("data", reqData);
	RequestBody body = RequestBody.create(mediaType, data.toJSONString());
	responseData = getResponse(PUT, body);
	} else {
	LOGGER.log(Level.SEVERE, "Error. Invalid Request"); //アクションはログに記録されます。CatalystからログをE確認できます
	response.setStatus(404);
	responseData = "Error. Invalid Request";
	response.getWriter().write(responseData);
	}
	response.setContentType("application/json");
	response.getWriter().write(responseData);
	response.setStatus(200);
	} catch (Exception e) {
	LOGGER.log(Level.SEVERE, "Exception in CRM Function ", e);
	response.setStatus(500);
	response.getWriter().write(e.toString());
	}
	}
	@SuppressWarnings("unchecked")
	//リフレッシュトークンを使用してアクセストークンを取得します
	public String getAccessToken(Long userId) throws Exception {
	JSONObject authJson = new JSONObject();
	JSONObject connectorJson = new JSONObject();
	String query = "SELECT refresh_token FROM Token where UserId=" + userId;
	if (rowList.isEmpty()) {
    throw new RuntimeException("No token found for userId: " + userId);
	}
	Object refreshTokenObj = rowList.get(0).get("Token", "refresh_token");
	if (refreshTokenObj == null) {
			throw new RuntimeException("Refresh token is null for userId: " + userId);
	}
authJson.put("refresh_token", refreshTokenObj.toString());
	ArrayList<ZCRowObject> rowList = ZCQL.getInstance().executeQuery(query);
		authJson.put("client_id", CLIENT_ID);
		authJson.put("client_secret", CLIENT_SECRET);
		authJson.put("auth_url", "https://accounts.zoho.com/oauth/v2/token");
		authJson.put("refresh_url", "https://accounts.zoho.com/oauth/v2/token");
		authJson.put("refresh_token", rowList.get(0).get("Token", "refresh_token"));
		connectorJson.put(userId.toString(), authJson);
		return ZCConnection.getInstance(connectorJson).getConnector(userId.toString()).getAccessToken();
		}
		//必要な情報を渡してリフレッシュトークンを取得します
		public String getRefreshToken(String code, String domain) throws Exception {
		HttpUrl.Builder urlBuilder = HttpUrl.parse("https://accounts.zoho.com/oauth/v2/token").newBuilder();
		urlBuilder.addQueryParameter("code", code);
		urlBuilder.addQueryParameter("client_id", CLIENT_ID);
		urlBuilder.addQueryParameter("client_secret", CLIENT_SECRET);
		urlBuilder.addQueryParameter("grant_type", "authorization_code");
		urlBuilder.addQueryParameter("redirect_uri", domain + "/server/crmcrud/generateToken");
		String URL = urlBuilder.build().toString();
		MediaType mediaType = MediaType.parse("text/plain");
		RequestBody body = RequestBody.create(mediaType, "");
		Request getResponse = new Request.Builder().url(URL).method(POST, body).build();
		JSONParser jsonParser = new JSONParser();
		JSONObject data = (JSONObject) jsonParser.parse(client.newCall(getResponse).execute().body().string());
		return data.get("refresh_token").toString();
		}
		//取得したアクセストークンを渡して、CRMモジュールでの各アクションに必要な認可を取得します
		public String getResponse(String METHOD, RequestBody body) throws Exception {
		Long userId = ZCUser.getInstance().getCurrentUser().getUserId();
		String accessToken = getAccessToken(userId);
		Request getResponse = new Request.Builder().url(apiUrl).method(METHOD, body)
		.addHeader("Authorization", "Zoho-oauthtoken " + accessToken).build();
		return client.newCall(getResponse).execute().body().string();
		}
		//userIDを渡してリフレッシュトークンを含むTokenテーブルのレコードを取得します
		public ArrayList<ZCRowObject> getUserDetails() throws Exception {
			Long userId = ZCUser.getInstance().getCurrentUser().getUserId();
			String query = "SELECT * FROM Token where UserId=" + userId;
			ArrayList<ZCRowObject> rowList = ZCQL.getInstance().executeQuery(query);
				return rowList;
				}
				}

View more

Note: このコードを関数ファイルにコピー・貼り付けした後、以下の値を必ず置き換えてください:

これで関数ディレクトリの設定が完了しました。関数とクライアントコードについては、クライアントの設定後に説明します。

最終更新日 2026-03-05 11:43:24 +0530 IST