新規投稿
フォローする

REST APIでルックアップキーフィールドの登録をしたい

お世話になります。
少し、混乱してしまっています。ルックアップについて詳しいかたのご助言をいただきたいです。

REST APIでルックアップキーフィールドの登録をしたいのですが、
https://developer.cybozu.io/hc/ja/articles/201941754
をみると「※ルックアップフィールドの値を登録/更新できません。」とありました。できないものなのかとみていると、
https://developer.cybozu.io/hc/ja/articles/204537310
をみると「ルックアップの自動更新にチャレンジ」とあります。

単純に、レコード追加時にルックアップキーフィールドに値を登録したいだけならばできるのでしょうか?

顧客情報アプリ
 会社ID/会社名/担当者名
問い合わせアプリ
 顧客情報アプリの会社IDをルックアップキーフィールドにしました。フィールドコード:loookup_company
 ルックアップコピーフィールドには、会社名:contact_company 担当者名:contact_client とした

顧客情報アプリに既存登録されている「会社ID=1」に紐付けて
問い合わせアプリにレコードを新規追加したいです。
登録するフィールドは
 ルックアップキーフィールドの会社ID:loookup_company
 メールアドレス:usrform_mail
 サブテーブル:Taio

欲をいえば、ルックアップコピーフィールドの会社名、担当者名はキーフィールドから自動でコピーされるのが望ましいが、
とりあえずは、キーフィールドのloookup_companyにデフォルトで番号がはいればいい。
kintoneでアプリを見たときに、紐づいていればそれでいい感じです。

という条件で

===phpスクリプト===

$record["loookup_company"] = array("value" => 1);
$record["usrform_mail"] = array("value" => “test-mail@aaa.bbb.ccc”);

$taio["value"][] = array("value" =>
array(
"taio_kind" => array("value" => "メッセージ受信"),
"taio_detail" => array("value" => “細かい内容をかく”),
"taio_tanto" => array("value" => “test_user”)
));
$record["Taio"] = $taio;

// insert
// $url,$token は設定しています。
$postdata = array("app" => "1", "record" => $record);

$headers = array("X-Cybozu-API-Token: ".$token,
'Content-Type: application/json',
'Content-Type: application/x-www-form-urlencoded'
);

$opts = array(
CURLOPT_URL => $url,
CURLOPT_SSL_VERIFYPEER => false, //サーバー証明書の検証を行わない
CURLOPT_POST => true, // メソッド:POST
CURLOPT_POSTFIELDS => json_encode($postdata), // POSTデータ設定
CURLOPT_HTTPHEADER => $headers,
CURLOPT_RETURNTRANSFER => true // 結果を文字列として受け取る
);


$ch = curl_init($url);
curl_setopt_array($ch, $opts);
$result = curl_exec($ch);
curl_close($ch);
print $result;

==
上記のように作成しました。
loookup_companyをつけなければ、問い合わせアプリにレコードは登録されましたが、
loookup_companyをつけると

コンソールに以下のエラーがでます。
{code: "GAIA_AT01", id: "kcgm***********Fv4yu5", message: "APIトークンを使用する場合、ルックアップフィールドを編集できません。"}

loookup_companyフィールドに値をいれることはできないのでしょうか?
ここに値をいれれないと、既存の顧客情報と連携できないということになるかと思うので、何かpostの仕方が間違ってるだけなのかと思うのですが、
解決に至っていません。
既存の顧客情報と連携する別の方法があるのでしたら、それをご教授いただけたら幸いです。

0

3件のコメント

Avatar
OLD Hirota

自己解決しました。

ルックアップフィールドの値を追加したい場合、Rest APIで行う場合は、

パスワード認証を追加することで実行することができました。

https://developer.cybozu.io/hc/ja/articles/202531474-kintone-REST-API%E3%81%AE%E8%AA%8D%E8%A8%BC%E8%A8%AD%E5%AE%9A%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6

「ユーザー認証は、リクエストヘッダに「X-Cybozu-Authorization」を追加し、「ログイン名:パスワード」をBASE64エンコードしたものを値に指定します。PHPで記述すると以下のようになります。」

"X-Cybozu-Authorization: " . base64_encode(‘your_login_name:your_password’)

これを元に、ヘッダ情報にKintoneユーザを追加したところ、登録されました。

それに、ルックアップフィールドキーをいれただけで、他のルックアップフィールドは自動的に顧客情報から値がコピーされました。

パスワード認証が入っていれば、トークン認証は不要のようです。

 

0
Avatar
Ryu Yamashita

その辺のお話は、https://developer.cybozu.io/hc/ja/articles/201941754#step7 に注意書きを含めて一通り記載があります。
ちなみに、ルックアップフィールドの登録更新で、APIトークンが使えないのはアプリ単位の発行でアプリ内の操作しか権限指定できないためです。ルックアップにはコピー元の閲覧権限とコピー先の登録or更新権限が必要なため、これらの権限を有するユーザーによるパスワード認証が必要となります。

0
Avatar
OLD Hirota

詳しい説明、ありがとうございます。

APIトークンが使えない理由も納得できました。

権限について理解が全然足りていなかったです。

https://developer.cybozu.io/hc/ja/articles/204537310

こちらで登録できているのは、Kintoneにログインしているからできることなのかなと思っています。

 

Rest APIを利用することは多くありそうなので、もっと理解を深めようと思います。

 

0
ログインしてコメントを残してください。