Anzeige
Anzeige

Más contenido relacionado

Más de Satoru Abe(20)

Último(20)

Anzeige

202112 のの会@関数Talk 33rd FunctionTalkInNotesKnowsWorkshop33rd

  1. @ @ -notes knows community- 2021/12/09 阿部 覚 (tw:) @abesat @関数Talk 第33回 公開版
  2. @ @ @PickListについては2回お話して 一通り引数の紹介を(いちおう)したのですが まだ確認したいことがあるなと思い、
  3. @ @ @PickList でもうちょっと放談
  4. @ @ @PickList でビューを表示 @PickListの一番メジャーな使い方、と私が思っている ビューから文書を選択する[Custom]パターンについて
  5. @ @ @PickList でビューを表示 選択した文書の、指定した列の値をとってきてくれる 取ってくるのは 取ってくるのは 1 1列目 だよ 列目 だよ
  6. @ @ @PickList で複数項目をゲットするには しかし、どうせ取ってきてくれるなら 複数の項目をいっぺんに取ってきてくれないものかな?
  7. @ @ @PickList で複数項目をゲットするには @PickList 単体では、そういう融通はきかないようです 例えばこんな指定をしてもだめ 式はエラーにはならないけど、 1つ目の列番号分しか取り出してくれませんでした 取ってくるのは 取ってくるのは 1 1列目と 列目と2 2列目だよ 列目だよ ( (希望 希望) )
  8. @ @ 複数項目を取得するためのアプローチ したがって、@PickListを使って複数の項目を取り出すには 多少の工夫を加える必要が生じます 工夫のしかたには、 おもに2つのアプローチがあると思います いずれのアプローチも、 @PickListに使用するビューで 「非表示の列」を持つのが無難なやり方です ここでの「非表示の列」とは 「列」プロパティの「詳細」タブで 「列を非表示」にチェックしたものを意味します
  9. @ @ 複数項目を取得するためのアプローチ その1 アプローチその1 1つの列に複数項目を寄せ集める 対象のビューに非表示の列を設定します その列に、取得したい複数の項目の値を連結で持たせます
  10. @ @ アプローチその1 1つの列に複数項目を寄せ集める どのように連結するかは例えば…👇
  11. @ @ アプローチその1 1つの列に複数項目を寄せ集める @PickListでは、この非表示列を取得します ここでは取得した値を @Wordという関数で分割して セットしています (この関数のTalkはまたの機会に)
  12. @ @ アプローチその1 1つの列に複数項目を寄せ集める この方法には次のような制約・欠点があると思います 1.対象項目の属性を 一時的に統一しなくてはならない 数値や日時のフィールド項目も、 一時的にテキストにそろえないと 式がエラーになってしまいます
  13. @ @ アプローチその1 1つの列に複数項目を寄せ集める この方法には次のような制約・欠点があると思います 2.複数値の項目が含まれるなら単一値になるように 連結するなどの工夫が必要 ここでは@Implodeという関数を使って 連結しています (この関数についてのTalkもまたの機会に ) 😅
  14. @ @ アプローチその1 1つの列に複数項目を寄せ集める この方法には次のような制約・欠点があると思います 3.項目を連結する際の連結文字に注意が必要 たとえば"-"でつなぐとすれば、 対象フィールド内に"-"が含まれていない必要があります でもユーザーが自由入力してよいフィールド項目なら、 どんな文字が入っている可能性も 排除できないとも思います(いちばんの悩みどころ)
  15. @ @ 複数項目を取得するためのアプローチ その2 アプローチその2 @PickListは、文書の特定だけに使う やはり対象のビューに非表示の列を設定します
  16. @ @ アプローチその2 @PickListは、文書の特定だけに使う @PickListでは、この非表示列を取得します すなわち、取得されるのは文書IDになるのですが 複数項目の取り出しは この文書IDを使って別の式で行います そこで一つ、確認ごとを挟みます
  17. @ @ @GetDocField で放談
  18. @ @ @GetDocField( 文書ID ; フィールド名 ) こんな構文で 指定した文書からフィールド値を取り出す関数です @GetDocField
  19. @ @ @PickList で、選択した文書の文書IDを取り出した後、 @GetDocField では、文書IDを使って 複数のフィールド項目値を取り出すことができるわけです @PickListと@GetDocField
  20. @ @ アプローチその2 @PickListは、文書の特定だけに使う さて、"XSnippets" というサイトに @PickList を使った類似のサンプルがあります https://www.xpages.jp/XSnippetsJ.nsf/
  21. @ @ アプローチその2 @PickListは、文書の特定だけに使う
  22. @ @ このサンプルでは、@Picklistで取得した文書IDを元に、 文書ID順のビュー(view02)から@DbLookupで 値を取得しています アプローチその2 @PickListは、文書の特定だけに使う value_a := @GetDocField( unid ; "Field_A" ); value_b := @GetDocField( unid ; "Field_B" ); value_c := @GetDocField( unid ; "Field_C" ); @GetDocField を使えば、こんな感じの式だけで良く 文書ID順のビューなんて要らないよ…?
  23. @ @ 実は、@GetDocField は、一度実行するだけで文書全体を読み込む 現時点ではあまりパフォーマンスがよろしくない関数 なのだそうです <関連情報> Performance Design Tips : @GetDocField 関数 | Lotus Notes/Domino (R) をこよなく愛して。。。。 https://ameblo.jp/iwama/entry-10002063621.html GetDocField の処方箋 https://speakerdeck.com/harunakano/getdocfield-falsechu-fang-jian @GetDocField の現状… value_a := @GetDocField( unid ; "Field_A" ); value_b := @GetDocField( unid ; "Field_B" ); value_c := @GetDocField( unid ; "Field_C" ); 1 1回で取れる 回で取れる フィールド項目値は フィールド項目値は ひとつ分だけ ひとつ分だけ なのに… なのに… モッタイナイ モッタイナイ この例では この例では 文書全体を 文書全体を 3 3回読み込む 回読み込む 😮 😮 こちらは実は、今回の「のの会」後の中野さん調査
  24. @ @ 今回触れた方法をまとめるとこんな感じになります @PickList を使用して複数項目を取得するには 方法 留意点 1つの列に複数項目を寄せ集める 項目の属性を統一しなくてはならない 複数値の項目は連結するなどの工夫が必要 項目を連結する際の連結文字に注意 @PickListは、文書の 特定だけに使う 文書IDをもとに @GetDocFieldを 項目数分実施 現状では@GetDocFieldのパフォーマンスに課題、 都度文書全体を読み込んでしまう 文書IDをもとに @DbLookupを 項目数分実施 文書ID順の専用ビューも準備が必要
  25. @ @ スライド中で触れたXSnippets(日本語版)は Notes/Domino 関係のサンプルコードを集めたサイトです (現時点で式言語のサンプルはわずかですが) https://www.xpages.jp/XSnippetsJ.nsf/ 公開にあたって当初発表時に無かったページ等を追加させていただきました 補足
  26. @ @ 今回もお付き合い ありがとうございました 😀
Anzeige