Upgrade to Pro — share decks privately, control downloads, hide ads and more …

v19 part 2

v19 part 2

4D Japan

July 21, 2021
Tweet

More Decks by 4D Japan

Other Decks in Technology

Transcript

  1. 7⽉21⽇のセッション 1 14:00 メールトランスポーター 2 14:10 Write Pro 3 14:20

    Compare strings, Position 4 14:30 データブラウザ 5 14:35 モバイル 6 14:40 4D Server 7 14:55 オブジェクト指向プログラミング part 2 8 15:05 オ・ル・ダ part 2 9 15:15 ORDA Class API part 2
  2. Internet Commands vs POP3 transporter スレッドセーフ POP3 over TLS ログファイル

    ログイン認証 APOP PLAIN 新ネットワークレイヤー専⽤ APOP PLAIN LOGIN CRAM-MD5 OAUTH2
  3. SET DATABASE PARAMETER(POP3 Log; 1) $path:=Get 4D file(POP3 log file)

    $file:=File(POP3 log file) Internet Commands vs POP3 transporter スレッドセーフ POP3 over TLS ログファイル ログイン認証 APOP PLAIN $POP3:=POP3 New transporter($params) $params.logFileプロパティでパスを指定 /PACKAGE/Logs/4DPOP3Log_X.txt 統合ログファイル シングルログファイル 新ネットワークレイヤー専⽤ 10MB × 10個 Circular log limitation でファイル数を管理 APOP PLAIN LOGIN CRAM-MD5 OAUTH2
  4. Internet Commands vs IMAP transporter 新ネットワークレイヤー専⽤ SET DATABASE PARAMETER(IMAP Log;

    1) $path:=Get 4D file(IMAP log file) $file:=File(IMAP log file) $IMAP:=IMAP New transporter($params) $params.logFileプロパティでパスを指定 統合ログファイル シングルログファイル × 10個 Circular log limitation でファイル数を管理 /PACKAGE/Logs/4DIMAPLog_X.txt 10MB × 10個 スレッドセーフ IMAP over TLS ログファイル ログイン認証 PLAIN PLAIN LOGIN CRAM-MD5 OAUTH2
  5. Internet Commands vs SMTP transporter 新ネットワークレイヤー専⽤ SET DATABASE PARAMETER(SMTP Log;

    1) $path:=Get 4D file(SMTP log file) $file:=File(SMTP log file) $SMTP:=SMTP New transporter($params) $params.logFileプロパティでパスを指定 統合ログファイル シングルログファイル × 10個 Circular log limitation でファイル数を管理 /PACKAGE/Logs/4DSMTPLog_X.txt 10MB × 10個 スレッドセーフ STARTTLS / SMTP over TLS ログファイル ログイン認証 PLAIN LOGIN CRAM-MD5 OAUTH2 PLAIN LOGIN CRAM-MD5
  6. Write Pro ・PDF への直接の書き出し ・DOCX ファイルの読み込み ・検索と置換 ・ブレークをすべて取得 ・フォーミュラ: キャリッジリターンの振る舞いの管理

    ・UI の改善 ・表⽰するウィジェットページを選択 ・⼩数点区切りに使⽤する⽂字を選択 ・ソフトハイフンの管理 ・表とその要素のための新しい標準アクション ・プロテクト属性のサポート ・ドキュメント内部のフォーミュラを管理 ・ピクチャーの消去 新機能:
  7. Write Pro ・PDF への直接の書き出し ・DOCX ファイルの読み込み ・検索と置換 ・ブレークをすべて取得 ・フォーミュラ: キャリッジリターンの振る舞いの管理

    ・UI の改善 ・表⽰するウィジェットページを選択 ・⼩数点区切りに使⽤する⽂字を選択 ・ソフトハイフンの管理 ・表とその要素のための新しい標準アクション ・プロテクト属性のサポート ・ドキュメント内部のフォーミュラを管理 ・ピクチャーの消去 新機能:
  8. Write Pro Write Pro υΩϡϝϯτ PDF ϑΝΠϧ • 特定の要素をPDFに出⼒しな いオプション

    PDF への直接の書き出し • ハイパーリンクのサポート
  9. Write Pro Write Pro υΩϡϝϯτ PDF ϑΝΠϧ • 特定の要素をPDFに出⼒しな いオプション

    PDF への直接の書き出し • ハイパーリンクのサポート • コンパクトなファイルサイズ
  10. Write Pro Write Pro υΩϡϝϯτ PDF ϑΝΠϧ • 特定の要素をPDFに出⼒しな いオプション

    PDF への直接の書き出し • ハイパーリンクのサポート • コンパクトなファイルサイズ • プリエンプティブモードで出⼒
  11. Write Pro Write Pro υΩϡϝϯτ PDF ϑΝΠϧ • 特定の要素をPDFに出⼒しな いオプション

    PDF への直接の書き出し • ハイパーリンクのサポート • コンパクトなファイルサイズ • プリエンプティブモードで出⼒ WP EXPORT DOCUMENT wk pdf
  12. Write Pro DOCX の読み込み • 再現性の⾼い変換処理  ・差し込みフィールド  ・表組み  ・印刷設定  ・画像   など

    .docx ϑΝΠϧ Write Pro υΩϡϝϯτ • ユーザー向けの変換ログ • デベロッパー向けの変換ログ
  13. Write Pro DOCX の読み込み • 再現性の⾼い変換処理  ・差し込みフィールド  ・表組み  ・印刷設定  ・画像   など

    .docx ϑΝΠϧ Write Pro υΩϡϝϯτ • ユーザー向けの変換ログ • デベロッパー向けの変換ログ WP Import document wk docx
  14. Compare strings, Position sk strict sk char codes sk case

    insensitive sk diacritic insensitive sk kana insensitive $result:=Compare strings(string1; string2; option) new! option
  15. Compare strings, Position sk strict sk char codes sk case

    insensitive sk diacritic insensitive sk kana insensitive $find:=Position(stringToFind; text; start; lengthFound; option | *) new! $result:=Compare strings(string1; string2; option) new! option
  16. Compare strings, Position モード sk strict ⽇本語コレーションʢICUʣ オプション sk char

    codes ⽂字コードを評価 sk case insensitive ⼤⽂字と⼩⽂字を区別͠ͳ͍ (照合順序)
  17. Compare strings, Position モード sk strict ⽇本語コレーションʢICUʣ オプション sk char

    codes ⽂字コードを評価 sk case insensitive ⼤⽂字と⼩⽂字を区別͠ͳ͍ sk diacritic insensitive 清⾳と濁⾳を۠ผ͠ͳ͍ (照合順序)
  18. Compare strings, Position モード sk strict ⽇本語コレーションʢICUʣ オプション sk char

    codes ⽂字コードを評価 sk case insensitive ⼤⽂字と⼩⽂字を区別͠ͳ͍ sk diacritic insensitive 清⾳と濁⾳を۠ผ͠ͳ͍ sk kana insensitive 全⾓と半⾓/平仮名と⽚仮名を区別͠ͳ͍ (照合順序)
  19. Compare strings, Position モード sk strict ⽇本語コレーションʢICUʣ オプション sk char

    codes ⽂字コードを評価 sk case insensitive ⼤⽂字と⼩⽂字を区別͠ͳ͍ sk diacritic insensitive 清⾳と濁⾳を۠ผ͠ͳ͍ sk kana insensitive 全⾓と半⾓/平仮名と⽚仮名を区別͠ͳ͍ sk case insensitive ⼤⽂字と⼩⽂字を区別͠ͳ͍ (照合順序)
  20. Compare strings, Position モード sk strict ⽇本語コレーションʢICUʣ オプション sk char

    codes ⽂字コードを評価 デフォルト sk case insensitive ⼤⽂字と⼩⽂字を区別͠ͳ͍ sk diacritic insensitive 清⾳と濁⾳を۠ผ͠ͳ͍ sk kana insensitive 全⾓と半⾓/平仮名と⽚仮名を区別͠ͳ͍ sk case insensitive ⼤⽂字と⼩⽂字を区別͠ͳ͍ sk strict + sk case insensitive + sk kana insensitive ⽇本語コレーション・清⾳と濁⾳を区別する・他は区別しない (照合順序)
  21. OFF ҟͳΔ ҟͳΔ Compare strings, Position テキスト検索⽤の⽂字列⽐較を使⽤する ON OFF いすず

    いすゞ らーめん らあめん ⼤⽂字と⼩⽂字を区別しない ON さつき さっき 4D 4d *データベース設定>データ⾔語>⽇本語 ҟͳΔ ҟͳΔ ಉ͡ ಉ͡ ಉ͡ ಉ͡
  22. ҟͳΔ ҟͳΔ OFF OFF ҟͳΔ ҟͳΔ ಉ͡ ಉ͡ Compare strings,

    Position テキスト検索⽤の⽂字列⽐較を使⽤する ON OFF いすず いすゞ らーめん らあめん ⼤⽂字と⼩⽂字を区別しない ON さつき さっき 4D 4d 清⾳と濁⾳を区別しない ON ハック バッグ Ozil Özil *データベース設定>データ⾔語>⽇本語 ҟͳΔ ҟͳΔ ಉ͡ ಉ͡ ಉ͡ ಉ͡
  23. データエクスプローラー Internal Components Internal User Components 4D Labels 4D Mobile

    App 4D Report development pk_wizard preferences runtime WebAdmin new!
  24. 4D Server Who did what: Store user aliases in the

    journal; Server code development in project applications
  25. ローカルクライアント 4DProject ローカル環境 projectToken.json { "token": "…UUID…", "path": "…databaseName.4DProject" }

    /AppData/Roaming/4D Server/databaseName/ /Application Support/4D Server/databaseName/ or token
  26. ローカルクライアント 4DProject ローカル環境 フィルター json {...} スタイル css {...} フォーム

    json {...} メソッド 4dm メニュー json {...} ストラクチャ xml </> ユーザー/グループ json {...} 設定 xml </>
  27. ローカルクライアント 4DProject ローカル環境 フィルター json {...} スタイル css {...} フォーム

    json {...} メソッド 4dm ファイル > すべて保存… →ユーザーモード メニュー json {...} ストラクチャ xml </> ユーザー/グループ json {...} 設定 xml </> リロード要求
  28. ローカルクライアント 4DProject ローカル環境 フィルター json {...} スタイル css {...} フォーム

    json {...} メソッド 4dm メニュー json {...} ストラクチャ xml </> ユーザー/グループ json {...} 設定 xml </> リロード要求 ファイル > すべて保存… →ユーザーモード RELOAD PROJECT
  29. ローカルクライアント 4DProject ローカル環境 フィルター json {...} スタイル css {...} フォーム

    json {...} メソッド 4dm メニュー json {...} ストラクチャ xml </> ユーザー/グループ json {...} 設定 xml </> リロード要求 ファイル > すべて保存… →ユーザーモード RELOAD PROJECT リロード要求
  30. ローカルクライアント 4DProject ローカル環境 フィルター json {...} スタイル css {...} フォーム

    json {...} メソッド 4dm ストラクチャ xml </> ユーザー/グループ json {...} 設定 xml </> ファイル > すべて保存… →ユーザーモード RELOAD PROJECT メニュー json {...} →最前⾯ RELOAD PROJECT
  31. ローカルクライアント 4DProject ローカル環境 フィルター json {...} スタイル css {...} フォーム

    json {...} メソッド 4dm ストラクチャ xml </> ユーザー/グループ json {...} 設定 xml </> ファイル > すべて保存… →ユーザーモード RELOAD PROJECT メニュー json {...} →最前⾯ RELOAD PROJECT リモート環境
  32. 新しいシンタックス 新しいシンタックス var $text1; $text2 : Text var $num :

    Integer var $pict : Picture 従来のシンタックス C_TEXT($text1;$text2) C_LONGINT($num) C_PICTURE($pict)
  33. 新しいシンタックス 新しいシンタックス var $text1; $text2 : Text var $num :

    Integer var $pict : Picture 従来のシンタックス C_TEXT($text1;$text2) C_LONGINT($num) C_PICTURE($pict) 宣⾔コマンド
  34. 新しいシンタックス 新しいシンタックス var $text1; $text2 : Text var $num :

    Integer var $pict : Picture クラス 従来のシンタックス C_TEXT($text1;$text2) C_LONGINT($num) C_PICTURE($pict) 宣⾔コマンド
  35. 新しいシンタックス 新しいシンタックス var $text1; $text2 : Text var $num :

    Integer var $pict : Picture クラス 従来のシンタックス C_TEXT($text1;$text2) C_LONGINT($num) C_PICTURE($pict) 宣⾔コマンド 両シンタックスの併⽤ OK ローカル/プロセス変数 OK インタープロセス変数 NG 配列 NG
  36. 新しいシンタックス ⼿本にしたのはTypeScriptのシンタックス var $var : cs.MyClass // ϢʔβʔΫϥε var $var

    : 4D.File // ϏϧτΠϯΫϥε var $var : 4D.Object // ΦϒδΣΫτ var $var : Object // 4D.Objectͷ୹ॖܥ var $var : Collection // 4D.CollectionͰ͸ͳ͍ var $var : Text͋ var $var : Picture͋ var $var : Variant͋ var $var // লུ࣌͸όϦΞϯτܕ var $var : Date // ؔ਺໊ͱಉ͡ var $var : Time // ؔ਺໊ͱಉ͡ var $var : Boolean͋ var $var : Real͋ var $var : Integer // ഒ௕੔਺ var $var : Pointer͋ var $var : Blob͋
  37. 新しいシンタックス Compiler_Variables var text1; text2 : Text var number :

    Integer var pict : Picture C_LONGINT(number) C_PICTURE(pict) C_TEXT(text1) C_TEXT(text2) ܕએݴΛੜ੒ プリプロセッサは従来の変数宣⾔を⽣成する 新しいシンタックスのメリットはオブジェクト型変数をクラスで宣⾔できること クラスで宣⾔するメリットはコード補完で的確な⼊⼒候補が表⽰されること
  38. C_OBJECT($dataclass) C_OBJECT($entity) C_OBJECT($entitySelection) var $dataclass : cs.Company var $entity :

    cs.CompanyEntity var $entitySelection : cs.CompanySelection コード補完 候補なし
  39. C_OBJECT($dataclass) C_OBJECT($entity) C_OBJECT($entitySelection) var $dataclass : cs.Company var $entity :

    cs.CompanyEntity var $entitySelection : cs.CompanySelection 候補なし コード補完
  40. C_OBJECT($dataclass) C_OBJECT($entity) C_OBJECT($entitySelection) var $dataclass : cs.Company var $entity :

    cs.CompanyEntity var $entitySelection : cs.CompanySelection 候補なし プロパティ/関数 コード補完
  41. 新しいシンタックス Class constructor($firstname : Text ; $lastname : Text ;

    $birthdate : Date) This.lastName:=$lastname This.firstName:=$firstname This.birthdate:=$birthdate Function setAdress($streetNumber : Text ; $streetName : Text ; $city : Text) This.streetNumber:=$streetNumber This.streetName:=$streetName This.city:=$city
  42. 新しいシンタックス #DECLARE ($listboxName : Text ; $rowNum : Integer) ->

    $result : Object LISTBOX SELECT ROW(*; $listboxName ; $rowNum) $result:=New object("success"; True ; "message" ; "row successfully selected")
  43. ORDA Class API Improve your API with function scope ORDA

    Data Model Classes and REST; part 2
  44. ORDA Class API • 簡単にサービスを公開 • 実装を隠蔽して抽象化レイヤーを提供 • シンプルなREST APIで他のアプリケーションと連携

    Student ID 232 firstname A lastname A englishLevel 216 finalExam A rank 216 schoolID 232 StudentSelection StudentEntity Student /rest/Student/registerStudent /rest/Student(1)/getFirstAhead /rest/Student/setFinalExam
 /$entityset/{entitySetNumber} Class extends DataClass Function registerStudent Class extends Entity Function getFirstAhead Class extends EntitySelection Function setFinalExam 拡張クラス REST API テーブル データクラス
  45. ORDA Class API • データストアオブジェクトにアクセスする • {server}:{port}/rest/$catalog • データクラスにアクセスする •

    {server}:{port}/rest/{dataClassName} • エンティティにアクセスする • {server}:{port}/rest/{dataClassName}(Key) • エンティティクラスで定義済のクラス関数にアクセスする (HTTP REQUEST) • 例: http://127.0.0.1:8044/rest/Students(7)/studyingInSameCity/
  46. クラス関数の動作を指定する • local • クライアントからサーバーへのリクエストは⾏われない • exposed • クライアントからのREST経由でのアクセスを受け⼊れる v18

    R4まではクラス関数は全て公開 →v18 R5からはデフォルトは⾮公開 公開したいクラス関数に明⽰的に exposedを記述する必要あり