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

4D DevCon 2024

4D Japan
January 25, 2024

4D DevCon 2024

4D Japan

January 25, 2024
Tweet

More Decks by 4D Japan

Other Decks in Programming

Transcript

  1. グループ収益: €2140万=$2300万=¥34.5ԯ ಺༰ผऩӹ ૯ऩӹͷ72%͸年次経常収益 (ARR) 地域別収益 総収益の75%はフランス以外 ⽶国 31% フランス

    25% ドイツ 14% 豪州 7% ⽇本 5% 直販 18% ライセンス 開発 & 配付 11% プロフェッショナル サービス 
 18% OEM 38% ܦৗऩӹ メンテナンス 開発 & 配付 28% 経常収益 パートナー 5% 経常収益 2022೥
  2. 医療分野はグループ収益の22% 2022೥ 業種別アプリケーション稼働実績 医療 22% プロフェッショナル サービス 13% 教育 11%

    政府機関/⾏政 8% 通信 4% メディア/ エンターテインメント 4% 販売 5% 製造 6% ⾦融 6% その他 6% 出版 7% 保険/銀⾏ 8%
  3. Teshima Tomonobu ⼿島 知信 Miyako Keisuke 宮古 啓介 Kebukawa Tomohide

    癸⽣川 知秀 テクニカルプレゼンテーション
  4. 初代ネットワークレイヤー ❖v2003以降 ❖TCP Internet Packet eXchange Sequenced Packet eXchange AppleTalk

    Data Stream Protocol ネットワークコンポーネント 19813 Transmission Control Protocol Transmission Control Protocol
  5. 旧式ネットワークレイヤー ❖v11以降 ❖TCP アイドル時間タイムアウト Idle connections timeout 19813 19814 接続タイムアウト(クライアント側) 経過毎にping

    4D Remote mode timeout ⅓ ΞϓϦέʔγϣϯϓϩηε ΞϓϦέʔγϣϯϓϩηε ΫϥΠΞϯτ؅ཧϓϩηε ಺෦λΠϚʔϓϩηε 接続タイムアウト(サーバー側) 4D Server timeout
  6. 新ネットワークレイヤー ❖v15以降 ❖TCP アイドル時間タイムアウト Idle connections timeout 19813 19814 ServerNet

    サーバー側プロセススタックサイズ Server base process stack size 診断ログ Diagnostic log recording 診断ログレベル Diagnostic log level 接続タイムアウト(サーバー側) 4D Server timeout
  7. テクノロジー概観 C/S 19813 TLS ҉߸ɾ෮߸ TCP ౸ୡอূɾྲྀྔ੍ޚɾॱং੍ޚ DB4D 19814 TLS

    ҉߸ɾ෮߸ TCP ౸ୡอূɾྲྀྔ੍ޚɾॱং੍ޚ C/S and DB4D 19813 QUIC ౸ୡอূɾྲྀྔ੍ޚɾॱং੍ޚ ҉߸ɾ෮߸ ଟॏԽ UDP ௨৴ 新ネットワークレイヤー ServerNet QUICレイヤー
  8. ネットワークレイヤーの切り替え <?xml version="1.0" encoding="UTF-8"?> <preferences> <com.4d> <server> <network> <options use_legacy_network_layer="false"

    use_quic_network_layer="true" /> ❖QUICを有効化できるのはプロジェクトモードのみ ❖デフォルトはServerNet
  9. ロードマップ BETA 互換性オプション 使⽤できない データベース/ユーザー設定 スリープ検出/復帰 IPv6アドレス v20 R2 ブロードキャスト

    リンクファイル クライアントࣗಈΞοϓάϨʔυ v20 R3 プロトコル切り替え 標準ネットワークレイヤー 段階的にサポート v21
  10. リアルタイム双⽅向通信 モノとユーザーをつなぐ チャット ゲーム モノのインターネット MQTT over WebSocket WebSocket Message

    Queuing Telemetry Transport Transmission Control Protocol できる HyperText Transfer Protocol できない
  11. リアルタイム双⽅向通信 v20 R2 v20 4D.WebSocket 4D.WebSocketServer 4D.WebSocketConnection αʔόʔ઀ଓΛॲཧ͢ΔͨΊ ϝοηʔδΛॲཧ͢ΔͨΊ ઀ଓΛҡ࣋͢ΔͨΊͷϫʔΧʔ

    WebSocket サーバー WebSocket クライアント ビルトインクラス ビルトインクラス ユーザークラス ϝοηʔδΛॲཧ͢ΔͨΊ ユーザークラス ઀ଓΛҡ࣋͢ΔͨΊͷϫʔΧʔ·ͨ͸ϑΥʔϜ
  12. HTTPクライアント HTTP Get API レスポンス リクエスト var $response : Blob

    が返される Blob application/octet-stream Blob text/* Text image/* Picture Object application/json が返される Blob が返される Blob が返される Blob
  13. HTTPクライアント HTTP Get API リクエスト レスポンス var $response : Text

    が返される Text が返される Text エラー 引数のタイプが⼀致していません エラー 引数のタイプが⼀致していません Blob application/octet-stream Text Picture Object text/* image/* application/json
  14. HTTPクライアント HTTP Get API リクエスト レスポンス エラー 引数のタイプが⼀致していません var $response

    : Picture エラー 引数のタイプが⼀致していません エラー 引数のタイプが⼀致していません が返される Picture Blob application/octet-stream Text Picture Object text/* image/* application/json
  15. HTTPクライアント HTTP Get API リクエスト レスポンス が返される 4D.Blob var $response

    : Object が返される Object が返される Null が返される Null v20 Blob application/octet-stream Text Picture Object text/* image/* application/json
  16. HTTPクライアント HTTP Request HTTP DELETE method HTTP GET method HTTP

    HEAD method HTTP OPTIONS method HTTP POST method HTTP PUT method HTTP TRACE method "PATCH" "CONNECT" 頻繁に使⽤するメソッド その他のメソッド 拡張プロトコル "PROPFIND" "PROPPATCH" "MKCOL" "COPY" "MOVE" …etc. API レスポンス リクエスト
  17. HTTPクライアント HTTP Request API リクエスト レスポンス HTTP SET OPTION HTTP

    timeout 初期値:120秒 レスポンスのタイムアウト サーバーとの接続が確⽴された後  HTTPレスポンスが返されるまで 待機する時間の上限 (接続のタイムアウトではない) サーバーが動作していない →ネットワークエラー サーバーの動作が重い →HTTPタイムアウトまで待つ 同期処理 !
  18. オプション クラス options.serverAuthentication options.proxyAuthentication options.certificatesFolder options.minTLSVersion options.timeout options.decodeData options.returnResponseBody options.protocol

    備考 HTTP AUTHENTICATEから遮断 HTTP AUTHENTICATEから遮断 HTTP SET CERTIFICATES FOLDERから遮断 SET DATABASE PARAMETERから遮断 HTTP SET OPTIONから遮断 デフォルト=False デフォルト=True HTTP/3 (QUIC) に対応するため(予約) 4D.HTTPRequest
  19. HTTPクライアントログ HTTP SET OPTION HTTP client log HTTP disable log

    HTTP enable log with all body parts HTTP enable log with request body HTTP enable log with response body HTTP enable log without body 4DHTTPClientLog_XX.txt ※サイズが10MBを超過するたびに新しいファイルが作成される v20 ※
  20. サーバーTLS証明書の検証 var $response : Text $status:=HTTP Get("https://www.4d.com/"; $response) サーバーのTLS証明書を検証しない の環境変数NODE_TLS_REJECT_UNAUTHORIZEDに該当

    4D.HTTPRequest サーバーのTLS証明書を検証する(デフォルト) $options.validateTLSCertificate:=False 4D.HTTPRequest.new("https://www.4d.com/"; $options) ※検証しない場合
  21. キープアライブ var $response : Text $status:=HTTP Get("https://www.4d.com/"; $response; *) Connection:

    keep-alive 指定した場合 Connection: close デフォルト 4D.HTTPRequest 4D.HTTPAgent v20 Rx HTTPクライアントをインスタンス化する際に HTTPエージェントオブジェクトを渡すことにより keep-aliveを管理する新しいシンタックス
  22. standard error stream 0% U archive.7z \b\b\b\b\b\b\b\b\b\b 1% U archive.7z

    \b\b\b\b\b\b\b\b\b\b 2% U archive.7z \b\b\b\b\b\b\b\b\b\b 3% U archive.7z \b\b\b\b\b\b\b\b\b\b 4% U archive.7z \b\b\b\b\b\b\b\b\b\b 5% U archive.7z \b\b\b\b\b\b\b\b\b\b 外部プロセスコールの進捗表⽰
  23. Go プログラミング⾔語 https://golang.org/ • モダン: 静的型付け・⾼級コンパイル⾔語 • クロスプラットフォーム: Windows と

    macOS の両⽅をサポート • ポータブル: 静的にリンクされたバイナリ実⾏ファイル Mac Windows ビルド ©Renée French ツールチェーン ソースコード .go
  24. Go プログラミング⾔語 https://golang.org/ • ⼈気: 活発なデベロッパーコミュティ • 豊富なチュートリアル・ライブラリ・例題 • パフォーマンス:

    ⾼速・効率的なメモリ使⽤ • 定型的: ⼀貫した⾔語設計・AI との相性が良い write me code in go that converts json to apache paquet To convert JSON data to Apache Parquet format in Go, you can use the parquet-go library. Unfortunately, as of my knowledge cutoff in September 2021, there is no official Go implementation of Apache Parquet. However, there are third- party libraries like parquet-go available for this purpose. To get started, you'll need to...
  25. PHP 4D ブラウザ サーバー index.php リクエスト レスポンス WebFolder cgi-bin 環境変数・標準⼊⼒

    標準出⼒ SET CGI EXECUTABLE LAUNCH EXTERNAL PROCESS 標準出⼒ 環境変数・標準⼊⼒ (2004)
  26. 8.2.4 x86_64 7.3.1 x86_64 5.4.11 i386 v20 v17 R5 v19

    v12 v17 最⼩構成でも結構なサイズを占有する ⾃分でモジュールを構成したほうが合理的 PHP Execute
  27. 内部インタープリター v20 v20 R3 27.8 MB 17.1 MB php-fcgi-4d libcrypto-1_1-x64.dll

    libsasl.dll libssl-1_1-x64.dll php7ts.dll php-fcgi-4d.exe 内部PHPインタープリター廃⽌
  28. 内部インタープリター v20 R3 内部PHPインタープリター廃⽌ $success:=PHP Execute(""; "phpversion"; $version) Error code:

    3 (PHP_) PHPに接続できません。外部PHPを適切に使⽤しているか、 またPHPポートが適切に設定されているかを確認してください。 Error code: 500 (FCGI) ""のコンテキストでFastCGIクライアントにエラーが発⽣しました。
  29. 廃⽌予定 v20 PHP Execute 内部インタープリター 外部インタープリター v20 R3 PHP Execute

    外部インタープリター v21 PHP Execute 外部インタープリター あまり使うべきではない
  30. 外部インタープリターの⼊⼿ https://windows.php.net/index.php PHP: Hypertext Preprocessor ※スレッドセーフ版=VS16 x64 Thread Safe https://github.com/miyako/4d-topic-php

    配付⽤にソースコードからコンパイルしたもの IntelおよびApple Silicon 実⾏ファイルをダウンロードする
  31. 通常版 通常版 LAUNCH EXTERNAL PROCESS 4D.SystemWorker php.exe コマンドライン引数 意味 -f

    ファイルパス -r スクリプト -c php.iniのパス -a インタラクティブモード
  32. コマンドライン引数 意味 -c php.iniのパス -b バインドパス FastCGI版 php-cgi.exe PHP Execute

    FastCGI版 あまり使うべきではない これまでのコードが動作する
  33. 通常版 通常版 4D.SystemWorker php.exe コマンドライン引数 意味 -f ファイルパス -r スクリプト

    -c php.iniのパス -a インタラクティブモード 対話モードに対応
  34. ライブラリアップデート 1.1.1k 18.5 18 R6 19.0 1.1.1s 19 R7 1.1.1m

    19 R5 1.1.1l 19 R3 19.1 18.5 1.0.2n 17.0 1.1.1b 17 R5 1.1.1d 18.0 1.1.1h 18.4 3.1.1
  35. ライブラリアップデート 5993 4692.99 19 R5 4606 19 R4 4324 19.0

    3282 17.0 3626.121 17 R5 18 R2 18 R7 4240 18 R4
  36. オブジェクトリテラル v20 $object:=New object(\ "a"; "foo";\ "b"; 42+26;\ "c"; New

    object;\ "d": New collection("coucou"; "rien")) $object:={a : "foo"; b : 42+26; c : {}; d : ["coucou"; "rien"]} プロパティ#⽂字列 すっきりしたコード デザインモード検索
  37. 制御フロー ❖1回だけループを⾶ばす v20 For ($i; 1; $count; 3) If ($done)

    break End if End for For ($i; 1; $count) If ($i=1) continue End if //... End for ❖途中でループを抜ける For ($i; 1; $count; 3) If ($done) $i:=MAXLONG-3 End if End for For ($i; 1; $count) If ($i#1) //... End if End for
  38. 制御フロー v20 ❖関数の中断 Case of : (Value type($php)=Is text) :

    (Value type($php)=Is object) \ && (OB Instance of($php; 4D.File)) \ && ($php.exists) Else return End case Function run($php : Variant)->$this : cs.PHP 無効なパラメーターなので制御を返す
  39. 制御フロー v20 Function clear() Form.items:=New collection return Form Function canDelete($flag

    : Boolean) OBJECT SET ENABLED(*; "Delete"; $flag) return Form Function canOpen($flag : Boolean) OBJECT SET ENABLED(*; "Open"; $flag) return Form Function onLoad() Form.clear().canDelete(False).canOpen(False) ❖関数の連鎖 Form.clear() Form.canDelete(False) Form.canOpen(False) =
  40. C_LONGINT($intValue) C_TEXT($textValue) C_BLOB($binaryValue) C_OBJECT($entity) C_OBJECT($entitySelection) C_OBJECT($smtpTransporter) C_OBJECT($stdOut; $stdErr) オブジェクトはどれも⼀緒の扱い シンタックスチェック

    コード補完 セッション中に確定したすべてのプロパティ/メソッドが候補 すべてのオブジェクト/クラス/インスタンスは同格 変数の宣⾔(コンパイラー指⽰⼦)
  41. 変数の宣⾔ var $intValue : Integer var $textValue : Text var

    $binaryValue : Blob var $entity : 4D.Entity var $entitySelection : 4D.EntitySelection var $smtpTransporter : 4D.SMTPTransporter var $stdOut; $stdErr : 4D.Blob v19 クラスを区別する シンタックスチェック コード補完 クラスのプロパティ/メンバー関数を表⽰ クラスのプロトタイプをチェック v19 v20
  42. クラスとは プロパティ オブジェクトが持っている値 読み書きできる getFullName() getAge() firstName lastName birthDate プロパティ

    関数 メンバー関数 オブジェクトが持っているコマンド 実⾏できる Person class ❖オブジェクトが持っているプロパティやメンバー関数を定めた仕様のこと
  43. データクラスのプロトタイプ 基底クラス 派⽣クラス cs.CustomerEntity 4D.Entity cs.Customer cs.CustomerSelection 4D.EntitySelection 4D.DataClass 4D.Class

    基底クラス 派⽣クラス 基底クラス 派⽣クラス 基底クラス 派⽣クラス 基 底 ク ラ ス 派 ⽣ ク ラ ス 基 底 ク ラ ス 派 ⽣ ク ラ ス
  44. ポイント ❖⽣成されるコンパイルコードはどちらも同じ ❖シンタックスチェック・コード補完・ヘルプTipsの精度が向上する ❖コードの可読性が向上する var $customers : cs.CustomerSelection var $customer

    : cs.CustomerEntity For each ($customer; $customers) //CustomerΤϯςΟςΟʹಛ༗ͷॲཧ End for each var $entities : 4D.EntitySelection var $entity : 4D.Entity For each ($entity; $entities) //ΤϯςΟςΟશൠʹڞ௨ͷॲཧ End for each
  45. var $intValue : Integer var $realValue : Real var $textValue

    : Text var $boolValue : Boolean var $timeValue : Time var $dateValue : Date var $objectValue : Object var $collectionValue : Collection $intValue:=10 $realValue:=3.14 $textValue="Hello world" $boolValue:=True $timeValue:=Current Time $dateValue:=Current Date $objectValue:=New object $collectionValue:=New Collection 変数の宣⾔と初期化 宣⾔とは別に初期化が必要
  46. var $intValue : Integer:=10 var $realValue : Real:=3.14 var $textValue

    : Text:="Hello world" var $boolValue : Boolean:=True var $timeValue : Time:=Current Time var $dateValue : Date:=Current Date var $objectValue : Object:=New object var $collectionValue : Collection:=New Collection 変数の宣⾔と初期化 v20 R3 var $intValue : Integer var $realValue : Real var $textValue : Text var $boolValue : Boolean var $timeValue : Time var $dateValue : Date var $objectValue : Object var $collectionValue : Collection
  47. 変数の宣⾔と初期化 var $intValue : Integer:=10 var $realValue:=3.14 var $textValue:="Hello world"

    var $boolValue:=True var $timeValue:=Current Time var $dateValue:=Current Date var $objectValue:={foo:"bar"} var $collectionValue:=["mon"; "tue"; "wed"; "thu"; "fri"] v20 R3 コードがシンプル
  48. パラメーターの宣⾔ C_OBJECT(createInvoice; $1) C_OBJECT(createInvoice; $2) C_OBJECT(createInvoice; $0) コンパイルモード Compiler_Methods C_OBJECT($1;

    $2; $0) インタープリターモード createInvoice コンパイル前に型宣⾔メソッドを⽣成する必要がある オブジェクト型のクラスを宣⾔できない
  49. パラメーターの宣⾔ #DECLARE($customer : Object; $products : Object)->$invoice : Object $1

    $2 $0 順番引数を名前で参照できる(名前付き引数) v19
  50. パラメーターの宣⾔ #DECLARE($customer : Object; $products : Object)->$invoice : Object #DECLARE($customer

    : Object; $products : Object) : 4D.WriteDocument $1 $2 $0 $customer : cs.CustomerEntity $products : cs.ProductSelection $invoice : 4D.WriteDocument return $invoice この場合は戻り値の名前を省略しても良い v19
  51. 任意パラメーター Case of : (Count parameters=1) myAlert($1; ""; "") :

    (Count parameters=2) myAlert($1; $2; "") : (Count parameters=3) myAlert($1; $2; $3) End case C_TEXT($1; $2; $3) チェックしないとエラーになる
  52. 任意パラメーター C_TEXT($1; $2; $3) myAlert($1; $2; $3) Case of :

    (Count parameters=1) myAlert($1; ""; "") : (Count parameters=2) myAlert($1; $2; "") : (Count parameters=3) End case 省略されたパラメーターは空値 v20
  53. 任意パラメーター v20 var $parameter : Variant For each ($parameter; Copy

    parameters) doOneThing($parameter) // 個別処理 End for each doManyThings(Copy parameters) // ⼀括処理 $cat:=New object("type"; "cat") $cat.doIt:=Formula(doIt) $cat.doIt(Copy parameters) //[$1,$2,$3] $dog:=New object("type"; "dog") Formula(doIt).apply($dog; Copy parameters(2)) //[$2,$3]
  54. 可変⻑引数関数 C_POINTER($1) $1: ポインター型 $2...$128: テキスト型 C_TEXT(${2}) For ($i; 2;

    Count parameters) $message+=${$i} End for ${ } パラメーターの間接参照
  55. 可変⻑引数関数 v20 R3 #DECLARE($ptr : Pointer; ... : Text) $1:

    ポインター型 $2...$128: テキスト型 For ($i; 2; Count parameters) $message+=${$i} End for ${ } パラメーターの間接参照 従来のシンタックスも有効 $textValues:=Copy parameters(2) For each ($textValue; $textValues) $total+=$textValue End for each パラメーターをコレクションに変換
  56. 短絡演算⼦ v20 ❖Truthy/Falsyで判定をストップ && || False Null Undefined Nil Pointer

    {} [] "" !00-00-00! Empty picture Falsyでストップ Truthyでストップ その他 (数値の0含む) Ruby Inspired by
  57. 短絡演算⼦ v20 ❖Truthy/Falsyで判定をストップ ❖Nullの判定に便利 If (Form.menu.currentItem#Null) && (Form.menu.currentItem="yes") End if

    Falsyに遭遇したらストップ If (Form.menu.currentItem=Null) || (Form.menu.currentItem="no") End if Truthyに遭遇したらストップ
  58. 短絡演算⼦ v20 ❖関数の出⼒パラメーターを直後に判定 var $stringValue : Text If (Get database

    parameter( \ PHP interpreter IP address; $stringValue)) \ && ($stringValue="127.0.0.1") End if 0はTruthyなので先へ進む
  59. 短絡演算⼦ v20 OBJECT SET ENABLED(*; "OK"; Form.O.K#Null && (Form.O.K.ready=False)) OBJECT

    SET ENABLED(*; "OK"; Form.O.K#Null && Form.O.K.ready=False ) ここで判定 ここで判定 意味が違う! ❖左から右に向かって判定 ❖演算⼦は同等の優先順位 $a || $b && $c ($a || $b) && $c
  60. 代⼊演算⼦ $time:=$time+1 $text:=$text*3 $date:=$date-24 $number:=$number/-2 秒を加算 ⽇を減算 数を除算 ⽂字列を複製 $picture:=$picture+20

    $picture:=$picture*1.5 $picture:=$picture+$picture ピクチャを横に連結 ピクチャを拡⼤ ピクチャを右に移動 $picture:=$picture/$picture ピクチャを縦に連結
  61. 複合代⼊演算⼦ v20 * オブジェクトのプロパティ/コレクションの要素を除く テキスト 数値 ⽇付 時間 += -=

    /= *= ピクチャ ➡連携 ⬅➡移動 スケーリング ⬅➡移動 ⬇連携 ⬆⬇移動
  62. Student ID 232 firstname A lastname A info {} 属性を空値で初期化しない

    v20 ヌル値を空値にマップしない ヌル値を空値にマップする { ID:1, firstname:null, lastname:null, info:null } { ID:1, firstname:"", lastname:"", info:null }
  63. 未定義 vs. ヌル値 $student:=New object プロパティが未定義 {} Undefined($student.info)…True (Value type($student.info)=Is

    undefined)…True ($student.info.phoneNumber=Null)…True 属性の値が未定義 Student ID 232 firstname A lastname A info {} $student:=ds.Student.new() Undefined($student.info)…False (Value type($student.info)=Is undefined)…False ($student.info.phoneNumber=Null)…ERROR#-10716
  64. 未定義と短絡演算⼦ $student:=ds.Student.new() 属性の値が未定義 $phoneNumber:=($student.info && $student.info.phoneNumber) || "" Falsy Truthy

    $phoneNumber:="" If ($student.info#Null) If ($student.info.phoneNumber#Null) $phoneNumber:=$student.info.phoneNumber End if End if v20
  65. コレクション関数 追加 push unshift insert resize fill 削除 pop shift

    remove clear ソート orderBy orderByMethod sort reverse 統計 countValues sum min average count reduce max ⽐較 equal 複製 copy concat combine slice サーチ indexOf lastIndexOf find findIndex filter query indices every some distinct 変換 join map extract ❖JavaScript準拠のツールセット v20
  66. コレクション関数 追加 push unshift insert resize fill 削除 pop shift

    remove clear ソート orderBy orderByMethod sort reverse 統計 countValues sum min average count reduce max reduceRight ⽐較 equal includes 複製 copy concat combine slice サーチ indexOf lastIndexOf find findIndex filter query indices every some distinct 変換 join map extract flat flatMap ❖JavaScript準拠のツールセット v20
  67. コレクション関数 ❖エンティティセレクションとコレクションに共通の関数 追加 push unshift insert resize fill 削除 pop

    shift remove clear ソート orderBy orderByMethod sort reverse 統計 countValues sum min average count reduce max ⽐較 equal 複製 copy concat combine slice サーチ indexOf lastIndexOf find findIndex filter query indices every some distinct 変換 join map extract v20
  68. コレクション関数 ❖エンティティセレクションとコレクションに共通の関数 アクセス first last at 追加 push unshift insert

    resize fill 削除 pop shift remove clear ソート orderBy orderByMethod sort reverse 統計 countValues sum min average count reduce max reduceRight ⽐較 equal includes 複製 copy concat combine slice サーチ indexOf lastIndexOf find findIndex filter query indices every some distinct 変換 join map extract flat flatMap v20
  69. エラー処理メソッド データベース名 ⾏番号 メソッド名 エラー番号 コンポーネント識別⼦ メッセージ ERROR ERROR METHOD

    ERROR LINE ERROR FORMULA Get call chain GET LAST ERROR STACK 呼び出し連鎖 エラースタック インストール 処理メソッド ダイアログ ログファイル ON ERR CALL
  70. エラー処理メソッド 特定のエラーは対象外! コンパイルモード エラーコード エラーテキスト  インデックスが範囲外です。  引数のタイプが対応していません。 

    権限エラー  スタックがいっぱいです(再帰またはネストの呼び出しが多すぎます)  Nullポインターを逆参照しています。 インストール 処理メソッド ダイアログ ログファイル
  71. エラーコード エラーテキスト  インデックスが範囲外です。  引数のタイプが対応していません。  権限エラー  スタックがいっぱいです(再帰またはネストの呼び出しが多すぎます)

     Nullポインターを逆参照しています。 インストール 処理メソッド ダイアログ ログファイル エラー処理メソッド v20 R3 すべてのエラーが対象 コンパイルモード
  72. デフォルトエラー処理メソッド v20 データベース名 ⾏番号 メソッド名 呼び出し連鎖 Get call chain エラー番号

    コンポーネント識別⼦ メッセージ GET LAST ERROR STACK エラースタック Method called on error ek global ek errors from components ek local ON ERR CALL
  73. デフォルトエラー処理メソッド v20 データベース名 ⾏番号 メソッド名 エラー番号 コンポーネント識別⼦ メッセージ Last errors

    呼び出し連鎖 エラースタック Get call chain GET LAST ERROR STACK v20 ON ERR CALL ek local ek global ek global from components Method called on error
  74. カスタムエラーコード throw(1; "targetϓϩύςΟ͸লུͰ͖·ͤΜ") throw({message: "targetϓϩύςΟ͸লུͰ͖·ͤΜ"; errCode: 1}) v20 R2 throw({message:

    "targetϓϩύςΟ͸লུͰ͖·ͤΜ"; errCode: 1;\ timestamp: Timestamp}) エラーコードを⾃由に設定できる エラー処理メソッドに補⾜的な情報を渡せる
  75. 遅延モード コンポーネント識別⼦ カスタムエラーコード v20 R2 throw({message: "targetϓϩύςΟ͸লུͰ͖·ͤΜ"; errCode: 1;\ componentSignature:

    "DC24"; deferred: True}) throw({message: "targetϓϩύςΟ͸লུͰ͖·ͤΜ"; errCode: 1;\ componentSignature: "DC24"}) エラーコードをスタックすることができる(遅延モード) コンポーネント識別⼦を設定できる
  76. カスタムエラーコード v20 R2 <?xml version="1.0" encoding="UTF-8"?> <trans-unit id="1" resname="ERR_DC24_1"> <source>The

    property &quot;prop&quot; is mandatory</source> <target>&quot;prop&quot;ϓϩύςΟ͸লུͰ͖·ͤΜ</target> </trans-unit> throw({componentSignature: "DC24"; errCode: 1; prop: "target"}) コンポーネント識別⼦ (ドメイン) プレースホルダー (バリアント型) エラー番号 エラーリソース名=ERR_{コンポーネント識別⼦}_エラー番号
  77. Qodly Studio for 4D 注⽬ポイント オ・ル・ダ ίϯϙʔωϯτにマッピング プリインストール すぐに使い始められる ハイブリッド

    4Dとブラウザの両⽅からアクセス かんたん コピー&ペーストとテンプレート リアルタイム その場でプレビュー かっこいい CSSフルサポート