Zoho WriterのマージAPIによるサブフォーム項目と画像項目のマージ

Zoho WriterのマージAPIによるサブフォーム項目と画像項目のマージ

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

AIに説明してもらう:ChatGPT| Perplexity| Claude

概要

Zoho WriterのMerge APIを使用すると、Zoho CRMのデータを使ってドキュメントに動的に値を差し込めます。標準項目だけでなく、関連リスト(サブフォーム)項目や画像項目も差し込めます。このガイドでは、DelugeスクリプトとAPI呼び出しの両方を使用して、Writerテンプレートにサブフォーム項目と画像項目を差し込む手順を説明します。

手順

  1. Zoho Writerを開き、新しい差し込みテンプレートを作成します。
  2. [項目の挿入]オプションを使用して、メインタブの項目と関連リスト(サブフォーム)項目の両方の差し込み項目を挿入します。
テンプレート内容の例:

こんにちは <<Contacts.First Name>>
<<Contacts.メール>> にメールを送信します

請求書の担当者
請求書番号
作成者
期限日
<<Invoices.Invoice Owner>>
<<Invoices.Invoice Number>>
<< Invoices. Created By>>
<<Invoices.Due Date>>

Product_Code

Product_Description

Item_Quantity

Item_Price

 

«Products.Product_Code»

 

«Products.Product_Description»

 

«Products.Item_Quantity»

 

«Products.Item_Price»

ステップ2:APIで関連リスト項目の情報を取得

テンプレート内のすべての差し込み項目を取得するには、次のDelugeコードを使用します。
fields = invokeurl
[
type: GET
connection:'<CONNECTION_NAME>'
];
info fields;
Notes
  • <DOCUMENT_ID>を実際のWriterドキュメントIDに置き換えます。

  • 接続の設定については、Zoho Connectionsを参照してください。

ステップ3:Delugeスクリプトによる関連リスト項目のマッピング  

invoicesRecords = zoho.crm.getRecordById('Invoices', invoiceId);

 

CustomerInvoice = Map();

CustomerInvoice.put('First_Name', invoicesRecords.get('Account_Name').get('name'));

CustomerInvoice.put('メール', invoicesRecords.get('Account_Name').get('id'));

 

invoicesList = list();

invoiceDetails = Map();

 

invoiceDetails.put('Invoices.Owner', invoicesRecords.get('Owner').get('name'));

invoiceDetails.put('Invoices.Invoice_Number', invoicesRecords.get('Invoice_Number'));

invoiceDetails.put('Invoices.Created_By', invoicesRecords.get('Created_By').get('name'));

invoiceDetails.put('Invoices.Due_Date', invoicesRecords.get('Due_Date'));

invoicesList.add(invoiceDetails);

 

productList = list();

productDetails = Map();

productDetails.put('Products.Product_Code', invoicesRecords.get('Product_Code'));

productDetails.put('Products.Product_Description', invoicesRecords.get('Product_Description'));

productDetails.put('Products.Item_Quantity', invoicesRecords.get('Item_Quantity'));

productDetails.put('Products.Item_Price', invoicesRecords.get('Item_Price'));

productList.add(productDetails);

 

 

CustomerInvoice.put('Invoices', invoicesList);

CustomerInvoice.put('Products', productList)

 

 

mergedata = Map();

mergedata.put('merge_data', {'data': CustomerInvoice});

mergedata.put('subject', '請求書の詳細');

 

//任意

mergedata.put('message', '請求書を添付しましたのでご確認ください。');

info mergedata;

 

zoho.writer.mergeAndSend('eb4kob4cf65bb6d074af7a7de21e561119eb9', 'pdf', invoicesRecords.get('メール'), mergedata, '<CONNECTION_NAME>');

ステップ4:RL項目を含むサンプルJSONデータ(API経由)

{

'data': [

{

'First_Name': 'Amelia',

'メール': 'amelia@ジルカー.com',

'Invoices': [

{

'Invoices.Owner': 'John',

'Invoices.Invoice_Number': 1279,

'Invoices.Created_By': 'Amelia',

'Invoices.Due_Date': '07/10/2020'

}

]

'Products': [

{

'Products.Product_Code': 'A123',

'Products.Product_Description': 'モバイルケース',

'Products.Item_Quantity': 2,

'Products.Item_Price': 1000

}

]

}

]

}

ステップ5:Merge APIで画像項目の値を渡す

差し込みに画像項目を含めるには、次の手順を実行します。
  • まず、データ取得API(バージョン5以降)を呼び出し、プレビュー画像ID [Preview_Id__s] をCRMのレスポンスから取得して使用します。
  • 次のパターンを使用して、画像URLを手動で作成します。
以下のスニペット内の変数を置き換えるためのサンプル値。
Info
タブ = '見込み客'; //該当するタブ名を指定してください
RecordId = '456789'; //CRMデータID
RLModuleName= 'Products'; //関連リスト名
zohoapi_domain (US DCの場合)= 'https://www.zohoapis.com';//その他のDCについては、APIドメインをこちらで参照してください。

標準画像項目の場合  

// データを取得
recordInfo = invokeurl
[
url :zohoapi_domain+'/crm/v5/'+タブ+'/'+RecordId;
type :GET
connection:'<CONNECTION_NAME>'
];
recordInfoData = recordInfo.get('data').get(0);
dataMap = Map();
dataMap.put('メール',recordInfoData.get('メール'));
dataMap.put('Last_Name',recordInfoData.get('Last_Name'));
//画像項目
if(recordInfoData.get('Image_Upload') != null)
{
imageId = recordInfoData.get('Image_Upload').get(0).get('Preview_Id__s');
imageUrl = zohoapi_domain+'/crm/v2.1/__attachment_preview/' + imageId; //作成した画像URL
dataMap.put('Image_Upload',imageUrl);
}
info dataMap;

関連リスト内の画像項目の場合  

画像項目が関連リストのデータの場合は、関連データAPI(バージョン5以降)を呼び出して、関連リストデータIDを取得します。次に、データ取得APIをこの関連リストデータIDで呼び出し、プレビュー画像IDを取得します。
dataMap = Map();
//関連リストIDを取得
relatedListsIds = invokeurl
[
url:zohoapi_domain+'/crm/v5/'+タブ+'/'+RecordId+'/'+RLModuleName+'?fields=Parent_Id'
type :GET
connection:'<CONNECTION_NAME>'
];
rlListData = relatedListsIds.get('data');
rlProductsList = List();
//関連リストデータを取得
for each データ in rlListData
{
rlId = データ.getJSON('id');
rlInfo = invokeurl
[
url :zohoapi_domain+'/crm/v5/+'RLModuleName+'/' + rlId
type :GET
connection:'crm'
];
rlInfoData = rlInfo.get('data').get(0);
rlMap = Map();
rlMap.put('Product_Name',rlInfoData.getJSON('Product_Name'));
rlMap.put('Product_Code',rlInfoData.getJSON('Product_Code'));
//関連リストの画像項目
if(rlInfoData.get('Image_Upload') != null)
{
rlImageId = rlInfoData.get('Image_Upload').get(0).get('Preview_Id__s');
imageUrl = zohoapi_domain+'/crm/v2.1/__attachment_preview/' + rlImageId; //作成した画像URL
rlMap.put('Image_Upload',imageUrl);
}
rlProductsList.add(rlMap);
}
//関連リストをdataMapに追加
dataMap.put('Products',rlProductsList);
info dataMap;

補足事項

  • 項目名を動的に取得して正確にマッピングするには、/fields APIを常に使用してください。
  • Writerテンプレート内の差し込み項目名がAPIまたはDelugeスクリプトで使用するJSONキーと完全に一致していることを確認してください。
  • すべての画像項目では、画像URLを作成する際に、__attachment_previewエンドポイントを使用してください。
    https://{zohoapi_domain}/crm/v2.1/__attachment_preview/{Preview_Id__s}
  • CRM APIでは画像のプレビューIDのみが提供されます。完全なURLは提供されないため、URLの作成が必要です。
  • 正しいAPIバージョンを使用してください(v5はCRM用、v2.1は添付ファイルプレビュー用)。
  • Delugeを使用する場合は、次の点を確認してください。
    • 必ずconnectionを設定してください。
    • JSONマッピングは、Writerテンプレートの構造と一致している必要があります。
  • WriterドキュメントIDは、URL内で次の形式で確認できます。
    /writer/open/<document_id>

トラブルシューティング

1. エラー/症状:差し込み時に、サブフォームの画像が表示されない、またはサブフォームデータを追加すると表示されなくなる。

考えられる原因:
画像項目が空である、テンプレートで正しくマッピングされていない、または差し込みデータに正しく含まれていない可能性があります。
メモ:これはサブフォーム自体の数が原因ではありません。

推奨される解決策は次のとおりです。
  1. 差し込み項目名が、データソース内の項目と完全に一致していることを確認してください。
  2. APIを使用している場合は、利用可能な差し込み項目の一覧をすべての項目を取得するAPIを使用して取得し、正しい項目IDとサブフォーム構造を確認してください。
  3. 必要に応じて差し込み項目を再挿入してください。