お知らせ:

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

ファンクションディレクトリの設定

次に、Advanced I/Oファンクションを設定して、Lead Managerアプリケーションのコーディングを開始します。

ファンクションディレクトリ functions/crm_crudには、以下が含まれています:

  • index.jsメインファンクションファイル
  • catalyst-config.json設定ファイル
  • Nodeモジュール
  • package.jsonおよびpackage-lock.json依存関係ファイル

index.jsにコードを追加します。

任意のIDEを使用してファンクションを設定できます。

Note: このセクションのコードを十分に理解するために、必ず目を通してください。ファンクションとクライアントのコードについては、クライアントの設定後に説明します。

Node.js用のExpressおよびNode Fetchフレームワークのインストール

Node.jsファンクションには3つのフレームワークをインストールする必要があります。コード内でパッケージをインポートするために、expressnode-fetch、およびaxiosの依存関係をインストールする必要があります。

express

Express.jsをインストールするには、ターミナルでNodeファンクションのディレクトリ(functions/crm_crud)に移動し、以下のコマンドを実行します:

copy
$
npm install express --save

これにより、Expressモジュールがインストールされ、依存関係が保存されます。

catalyst_leadmanager_install_express

node-fetch

node-fetchをインストールするには、Nodeファンクションのディレクトリ(functions/crm_crud)から以下のコマンドを実行します:

copy
$
npm install node-fetch

これにより、モジュールがインストールされます。

catalyst_leadmanager_install_node_fetch

axios

axiosをインストールするには、Nodeファンクションのディレクトリ(functions/crm_crud)から以下のコマンドを実行します:

copy
$
npm install axios

これにより、モジュールがインストールされます。

catalyst_leadmanager_install_axios

この情報はpackage.jsonファイルにも更新されます。

copy
{
	"name": "crm_crud",
	"version": "1.0.0",
	"main": "index.js",
	"author": "amelia.burrows@zylker.com",
	"dependencies": {
		"axios": "^0.27.2",
		"express": "^4.18.1",
		"node-fetch": "^3.2.6",
		"zcatalyst-sdk-node": "latest"
	}
}

これでファンクションファイルにコードを追加できます。

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

index.js
copy
"use strict";
const express = require("express");
const http = require("https");
const app = express();
app.use(express.json());
const catalyst = require("zcatalyst-sdk-node");
const HOST = "www.zohoapis.com";
const AUTH_HOST = "https://accounts.zoho.com/oauth/v2/token";
const PORT = 443;
const axios = require("axios");
const CLIENTID = '{{YOUR_CLIENT_ID}}'; //クライアントIDを追加
const CLIENT_SECRET = '{{YOUR_CLIENT_SECRET}}'; //クライアントシークレットを追加
app.get("/generateToken", async (req, res) => {
  try {
    const catalystApp = catalyst.initialize(req);
    const code = req.query.code;
    let userManagement = catalystApp.userManagement();
    let userDetails = await userManagement.getCurrentUser();
	const domain = `${process.env.X_ZOHO_CATALYST_IS_LOCAL === 'true' ? "http" : "https"}://${process.env.X_ZOHO_CATALYST_IS_LOCAL === 'true' ? req.headers.host : req.headers.host.split(':')[0]}`
    const refresh_token = await getRefreshToken(code, res, domain);
    const userId = userDetails.user_id;
    const catalystTable = catalystApp.datastore().table("Token");
    await catalystTable.insertRow({
      refresh_token,
      userId,
    });
    res.status(200).redirect(`${domain}/app/index.html`);
  } catch (err) {
    console.log(err);
    res
      .status(500)
      .send({
        message: "Internal Server Error. Please try again after sometime.",
        error: err,
      });
  }
});
app.get("/getUserDetails", async (req, res) => {
  try {
    const catalystApp = catalyst.initialize(req);
    const userDetails = await getUserDetails(catalystApp);
    if (userDetails.length !== 0) {
      res.status(200).send({ userId: userDetails[0].Token.userId });
    } else {
      res.status(200).send({ userId: null });
    }
  } catch (err) {
    console.log(err);
    res
      .status(500)
      .send({
        message:
          "Internal Server Error in Getting User Details. Please try again after sometime.",
        error: err,
      });
  }
});
app.get("/crmData", async (req, res) => {
  try {
    console.log();
    const catalystApp = catalyst.initialize(req);
    const userDetails = await getUserDetails(catalystApp);
    const accessToken = await getAccessToken(catalystApp, userDetails);
    const options = {
      hostname: HOST,
      port: PORT,
      method: "GET",
      path: `/crm/v2/Leads`,
      headers: {
        Authorization: `Zoho-oauthtoken ${accessToken}`,
      },
    };
    var data = "";
    const request = http.request(options, function (response) {
      response.on("data", function (chunk) {
        data += chunk;
      });
      response.on("end", function () {
        console.log(response.statusCode);
        res.setHeader("content-type", "application/json");
        res.status(200).send(data);
      });
    });
    request.end();
  } catch (err) {
    console.log(err);
    res
      .status(500)
      .send({
        message: "Internal Server Error. Please try again after sometime.",
      });
  }
});
app.get("/crmData/:id", async (req, res) => {
  try {
    const catalystApp = catalyst.initialize(req);
    const userDetails = await getUserDetails(catalystApp);
    const accessToken = await getAccessToken(catalystApp, userDetails);
    const options = {
      hostname: HOST,
      port: PORT,
      method: "GET",
      path: `/crm/v2/Leads/${req.params.id}`,
      headers: {
        Authorization: `Zoho-oauthtoken ${accessToken}`,
      },
    };
    var data = "";
    const request = http.request(options, function (response) {
      response.on("data", function (chunk) {
        data += chunk;
      });
      response.on("end", function () {
        res.setHeader("content-type", "application/json");
        res.status(200).send(data);
      });
    });
    request.end();
  } catch (err) {
    console.log(err);
    res.status(500).send({
        message: "Internal Server Error. Please try again after sometime.",
      });
  }
});
app.post("/crmData", async (req, res) => {
  try {
    const catalystApp = catalyst.initialize(req);
    const createData = req.body;
    const reqData = [];
    reqData.push(createData);
    const data = {
      data: reqData,
    };
    if (!createData) {
      res.status(400).send({ message: "Data Not Found" });
    }
    const userDetails = await getUserDetails(catalystApp);
    const accessToken = await getAccessToken(catalystApp, userDetails);
    const options = {
      hostname: HOST,
      port: PORT,
      method: "POST",
      path: `/crm/v2/Leads`,
      headers: {
        Authorization: `Zoho-oauthtoken ${accessToken}`,
        "Content-Type": "application/json",
      },
    };
    const request = http.request(options, function (response) {
      res.setHeader("content-type", "application/json");
      response.pipe(res);
    });
    request.write(JSON.stringify(data));
    request.end();
  } catch (err) {
    console.log(err);
    res
      .status(500)
      .send({
        message: "Internal Server Error. Please try again after sometime.",
      });
  }
});
app.put("/crmData/:id", async (req, res) => {
  try {
    const catalystApp = catalyst.initialize(req);
    const updateData = req.body;
    const reqData = [];
    reqData.push(updateData);
    const data = {
      data: reqData,
    };
    if (!updateData) {
      res.status(400).send({ message: "Update Data Not Found" });
    }
    const userDetails = await getUserDetails(catalystApp);
    const accessToken = await getAccessToken(catalystApp, userDetails);
    const options = {
      hostname: HOST,
      port: PORT,
      method: "PUT",
      path: `/crm/v2/Leads/${req.params.id}`,
      headers: {
        Authorization: `Zoho-oauthtoken ${accessToken}`,
        "Content-Type": "application/json",
      },
    };
    const request = http.request(options, function (response) {
      res.setHeader("content-type", "application/json");
      response.pipe(res);
    });
    request.write(JSON.stringify(data));
    request.end();
  } catch (err) {
    console.log(err);
    res
      .status(500)
      .send({
        message: "Internal Server Error. Please try again after sometime.",
      });
  }
});
app.delete("/crmData/:id", async (req, res) => {
  console.log(`/crm/v2/Leads/${req.params.id}`);
  try {
    const catalystApp = catalyst.initialize(req);
    const userDetails = await getUserDetails(catalystApp);
    const accessToken = await getAccessToken(catalystApp, userDetails);
    const options = {
      hostname: HOST,
      port: PORT,
      method: "DELETE",
      path: `/crm/v2/Leads/${req.params.id}`,
      headers: {
        Authorization: `Zoho-oauthtoken ${accessToken}`,
        "Content-Type": "application/json",
      },
    };
    const request = http.request(options, function (response) {
      res.setHeader("content-type", "application/json");
      response.pipe(res);
    });
    request.end();
  } catch (err) {
    console.log(err);
    res.status(500).send({
        message: "Internal Server Error. Please try again after sometime.",
      });
  }
});
async function getAccessToken(catalystApp, userDetails) {
  const refresh_token = userDetails[0].Token.refresh_token;
  const userId = userDetails[0].Token.userId;
  const credentials = {
    [userId]: {
      client_id: CLIENTID,
      client_secret: CLIENT_SECRET,
      auth_url: AUTH_HOST,
      refresh_url: AUTH_HOST,
      refresh_token,
    },
  };
  const accessToken = await catalystApp.connection(credentials).getConnector(userId).getAccessToken();
  return accessToken;
}
async function getRefreshToken(code, res, domain) {
  try {
    const url = `${AUTH_HOST}?code=${code}&client_id=${CLIENTID}&client_secret=${CLIENT_SECRET}&grant_type=authorization_code&redirect_uri=${domain}/server/crm_crud/generateToken`;
	const response = await axios({
		method: "POST",
		url
	  });
    return response.data.refresh_token;
  } catch (err) {
    console.log(err);
    res.status(500).send({
        message: "Internal Server Error. Please try again after sometime.",
        error: err,
      });
  }
}
async function getUserDetails(catalystApp) {
  let userDetails = await catalystApp.userManagement().getCurrentUser();
  let userDetail = await catalystApp.zcql().executeZCQLQuery(`SELECT * FROM Token where UserId=${userDetails.user_id}`);
  return userDetail;
}
module.exports = app;
				
View more
Note: このコードをファンクションファイルにコピー&ペーストした後、以下の値を必ず置き換えてください:

ファンクションディレクトリの設定が完了しました。ファンクションとクライアントのコードについては、クライアントの設定後に説明します。

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