kintone.events.on(['app.record.create.show','app.record.edit.show','app.record.index.edit.show'], function (event) { var b_record = event.record; var b_attach = b_record['添付ファイル']['value']; for(var i = 0; b_attach.length > i; i++){ var b_tcName = b_attach[i]['name']; .....
10件のコメント
GP-KIYO さん、
お尋ねの内容を、こちらで、試してみました。
>kintonecli で -b オプションを使って添付ファイルをローカルに取り込む際に、
>同一レコードで添付ファイルフィールドに複数ファイルを添付していた場合で
>なおかつファイル名が同じだと後のファイルしか取り込めない
>(おそらく先の添付ファイルは同一ファイル名で上書きされてしまう)事象があります。
>これを解決する方法、
>もしくは 添付ファイル名を重複できないようにする方法があればご教授願います。
[確認1]ご指摘の現象を確認しました。
(1)添付ファイルのアプリを作りました。
[フォーム] 添付ファイルフィールド1個(フィールドコード「添付ファイル」)
(2)1レコードを登録し、添付ファイルフィールドに、同名のファイル(paint_x10.png)を2つ添付しました。
(3)コマンドプロンプトで、 -b オプションを使って、ローカルフォルダ「download」にダウンロードしました。
(4)後のファイル1つしかダウンロードできません。
※ファイル1
ローカルフォルダ download/添付ファイル-0
ダウンロードファイル paint_x10.png
[確認2]同名の2つのファイルをダウンロードできました。
(1)添付ファイルのアプリを作りました。
[フォーム] 添付ファイルフィールド2個(フィールドコード「添付ファイル」/「添付ファイル_a」)
(2)1レコードを登録し、2つの添付ファイルフィールドそれぞれに、1つづつ同名のファイル(paint_x10.png)を添付しました。
(3)コマンドプロンプトで、 -b オプションを使って、ローカルフォルダ「download」にダウンロードしました。
(4)同名の2つのファイルをダウンロードできました。
※ファイル1
ローカルフォルダ 添付ファイル-0
ダウンロードファイル paint_x10.png
※ファイル2
ローカルフォルダ download/添付ファイル_a-0
ダウンロードファイル paint_x10.png
これも、1つの「解決方法」かなと思います。
以上です。
よろしくお願い致します
ありがとうございます。
上記解決方法で運用は考えたのですが、そうなると 添付ファイルは1ファイルしか載せられないように制御しなければなりません。
制御方法があればご教授いただけると幸いです。
GP-KIYO さん、
アプリの運用が、どのように行われているのか、興味深いところですね。
>制御方法があればご教授
そのような制約を自動化するということについては、分かりませんが、
・添付ファイルフィールドの添付ファイルは1つだけと、運用規則を周知するだけでは、不十分ですか?
また、このアプリの運用において、
・1つの添付ファイルフィールドに同名のファイルを複数添付するということが起きるのはどうしてですか?
・同名のファイルで、内容の違うものが作成されることがある、という運用環境なのでしょうか?
ご希望の制御方法ということでのコメントでなくて申し訳ありません。
よろしくお願いいたします。
ありがとうございます。
ユーザがレコード登録時にモバイルで商品画像等を添付する(既存ファイルのアップロードではなく)際に、カメラで複数添付をすると同じファイル名(image.jpg)になってしまいます。
CLIでエクスポートを一括で行って、別形式で画像ファイルをまとめて使うため(レコード番号-1.jpg といったファイル名に一括返還をして紐づけるといった事をします。
そのため、該当レコードの添付ファイルに(cliで出力したフォルダー内)何個のファイルがあるかをチェックして、レコード番号-1.jpg レコード番号-2.jpg といった形にしたいのです。
数多くのユーザがいると運用ルールでといったことは難しいため、できないようにするor解決するしかないです
横レスです。
GP-KIYOさん
保存時に添付ファイルを一つに制限するのが近道かと思い、保存時に、
console.log(event.record['file']['value']);
これで中身を確認しようとしましたが、添付ファイルの内容が取得できませんでした。
こちら
https://cybozudev.zendesk.com/hc/ja/community/posts/202896454-添付ファイル数の取得について
の過去ログにある様に、保存時には、添付ファイルの情報を取得できないのかもしれません。
となると、
1)CLIをカスタマイズして、保存時にファイル名が被らないようにする。
2)APP側の詳細画面表示時には、添付ファイルの情報を取得できるようですので、
そこで重複確認を行い、重複していた場合は、"何か"をする。
(処理としてはかなりいびつなので、お勧めできず)
(画像ファイル名重複がレアケースならば、"何か"を、"備考欄にファイル名重複と記入する"
でも良いかもしれません。少なくとも、データを落とした段階で、どれが重複しているか、
判断がつきますから。
ちなみに、
>ユーザがレコード登録時にモバイルで商品画像等を添付する(既存ファイルのアップロードではなく)際に、カメラで複数添付をすると同じファイル名(image.jpg)になってしまいます。
これですが、スマートフォンでしょうか。
通常スマートフォンで写真を撮影すると、ファイル名には日付_時間.jpg みたいな感じで、ファイル名は基本かぶらない印象があるのですが。
GP-KIYO さん、
>ユーザがレコード登録時にモバイルで商品画像等を添付する(既存ファイルのアップロードではなく)際に、
>カメラで複数添付をすると同じファイル名(image.jpg)になってしまいます。
なるほど、そういうこともあるかも知れません。
>そのため、該当レコードの添付ファイルに(cliで出力したフォルダー内)何個のファイルがあるかをチェックして、
>レコード番号-1.jpg レコード番号-2.jpg といった形にしたいのです。
「該当レコードの添付ファイルに(cliで出力したフォルダー内)何個のファイルがあるか」ですが、
レコード追加画面や、レコード編集画面で、添付ファイルを添付し、「保存」すると、
そのレコードの詳細画面に戻ります。
そのときに、添付ファイルの個数をチェックできます。
※次のようなコードで、個数と、ファイル名を拾いました。
kintone.events.on(['app.record.create.show','app.record.edit.show','app.record.index.edit.show'], function (event) {
var b_record = event.record;
var b_attach = b_record['添付ファイル']['value'];
for(var i = 0; b_attach.length > i; i++){
var b_tcName = b_attach[i]['name'];
.....
ファイル名が分かるので、同名ファイルの有無が分かります。
ユーザは、まだアプリを操作中なので、ここで、注意メッセージの表示ができると思います。
以上、ご参考になるか分かりませんが、ご報告です。
よろしくお願い致します。
上海レンユアー 松村 さん
モバイルアプリで、参照する際に、写真またはビデオを撮るとして、直接添付をするとファイル名はすべてimage.jpgになります
kazuo urata さん
単純に1添付1ファイルにできれば何とか解決できるのですけどね・・・。
jsで制限にするにしても、モバイルのアプリにうまく適合できない事が多いのであまり実装向きではないので、引き続き対策を練りたいと思います
>GP-KIYOさん
そうなのですね。
私の環境(アンドロイド)のkintoneアプリだと、添付ファイルを付けるときに写真を撮っても、image.jpg にはならないため、
イメージがわきませんでしたが、OSだったり、バージョンだったりで、少々挙動が違うのかもしれませんね。
cli-kintoneではエクスポートしたデータをインポートしたときに、元の状態になることを目指したので、
保存時にファイル名を変更することはしていません。
cli-kintoneのソースを以下のように修正してビルドすれば、ファイル名が被らないようにすることはできます。
そのままインポートはできなくなりますが、試してみてください。
export.go 293行目
//path := fmt.Sprintf("%s%c%s", fileDir, os.PathSeparator, file.Name)
path := fmt.Sprintf("%s%c%d-%s", fileDir, os.PathSeparator, idx, file.Name)
門屋さん
ありがとうございます。 インポート用としてのCLIは現状使っていないので、試してみたいと思います。
しかしながら、ビルドの手段がない為、テストができません。
上海レンユアー 松村 さん
こちらはiphone で試してみた結果です。