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. サウンドチェック⽤に⾳楽を再⽣しています。
    デバイスのオーディオ設定をご確認ください。

    View Slide

  2. View Slide

  3. 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

    View Slide

  4. part 2
    v19 presentation

    View Slide

  5. メールトランスポーター
    Receive emails with POP3 protocol; Copy, move, and delete emails with IMAP

    View Slide

  6. SMTP
    メールトランスポーター
    Receive emails with POP3 protocol; Copy, move, and delete emails with IMAP

    View Slide

  7. POP3
    SMTP
    メールトランスポーター
    Receive emails with POP3 protocol; Copy, move, and delete emails with IMAP

    View Slide

  8. POP3
    SMTP
    メールトランスポーター
    Receive emails with POP3 protocol; Copy, move, and delete emails with IMAP
    IMAP

    View Slide

  9. POP (Post Office Protocol)

    View Slide

  10. POP (Post Office Protocol)
    Eメールを受信するためのインターネット規格のプロトコル

    View Slide

  11. POP (Post Office Protocol)
    Eメールを受信するためのインターネット規格のプロトコル
    メールをローカルにダウンロードできる

    View Slide

  12. POP (Post Office Protocol)
    Eメールを受信するためのインターネット規格のプロトコル
    メールをローカルにダウンロードできる
    メールサーバーからメッセージを削除できる

    View Slide

  13. POP・IMAP・SMTPに共通の注意事項

    View Slide

  14. POP・IMAP・SMTPに共通の注意事項
    各通信プロトコルの仕様に依存

    View Slide

  15. POP・IMAP・SMTPに共通の注意事項
    各通信プロトコルの仕様に依存
    メールサーバーにおける実装にも依存

    View Slide

  16. POP・IMAP・SMTPに共通の注意事項
    各通信プロトコルの仕様に依存
    メールサーバーにおける実装にも依存
    メールサーバーによって動作に違いがある

    View Slide

  17. デモンストレーション

    View Slide

  18. Internet Commands vs POP3 transporter
    スレッドセーフ
    POP3 over TLS
    ログファイル
    新ネットワークレイヤー専⽤

    View Slide

  19. Internet Commands vs POP3 transporter
    スレッドセーフ
    POP3 over TLS
    ログファイル
    新ネットワークレイヤー専⽤

    View Slide

  20. Internet Commands vs POP3 transporter
    スレッドセーフ
    POP3 over TLS
    ログファイル
    新ネットワークレイヤー専⽤

    View Slide

  21. Internet Commands vs POP3 transporter
    スレッドセーフ
    POP3 over TLS
    ログファイル
    ログイン認証 APOP PLAIN
    新ネットワークレイヤー専⽤
    APOP PLAIN LOGIN CRAM-MD5 OAUTH2

    View Slide

  22. 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

    View Slide

  23. 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

    View Slide

  24. 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

    View Slide

  25. Write Pro
    Direct export to PDF! From docx format to 4D Write Pro!

    View Slide

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

    View Slide

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

    View Slide

  28. Write Pro
    Write Pro υΩϡϝϯτ PDF ϑΝΠϧ
    PDF への直接の書き出し

    View Slide

  29. Write Pro
    Write Pro υΩϡϝϯτ PDF ϑΝΠϧ
    • 特定の要素をPDFに出⼒しな
    いオプション
    PDF への直接の書き出し

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  34. Write Pro
    DOCX の読み込み .docx ϑΝΠϧ Write Pro υΩϡϝϯτ

    View Slide

  35. Write Pro
    DOCX の読み込み
    • 再現性の⾼い変換処理
     ・差し込みフィールド
     ・表組み
     ・印刷設定
     ・画像   など
    .docx ϑΝΠϧ Write Pro υΩϡϝϯτ

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  39. デモンストレーション

    View Slide

  40. Compare strings, Position
    String comparison improvements
    よりも⼿軽な⽂字列⽐較
    Match regex

    View Slide

  41. 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

    View Slide

  42. 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

    View Slide

  43. Compare strings, Position
    モード
    sk strict
    ⽇本語コレーションʢICUʣ
    オプション
    sk char codes
    ⽂字コードを評価
    (照合順序)

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  48. 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
    ⽇本語コレーション・清⾳と濁⾳を区別する・他は区別しない
    (照合順序)

    View Slide

  49. Compare strings, Position
    テキスト検索⽤の⽂字列⽐較を使⽤する ON
    OFF
    いすず いすゞ
    らーめん らあめん
    *データベース設定>データ⾔語>⽇本語
    ҟͳΔ
    ҟͳΔ
    ಉ͡
    ಉ͡

    View Slide

  50. OFF
    ҟͳΔ
    ҟͳΔ
    Compare strings, Position
    テキスト検索⽤の⽂字列⽐較を使⽤する ON
    OFF
    いすず いすゞ
    らーめん らあめん
    ⼤⽂字と⼩⽂字を区別しない ON
    さつき さっき
    4D 4d
    *データベース設定>データ⾔語>⽇本語
    ҟͳΔ
    ҟͳΔ
    ಉ͡
    ಉ͡
    ಉ͡
    ಉ͡

    View Slide

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

    View Slide

  52. データエクスプローラー
    Set up the Web Administration component; Your data live in a web interface

    View Slide

  53. データエクスプローラー

    View Slide

  54. データエクスプローラー
    Internal Components Internal User Components
    4D Labels
    4D Mobile App
    4D Report
    development
    pk_wizard
    preferences
    runtime

    View Slide

  55. データエクスプローラー
    Internal Components Internal User Components
    4D Labels
    4D Mobile App
    4D Report
    development
    pk_wizard
    preferences
    runtime
    WebAdmin
    new!

    View Slide

  56. データエクスプローラー
    WebAdmin
    データエクスプローラー
    ?
    ?
    ?

    View Slide

  57. データエクスプローラー
    WebAdmin
    データエクスプローラー
    ?
    ?
    ?
    --headless
    ヘッドレスモードに対応
    Web App. ライセンス不要
    Unlimited Desktop ⾮対応
    preview

    View Slide

  58. データエクスプローラー
    推奨解像度 1920 × 1080

    View Slide

  59. データエクスプローラー
    テーブル選択

    View Slide

  60. データエクスプローラー
    フィールド選択

    View Slide

  61. データエクスプローラー
    テーマ切り替え

    View Slide

  62. データエクスプローラー
    クエリ
    コードで
    かんたん

    View Slide

  63. データエクスプローラー

    View Slide

  64. データエクスプローラー

    View Slide

  65. データエクスプローラー

    View Slide

  66. データエクスプローラー

    View Slide

  67. データエクスプローラー

    View Slide

  68. データエクスプローラー
    ⾃動スタート

    View Slide

  69. データエクスプローラー
    ⾃動スタート
    アクセスキー

    View Slide

  70. データエクスプローラー

    View Slide

  71. データエクスプローラー
    ⾃動スタート
    HTTPS証明書
    アクセスキー

    View Slide

  72. データエクスプローラー

    View Slide

  73. データエクスプローラー

    View Slide

  74. データエクスプローラー
    /4D/WebAdmin v19.4DSettings
    SHA256

    View Slide

  75. データエクスプローラー
    --webadmin-settings-file
    --webadmin-access-key
    .4DSettingsファイルのパス
    --webadmin-auto-start
    --webadmin-store-settings
    アクセスキー
    ⾃動スタート
    CLI設定を.4DSettingsファイルに保存する

    View Slide

  76. データエクスプローラー

    View Slide

  77. データエクスプローラー

    View Slide

  78. データエクスプローラー

    View Slide

  79. データエクスプローラー

    View Slide

  80. データエクスプローラー

    View Slide

  81. データエクスプローラー

    View Slide

  82. モバイル

    View Slide

  83. 4D for iOS
    エクスポート ビルド/インストール
    全⾃動
    Xcode

    View Slide

  84. 4D for iOS
    ORDA

    View Slide

  85. 4D for iOS

    View Slide

  86. 4D for iOS
    プッシュ通知

    View Slide

  87. 4D for iOS
    プッシュ通知
    ディープリンク ಛఆͷը໘΍Ϩίʔυʹδϟϯϓ͢ΔϋΠύʔϦϯΫ
    Keeper://mobileapp/show?dataClass=Projects&entity.primaryKey=47

    View Slide

  88. 4D for iOS
    プッシュ通知
    ディープリンク ಛఆͷը໘΍Ϩίʔυʹδϟϯϓ͢ΔϋΠύʔϦϯΫ
    Keeper://mobileapp/show?dataClass=Projects&entity.primaryKey=47
    QRコードでURLを読み取り

    View Slide

  89. 4D for iOS
    プッシュ通知
    ディープリンク ಛఆͷը໘΍Ϩίʔυʹδϟϯϓ͢ΔϋΠύʔϦϯΫ
    Keeper://mobileapp/show?dataClass=Projects&entity.primaryKey=47
    QRコードでURLを読み取り
    指先でなぞって図形や⽂字などを⼊⼒

    View Slide

  90. 4D for iOS
    プッシュ通知
    ディープリンク ಛఆͷը໘΍Ϩίʔυʹδϟϯϓ͢ΔϋΠύʔϦϯΫ
    Keeper://mobileapp/show?dataClass=Projects&entity.primaryKey=47
    QRコードでURLを読み取り
    指先でなぞって図形や⽂字などを⼊⼒
    差分とオフラインアクションによる同期(これまで:全件ダウンロードとオンラインアクション)

    View Slide

  91. 4D for iOS
    プッシュ通知
    ディープリンク ಛఆͷը໘΍Ϩίʔυʹδϟϯϓ͢ΔϋΠύʔϦϯΫ
    Keeper://mobileapp/show?dataClass=Projects&entity.primaryKey=47
    QRコードでURLを読み取り
    指先でなぞって図形や⽂字などを⼊⼒
    N対Nリレーション
    差分とオフラインアクションによる同期(これまで:全件ダウンロードとオンラインアクション)

    View Slide

  92. エクスポート ビルド/インストール
    全⾃動
    Xcode
    4D for iOS
    Mobile
    4D for iOS

    View Slide

  93. 4D for iOS
    Mobile
    エクスポート ビルド/インストール
    全⾃動
    Xcode
    Android Studio
    半⾃動
    ビルド/インストール

    View Slide

  94. 4D Server
    Who did what: Store user aliases in the journal; Server code development in project applications

    View Slide

  95. カレントユーザー

    View Slide

  96. カレントユーザー
    ユーザー名: Current user

    View Slide

  97. カレントユーザー
    ユーザー名: Current user

    View Slide

  98. カレントユーザー
    ユーザー名: Current user

    View Slide

  99. カレントユーザー
    ユーザー名
    ユーザー名
    ユーザー名: Current user

    View Slide

  100. カレントユーザー
    アクセス権
    アクセス権
    ユーザー名: Current user
    ×
    アクセス権

    View Slide

  101. カレントユーザー
    アクセス権: Current user

    View Slide

  102. カレントユーザー
    アクセス権
    アクセス権: Current user

    View Slide

  103. カレントユーザー
    MSC > ログ解析

    View Slide

  104. カレントユーザー
    MSC > ログ解析
    佐藤
    ⽥中
    ユーザーが判別できない

    View Slide

  105. ユーザーエイリアス

    View Slide

  106. ユーザーエイリアス

    View Slide

  107. ユーザーエイリアス
    アクセス権
    アクセス権: Current user (4D User account)

    View Slide

  108. ユーザーエイリアス

    View Slide

  109. ユーザーエイリアス
    ユーザー名
    ユーザー名: Current user (4D User alias)

    View Slide

  110. ユーザーエイリアス
    ユーザー名
    アクセス権 ユーザー名: Current user (4D User alias)
    アクセス権: Current user (4D User account)

    View Slide

  111. ユーザーエイリアス
    MSC > ログ解析

    View Slide

  112. ユーザーエイリアス
    MSC > ログ解析
    ユーザーを特定できる

    View Slide

  113. カスタムログイン画⾯

    View Slide

  114. カスタムログイン画⾯
    アカウント名 ユーザー名
    デフォルトユーザー

    View Slide

  115. カスタムログイン画⾯
    アカウント名 ユーザー名
    アカウント名
    アクセス権
    Current user
    (4D User account)
    デフォルトユーザー

    View Slide

  116. カスタムログイン画⾯
    アカウント名 ユーザー名
    エイリアス
    表⽰・ログ記録
    アカウント名
    アクセス権
    Current user
    (4D User account)
    Current user
    (4D User alias)
    デフォルトユーザー

    View Slide

  117. ジャーナルとエイリアス
    {
    "task_id":5,
    "user_name":"miyako",
    "user4d_id":5,
    "user4d_alias":"ాத",
    "host_name":"MacBook Pro",
    "task_name":"P_13",
    "is_remote_context":true,
    "client_uid":"B814526184A34CF289EB76015FFDEBE5",
    "client_version":-268363520
    }

    View Slide

  118. ジャーナルとエイリアス
    {
    "task_id":5,
    "user_name":"miyako",
    "user4d_id":5,
    ,
    "host_name":"MacBook Pro",
    "task_name":"P_13",
    "is_remote_context":true,
    "client_uid":"B814526184A34CF289EB76015FFDEBE5",
    "client_version":-268363520
    }
    "user4d_alias":"ాத"

    View Slide

  119. クライアント/サーバー開発
    プロジェクトモード
    4DProject
    バイナリモード
    4DB

    View Slide

  120. クライアント/サーバー開発
    プロジェクトモード
    4DProject
    バイナリモード
    4DB
    サーバー
    クライアント
    デザインモード
    ライブ開発できる

    View Slide

  121. クライアント/サーバー開発
    プロジェクトモード
    4DProject
    バイナリモード
    4DB
    サーバー
    クライアント
    クライアント
    サーバー
    σβΠϯϞʔυ
    ϥΠϒ։ൃͰ͖ͳ͍
    デザインモード
    ライブ開発できる

    View Slide

  122. クライアント/サーバー開発
    バイナリモード
    Plugins
    Components
    Resources
    4DB REA
    4DB
    Caches

    View Slide

  123. クライアント/サーバー開発
    バイナリモード
    プロジェクトモード
    4DZ
    4DProject
    Plugins
    Components
    Resources
    Plugins
    Components
    Resources
    4DB REA
    4DB
    4DZ
    Caches
    Caches

    View Slide

  124. クライアント/サーバー開発
    リポジトリ
    プロジェクトモード
    4DZ
    Plugins
    Components
    Resources
    Caches
    4DProject
    LAUNCH EXTERNAL PROCESS
    git pull
    RELOAD PROJECT
    4DZ
    起動時のスナップショット

    View Slide

  125. ローカルクライアント
    4DProject
    ローカル環境
    projectToken.json
    {
    "token": "…UUID…",
    "path": "…databaseName.4DProject"
    }
    /AppData/Roaming/4D Server/databaseName/
    /Application Support/4D Server/databaseName/
    or
    token

    View Slide

  126. ローカルクライアント
    4DProject
    ローカル環境
    ストラクチャ
    xml
    >
    ユーザー/グループ
    json
    {...}
    設定
    xml
    >
    ΫϥΠΞϯταʔόʔ௨৴

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  133. ローカルクライアント
    4DProject
    ローカル環境
    4DZ

    View Slide

  134. ローカルクライアント
    4DProject
    ローカル環境
    4DZ
    4DZ
    Plugins
    Components
    Resources
    4DZ
    Caches
    4DProject
    古いバージョン
    (圧縮中)

    View Slide

  135. リモートデバッガ
    サーバーのデバッガをクライアント側で

    View Slide

  136. リモートデバッガ
    サーバーのデバッガをクライアント側で
    トレース ブレークポイント エラー キャッチ

    View Slide

  137. リモートデバッガ
    サーバーのデバッガをクライアント側で
    トレース ブレークポイント エラー キャッチ
    バイナリモード 4DB 4DC
    プロジェクトモード 4DProject 4DZ

    View Slide

  138. リモートデバッガ
    メリット

    View Slide

  139. リモートデバッガ
    メリット
    ヘッドレスモードのデバッグ

    View Slide

  140. リモートデバッガ
    メリット
    ヘッドレスモードのデバッグ
    ディスプレイ不要

    View Slide

  141. リモートデバッガ
    メリット
    ヘッドレスモードのデバッグ
    ディスプレイ不要
    リモートデスクトップ不要

    View Slide

  142. リモートデバッガ
    メリット
    ヘッドレスモードのデバッグ
    ディスプレイ不要
    リモートデスクトップ不要
    Windows Server
    サービス起動

    View Slide

  143. リモートデバッガ

    View Slide

  144. リモートデバッガ

    View Slide

  145. リモートデバッガ

    View Slide

  146. リモートデバッガ

    View Slide

  147. リモートデバッガ
    デバッガ(サーバー側)

    View Slide

  148. リモートデバッガ
    デバッガ(クライアント側)
    ダークモード #272F33 ライトモード #EBF7FF
    アイコン

    View Slide

  149. リモートデバッガ
    デバッガ(クライアント側)
    デザインモードのアクセス権が必要
    On Server Startupはデバッグできない
    ヘッドレスモードのクライアントでは使⽤できない

    View Slide

  150. リモートデバッガ
    テクノロジー
    Debug Adapter Protocol (Microsoft)
    https://microsoft.github.io/debug-adapter-protocol/
    DAP
    メッセージ
    データ
    (独⾃⽅式でシリアライズ)
    ネットワークレイヤー
    同期/⾮同期通信

    View Slide

  151. リモートデバッガ
    リモートデバッガはデバッグサーバーを経由する
    リモートデバッグサーバー
    サーバーのデバッガが有効化されていなければ
    ポート番号: 19815

    View Slide

  152. リモートデバッガ
    リモートデバッガはデバッグサーバーを経由する
    リモートデバッグサーバー
    サーバーのデバッガが有効化されていなければ
    ポート番号: 19815
    接続拒否

    View Slide

  153. リモートデバッガ
    リモートデバッガはデバッグサーバーを経由する
    リモートデバッグサーバー
    サーバーのデバッガが有効化されていなければ
    ポート番号: 19815
    接続拒否
    Get application info().RemoteDebuggerSessionID

    View Slide

  154. Easy looping with a new 4D tag
    オ・ル・ダ
    part 2

    View Slide

  155. エンティティセレクション、コレクション、オブジェクト
    に対して使⽤可能
    C_OBJECT($entity)
    For each ($entity; ds.Students.all())
    $entity.lastname:=Uppercase($entity.lastname)
    $entity.save()
    End for each
    For each…End for eachループ

    View Slide

  156. 4DEACH…4DENDEACH ϧʔϓ

    View Slide

  157. 4DEACH…4DENDEACH ϧʔϓ

    View Slide

  158. 4DEACH…4DENDEACH ϧʔϓ
    For eachとよく似た構⽂

    View Slide

  159. 4DEACH…4DENDEACH ϧʔϓ
    For eachとよく似た構⽂
    PROCESS 4D TAGS
    WEB SEND FILE
    などで使⽤可能

    View Slide

  160. 実際に表⽰される⼀覧

    View Slide

  161. デモンストレーション

    View Slide

  162. オブジェクト指向プログラミング
    New declaration syntax for an intuitive autocompletion;
    part 2
    Improve your API with function scope

    View Slide

  163. 新しいシンタックス
    従来のシンタックス
    C_TEXT($text1;$text2)
    C_LONGINT($num)
    C_PICTURE($pict)

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  167. 新しいシンタックス
    新しいシンタックス
    var $text1; $text2 : Text
    var $num : Integer
    var $pict : Picture
    クラス
    従来のシンタックス
    C_TEXT($text1;$text2)
    C_LONGINT($num)
    C_PICTURE($pict)
    宣⾔コマンド
    両シンタックスの併⽤ OK
    ローカル/プロセス変数 OK
    インタープロセス変数 NG
    配列 NG

    View Slide

  168. 新しいシンタックス
    ⼿本にしたのは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͋

    View Slide

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

    View Slide

  170. コード補完

    View Slide

  171. C_OBJECT($person)
    $person:=cs.Person.new()
    コード補完

    View Slide

  172. C_OBJECT($person)
    $person:=cs.Person.new()
    コード補完

    View Slide

  173. C_OBJECT($person)
    $person:=cs.Person.new()
    候補なし
    コード補完

    View Slide

  174. var $person : cs.Person
    $person:=cs.Person.new()
    C_OBJECT($person)
    $person:=cs.Person.new()
    候補なし
    コード補完

    View Slide

  175. var $person : cs.Person
    $person:=cs.Person.new()
    C_OBJECT($person)
    $person:=cs.Person.new()
    候補なし
    コード補完

    View Slide

  176. var $person : cs.Person
    $person:=cs.Person.new()
    C_OBJECT($person)
    $person:=cs.Person.new()
    候補なし
    プロパティ/関数
    コード補完

    View Slide

  177. コード補完

    View Slide

  178. C_OBJECT($folder)
    $folder:=Folder(fk logs folder)
    コード補完

    View Slide

  179. C_OBJECT($folder)
    $folder:=Folder(fk logs folder)
    コード補完

    View Slide

  180. C_OBJECT($folder)
    $folder:=Folder(fk logs folder)
    候補なし
    コード補完

    View Slide

  181. var $folder : 4D.Folder
    $folder:=Folder(fk logs folder)
    C_OBJECT($folder)
    $folder:=Folder(fk logs folder)
    候補なし
    コード補完

    View Slide

  182. var $folder : 4D.Folder
    $folder:=Folder(fk logs folder)
    C_OBJECT($folder)
    $folder:=Folder(fk logs folder)
    候補なし
    コード補完

    View Slide

  183. var $folder : 4D.Folder
    $folder:=Folder(fk logs folder)
    C_OBJECT($folder)
    $folder:=Folder(fk logs folder)
    候補なし
    プロパティ/関数
    コード補完

    View Slide

  184. コード補完

    View Slide

  185. C_OBJECT($dataclass)
    C_OBJECT($entity)
    C_OBJECT($entitySelection)
    コード補完

    View Slide

  186. C_OBJECT($dataclass)
    C_OBJECT($entity)
    C_OBJECT($entitySelection)
    コード補完

    View Slide

  187. C_OBJECT($dataclass)
    C_OBJECT($entity)
    C_OBJECT($entitySelection)
    コード補完
    候補なし

    View Slide

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

    View Slide

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

    View Slide

  190. C_OBJECT($dataclass)
    C_OBJECT($entity)
    C_OBJECT($entitySelection)
    var $dataclass : cs.Company
    var $entity : cs.CompanyEntity
    var $entitySelection : cs.CompanySelection
    候補なし
    プロパティ/関数
    コード補完

    View Slide

  191. 新しいシンタックス
    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

    View Slide

  192. 新しいシンタックス
    Function getFullname -> $fullname : Text
    $fullname:=This.firstname+" "+Uppercase(This.lastname)
    Function sendMessage($text : Text) -> $message : Text
    $message:="@"+This.firstname+": "+$text

    View Slide

  193. 新しいシンタックス
    #DECLARE ($listboxName : Text ; $rowNum : Integer) -> $result : Object
    LISTBOX SELECT ROW(*; $listboxName ; $rowNum)
    $result:=New object("success"; True ; "message" ; "row successfully selected")

    View Slide

  194. View Slide

  195. View Slide

  196. デモンストレーション

    View Slide

  197. ORDA Class API
    Improve your API with function scope
    ORDA Data Model Classes and REST;
    part 2

    View Slide

  198. RESTサーバー
    • v18から導⼊されていた機能
    • C/S環境において、今まではクライアントは必ず1つのサーバーにしか接続でき
    なかった。リモートデータストアを使⽤すれば、C/Sでありながら、他のREST
    サーバーとして公開されているデータストアにアクセスすることが可能に!
    • C/Sでの4Dの使い⽅の可能性が⾶躍的に向上
    • オフラインで4Dを使⽤しながら、必要な時だけサーバーにアクセス
    • データを分散して保管/運⽤する
    など。。。

    View Slide

  199. 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
    テーブル データクラス

    View Slide

  200. 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/

    View Slide

  201. クラス関数の動作を指定する
    • local
    • クライアントからサーバーへのリクエストは⾏われない
    • exposed
    • クライアントからのREST経由でのアクセスを受け⼊れる

    View Slide

  202. クラス関数の動作を指定する
    • local
    • クライアントからサーバーへのリクエストは⾏われない
    • exposed
    • クライアントからのREST経由でのアクセスを受け⼊れる
    v18 R4まではクラス関数は全て公開
    →v18 R5からはデフォルトは⾮公開
    公開したいクラス関数に明⽰的に
    exposedを記述する必要あり

    View Slide

  203. デモンストレーション

    View Slide

  204. View Slide