ms Πʔαωοτ 8Jp ྫࢦఆͨ͠ʹಛఆͷۭߓ͔Βత·Ͱߦ͚ΔϑϥΠτΛݕࡧ Γܧ͗ճ͕ϧʔτ x 7.5 Time with 'execute on server' method attribute "サーバー上で実⾏メソッド"属性を有効にした場合 XJGJͰԆΛࡍཱͨͤΔ wifi makes delays worse
PR1' V V V V V SP2 V SP1 V WP2 V WP3 V WP1 V V V V CV CV CV CV CV CV CV CV CV CV CV CV CV CV CV CV CV CV CV CV CV CV CV CV CV CV <> CV <> CV <> CV <> CV <> CV <> CV コンパイル モード
PR1' V V V V V SP2 V SP1 V WP2 V WP3 V WP1 V V V V CV CV CV CV CV CV CV CV CV CV CV CV CV CV CV CV CV CV CV CV CV CV CV CV CV CV <> CV <> CV <> CV <> CV <> CV <> CV コンパイル モード プロセス変数テーブルのサイズに無頓着であってはいけない
} 1個のプロセス変数に保存: form_context プロセス変数テーブルに 16バイト追加することに わずか16バイトで整理できて ⼤変お買い得! 属性を追加するだけ拡張: フォームに オブジェクトを追加する必要なし ΦϒδΣΫτมͰεοΩϦ group the variables in an object, you can
$evt:=Form event Case of : ($evt=On Load) $currentCountry:=OB Get(form_context;"currentCountry") ALL RECORDS([Country]) DISTINCT VALUES([Country]Continent;_continent) If ($currentCountry="") _continent:=1 OB SET(form_context;"onTimerMessage";"changeContinent") SET TIMER(-1) Else QUERY([Country];[Country]Name=$currentCountry) _continent:=Find in array(_continent;[Country]Continent) QUERY([Country];[Country]Continent=_continent{_continent}) DISTINCT VALUES([Country]Name;_country) _country:=Find in array(_country;$currentCountry) End if : ($evt=On Timer) SET TIMER(0) $onTimerMessage:=OB Get(form_context;"onTimerMessage";Is text) OB REMOVE(form_context;"onTimerMessage") Case of : ($onTimerMessage="changeContinent") QUERY([Country];[Country]Continent=_continent{_continent}) DISTINCT VALUES([Country]Name;_country) _country:=1 End case End case ίϯςΩετมͷྫ example with a form_context
$evt:=Form event Case of : ($evt=On Load) $currentCountry:=OB Get(form_context;"currentCountry") ALL RECORDS([Country]) DISTINCT VALUES([Country]Continent;_continent) If ($currentCountry="") _continent:=1 OB SET(form_context;"onTimerMessage";"changeContinent") SET TIMER(-1) Else QUERY([Country];[Country]Name=$currentCountry) _continent:=Find in array(_continent;[Country]Continent) QUERY([Country];[Country]Continent=_continent{_continent}) DISTINCT VALUES([Country]Name;_country) _country:=Find in array(_country;$currentCountry) End if : ($evt=On Timer) SET TIMER(0) $onTimerMessage:=OB Get(form_context;"onTimerMessage";Is text) OB REMOVE(form_context;"onTimerMessage") Case of : ($onTimerMessage="changeContinent") QUERY([Country];[Country]Continent=_continent{_continent}) DISTINCT VALUES([Country]Name;_country) _country:=1 End case End case OB SET(form_context;"onTimerMessage";"changeContinent") SET TIMER(-1) ίϯςΩετมͷྫ example with a form_context
$evt:=Form event Case of : ($evt=On Load) $currentCountry:=OB Get(form_context;"currentCountry") ALL RECORDS([Country]) DISTINCT VALUES([Country]Continent;_continent) If ($currentCountry="") _continent:=1 OB SET(form_context;"onTimerMessage";"changeContinent") SET TIMER(-1) Else QUERY([Country];[Country]Name=$currentCountry) _continent:=Find in array(_continent;[Country]Continent) QUERY([Country];[Country]Continent=_continent{_continent}) DISTINCT VALUES([Country]Name;_country) _country:=Find in array(_country;$currentCountry) End if : ($evt=On Timer) SET TIMER(0) $onTimerMessage:=OB Get(form_context;"onTimerMessage";Is text) OB REMOVE(form_context;"onTimerMessage") Case of : ($onTimerMessage="changeContinent") QUERY([Country];[Country]Continent=_continent{_continent}) DISTINCT VALUES([Country]Name;_country) _country:=1 End case End case OB SET(form_context;"onTimerMessage";"changeContinent") SET TIMER(-1) OB SET(form_context;"currentCountry";_country{_country}) ACCEPT ίϯςΩετมͷྫ example with a form_context
False Do not modify, Structure config., Manual, Automatic ストラクチャー定義の⾃動リレーションは変更できない ストラクチャー定義の⾃動リレーションも変更できる ߟ͑ํΛϦηοτ͢Δ you must unlearn what you have learned
False Do not modify, Structure config., Manual, Automatic ストラクチャー定義の⾃動リレーションは変更できない ストラクチャー定義の⾃動リレーションも変更できる "True" はリレーションをロックする; その場合 SET FIELD RELATION は無視されてしまう 副作⽤なし ߟ͑ํΛϦηοτ͢Δ you must unlearn what you have learned
False Do not modify, Structure config., Manual, Automatic ストラクチャー定義の⾃動リレーションは変更できない ストラクチャー定義の⾃動リレーションも変更できる "True" はリレーションをロックする; その場合 SET FIELD RELATION は無視されてしまう 副作⽤なし ! ߟ͑ํΛϦηοτ͢Δ you must unlearn what you have learned
False Do not modify, Structure config., Manual, Automatic ストラクチャー定義の⾃動リレーションは変更できない ストラクチャー定義の⾃動リレーションも変更できる "True" はリレーションをロックする; その場合 SET FIELD RELATION は無視されてしまう 副作⽤なし ! 互換性のために残されている 効率⾯で優れている ߟ͑ํΛϦηοτ͢Δ you must unlearn what you have learned
クライアント側でフォーミュラ式を評価 レコード1件ずつクライアントに転送 JOINを定義して使⽤ 以前のアドバイス : 利⽤は慎重に,できる限りQUERY SELECTIONで対応 現在のアドバイス : v11の主要強化ポイントのひとつ 積極的に使⽤するべき! QUERY SELECTION BY FORMULA ߟ͑ํΛϦηοτ͢Δ you must unlearn what you have learned
登録後,クライアントは定期的に,デ フォルトでは2秒毎に,サーバー あるいは別のクライアントから 呼び出されているか問い合わせる サーバーは必要なときに実⾏リクエスト を直接クライアントに送信する PULLモード PUSHモード ߟ͑ํΛϦηοτ͢Δ you must unlearn what you have learned
登録後,クライアントは定期的に,デ フォルトでは2秒毎に,サーバー あるいは別のクライアントから 呼び出されているか問い合わせる サーバーは必要なときに実⾏リクエスト を直接クライアントに送信する PULLモード PUSHモード ⼤量リクエストの可能性 必要最低限のリクエスト数 ߟ͑ํΛϦηοτ͢Δ you must unlearn what you have learned
($nb=0) //do something end if $reference:=[Customer]Reference $recNum:=Find in field([Customer]Reference;$reference) If ($recNum>=0) //do something End if PUSH / POP ロジックはとても⾼価な処理 セレクション変更・クエリ・メモリの読み書き… ελοΫ่͍͔ͭյ͢Δ at the end, house of cards falls
($nb=0) //do something end if $reference:=[Customer]Reference $recNum:=Find in field([Customer]Reference;$reference) If ($recNum>=0) //do something End if PUSH / POP ロジックはとても⾼価な処理 セレクション変更・クエリ・メモリの読み書き… Find in field でバッチリ解決! ελοΫ่͍͔ͭյ͢Δ at the end, house of cards falls
selection([Customer]) POP RECORD([Customer]) If ($nb=0) //do something End if PUSH / POP ロジックはとても⾼価な処理 セレクション変更・クエリ・メモリの読み書き… ελοΫ่͍͔ͭյ͢Δ at the end, house of cards falls
selection([Customer]) POP RECORD([Customer]) If ($nb=0) //do something End if $firstName:=[Customer]FirstName $lastName:=[Customer]LastName $birthday:=[Customer]Birthday SET QUERY DESTINATION(Into variable;$nb) QUERY([Customer];[Customer]FirstName=$firstName;*) QUERY([Customer];[Customer]LastName=$lastName;*) QUERY([Customer];[Customer]Birthday=$birthday) SET QUERY DESTINATION(Into current selection) If ($nb=0) //do something End if PUSH / POP ロジックはとても⾼価な処理 セレクション変更・クエリ・メモリの読み書き… ελοΫ่͍͔ͭյ͢Δ at the end, house of cards falls
selection([Customer]) POP RECORD([Customer]) If ($nb=0) //do something End if $firstName:=[Customer]FirstName $lastName:=[Customer]LastName $birthday:=[Customer]Birthday SET QUERY DESTINATION(Into variable;$nb) QUERY([Customer];[Customer]FirstName=$firstName;*) QUERY([Customer];[Customer]LastName=$lastName;*) QUERY([Customer];[Customer]Birthday=$birthday) SET QUERY DESTINATION(Into current selection) If ($nb=0) //do something End if PUSH / POP ロジックはとても⾼価な処理 セレクション変更・クエリ・メモリの読み書き… SET QUERY DESTINATION カレントセレクション・レコードを変更せずにクエリを実⾏ ελοΫ่͍͔ͭյ͢Δ at the end, house of cards falls
selection([Customer]) POP RECORD([Customer]) If ($nb=0) //do something End if $firstName:=[Customer]FirstName $lastName:=[Customer]LastName $birthday:=[Customer]Birthday SET QUERY DESTINATION(Into variable;$nb) QUERY([Customer];[Customer]FirstName=$firstName;*) QUERY([Customer];[Customer]LastName=$lastName;*) QUERY([Customer];[Customer]Birthday=$birthday) SET QUERY DESTINATION(Into current selection) If ($nb=0) //do something End if PUSH / POP ロジックはとても⾼価な処理 セレクション変更・クエリ・メモリの読み書き… $firstName:=[Customer]FirstName $lastName:=[Customer]LastName $birthday:=[Customer]Birthday SET QUERY LIMIT(1) SET QUERY DESTINATION(Into variable;$nb) QUERY([Customer];[Customer]FirstName=$firstName;*) QUERY([Customer];[Customer]LastName=$lastName;*) QUERY([Customer];[Customer]Birthday=$birthday) SET QUERY DESTINATION(Into current selection) SET QUERY LIMIT(0) If ($nb=0) //do something End if SET QUERY DESTINATION カレントセレクション・レコードを変更せずにクエリを実⾏ ελοΫ่͍͔ͭյ͢Δ at the end, house of cards falls
selection([Customer]) POP RECORD([Customer]) If ($nb=0) //do something End if $firstName:=[Customer]FirstName $lastName:=[Customer]LastName $birthday:=[Customer]Birthday SET QUERY DESTINATION(Into variable;$nb) QUERY([Customer];[Customer]FirstName=$firstName;*) QUERY([Customer];[Customer]LastName=$lastName;*) QUERY([Customer];[Customer]Birthday=$birthday) SET QUERY DESTINATION(Into current selection) If ($nb=0) //do something End if PUSH / POP ロジックはとても⾼価な処理 セレクション変更・クエリ・メモリの読み書き… $firstName:=[Customer]FirstName $lastName:=[Customer]LastName $birthday:=[Customer]Birthday SET QUERY LIMIT(1) SET QUERY DESTINATION(Into variable;$nb) QUERY([Customer];[Customer]FirstName=$firstName;*) QUERY([Customer];[Customer]LastName=$lastName;*) QUERY([Customer];[Customer]Birthday=$birthday) SET QUERY DESTINATION(Into current selection) SET QUERY LIMIT(0) If ($nb=0) //do something End if SET QUERY LIMIT 0 でリミットを解除 SET QUERY DESTINATION カレントセレクション・レコードを変更せずにクエリを実⾏ ελοΫ่͍͔ͭյ͢Δ at the end, house of cards falls
with $firstName, $lastName ... $reference:=[Customer]Reference $firstName:="" $lastName:="" Begin SQL select FirstName, LastName from Customer where Reference=:$reference into :$firstName, :$lastName End SQL //do something with $firstName, $lastName ... PUSH / POP ロジックはとても⾼価な処理 セレクション変更・クエリ・メモリの読み書き… ελοΫ่͍͔ͭյ͢Δ at the end, house of cards falls
with $firstName, $lastName ... $reference:=[Customer]Reference $firstName:="" $lastName:="" Begin SQL select FirstName, LastName from Customer where Reference=:$reference into :$firstName, :$lastName End SQL //do something with $firstName, $lastName ... PUSH / POP ロジックはとても⾼価な処理 セレクション変更・クエリ・メモリの読み書き… SQL カレントセレクション・レコードを 変更せずにレコードの値を取り出すことができる ελοΫ่͍͔ͭյ͢Δ at the end, house of cards falls
with $firstName, $lastName ... $reference:=[Customer]Reference $firstName:="" $lastName:="" Begin SQL select FirstName, LastName from Customer where Reference=:$reference into :$firstName, :$lastName End SQL //do something with $firstName, $lastName ... PUSH / POP ロジックはとても⾼価な処理 セレクション変更・クエリ・メモリの読み書き… SQL カレントセレクション・レコードを 変更せずにレコードの値を取り出すことができる 別⾔語の使⽤は⾃由! ελοΫ่͍͔ͭյ͢Δ at the end, house of cards falls
DESTINATION(Into current selection) QUERY+CREATE SET: 2度のネットワーク通信・ カレントセレクションの変更・カレントレコードの 変更・カレントレコードのロック ͕ࣝߦ࿏ΛΓ։͘ a little more knowledge lights our way
DESTINATION(Into current selection) QUERY+CREATE SET: 2度のネットワーク通信・ カレントセレクションの変更・カレントレコードの 変更・カレントレコードのロック SET QUERY DESTINATION+QUERY: 1度の ネットワーク通信・セットを作成するだけ ͕ࣝߦ࿏ΛΓ։͘ a little more knowledge lights our way
CLEAR SEMAPHORE("parameters") "parameters" はグローバルセマフォ "<>arrayParameters" は インタープロセス変数 サーバー側で管理 クライアント側で管理 ͷதʹܙ͕͋Δ the sounds of silence, respect you must
CLEAR SEMAPHORE("parameters") "parameters" はグローバルセマフォ "<>arrayParameters" は インタープロセス変数 サーバー側で管理 クライアント側で管理 ͷதʹܙ͕͋Δ the sounds of silence, respect you must
CLEAR SEMAPHORE("parameters") 貴様はテロリストか ! "parameters" はグローバルセマフォ "<>arrayParameters" は インタープロセス変数 サーバー側で管理 クライアント側で管理 ͷதʹܙ͕͋Δ the sounds of silence, respect you must
ARRAY TEXT(<>arrayParameter;0) While (Semaphore("$parameters";500)) IDLE End while APPEND TO ARRAY(<>arrayParameter;$newValue) CLEAR SEMAPHORE("$parameters") ͷதʹܙ͕͋Δ the sounds of silence, respect you must
ARRAY TEXT(<>arrayParameter;0) While (Semaphore("$parameters";500)) IDLE End while APPEND TO ARRAY(<>arrayParameter;$newValue) CLEAR SEMAPHORE("$parameters") "$parameters" はローカルセマフォ ͷதʹܙ͕͋Δ the sounds of silence, respect you must
ARRAY TEXT(<>arrayParameter;0) While (Semaphore("$parameters";500)) IDLE End while APPEND TO ARRAY(<>arrayParameter;$newValue) CLEAR SEMAPHORE("$parameters") "$parameters" はローカルセマフォ クライアント側で管理 ͷதʹܙ͕͋Δ the sounds of silence, respect you must
ARRAY TEXT(<>arrayParameter;0) While (Semaphore("$parameters";500)) IDLE End while APPEND TO ARRAY(<>arrayParameter;$newValue) CLEAR SEMAPHORE("$parameters") "$parameters" はローカルセマフォ クライアント側で管理 セマフォがセットされるまで500tick待機する ͷதʹܙ͕͋Δ the sounds of silence, respect you must
CLEAR SEMAPHORE("$parameters") "$parameters" はローカルセマフォ クライアント側で管理 セマフォがセットされるまで500tick待機する 型をしっかり憶えましょう 🙂 ͷதʹܙ͕͋Δ the sounds of silence, respect you must
| (Type($array->)=Integer array)\ ;"Array must be a numeric") $sum:=0 For ($i;1;Size of array($array->)) $sum:=$sum+$array->{$i} End for $0:=$sum ࣗຫͷ൚༻ϝιουΛஅࣺ kill good old generic
| (Type($array->)=Integer array)\ ;"Array must be a numeric") $sum:=0 For ($i;1;Size of array($array->)) $sum:=$sum+$array->{$i} End for $0:=$sum $sum:=Sum(myArray) ࣗຫͷ൚༻ϝιουΛஅࣺ kill good old generic
| (Type($array->)=Integer array)\ ;"Array must be a numeric") $sum:=0 For ($i;1;Size of array($array->)) $sum:=$sum+$array->{$i} End for $0:=$sum $sum:=Sum(myArray) v13以降,"Sum" "Min" "Max" などの統計関数は配列に対応 ࣗຫͷ൚༻ϝιουΛஅࣺ kill good old generic
if ReadWrite(->[Contact]) READ WRITE([Contact]) v2004では,サーバーをコールしたので, READ WRITEを実⾏する前に 状態を調べることは有⽤だった v11以降,リクエストがサーバーに 送信されるまでREAD WRITEは 保留されるようになったのでこれで良い ൚༻ϝιουΛ࠶ධՁ kill good old generic, you can
if ReadWrite(->[Contact]) READ WRITE([Contact]) v2004では,サーバーをコールしたので, READ WRITEを実⾏する前に 状態を調べることは有⽤だった v11以降,リクエストがサーバーに 送信されるまでREAD WRITEは 保留されるようになったのでこれで良い 毎回のアップグレード後に必ずチェックするべき項⽬のひとつ ൚༻ϝιουΛ࠶ධՁ kill good old generic, you can
if ReadWrite(->[Contact]) READ WRITE([Contact]) v2004では,サーバーをコールしたので, READ WRITEを実⾏する前に 状態を調べることは有⽤だった v11以降,リクエストがサーバーに 送信されるまでREAD WRITEは 保留されるようになったのでこれで良い 毎回のアップグレード後に必ずチェックするべき項⽬のひとつ 何年も開いていない汎⽤コードは腐った⾷品と同じ: 捨てるか運を天に任せるか ൚༻ϝιουΛ࠶ධՁ kill good old generic, you can
if ReadWrite(->[Contact]) READ WRITE([Contact]) v2004では,サーバーをコールしたので, READ WRITEを実⾏する前に 状態を調べることは有⽤だった v11以降,リクエストがサーバーに 送信されるまでREAD WRITEは 保留されるようになったのでこれで良い 毎回のアップグレード後に必ずチェックするべき項⽬のひとつ 何年も開いていない汎⽤コードは腐った⾷品と同じ: 捨てるか運を天に任せるか 汎⽤コードがまとめられたコンポーネントも忘れずにチェックすること ൚༻ϝιουΛ࠶ධՁ kill good old generic, you can
process("MyProcessMethod";0;"MyProcessMethod";<>myLogin;<>customerID) パラメーター群をサーバーに転送 明快なプロセス名 奇妙または気まぐれに考案された名前では将来のログ解析が困難に σλϥϝͳ໊લΛ͚ͳ͍ respect the name, you should
process("MyProcessMethod";0;"MyProcessMethod";<>myLogin;<>customerID) パラメーター群をサーバーに転送 明快なプロセス名 奇妙または気まぐれに考案された名前では将来のログ解析が困難に 今⾵に,コンテキスト情報はオブジェクト1個で渡せば良い σλϥϝͳ໊લΛ͚ͳ͍ respect the name, you should
$calculation_finished:=False Repeat GET PROCESS VARIABLE($process_srv_id;calculation_finished;$calculation_finished) GET PROCESS VARIABLE($process_srv_id;Result;$Result) Until ($calculation_finished) $calculation_kill:=true SET PROCESS VARIABLE($process_srv_id;calculation_kill;$calculation_kill) ྨࣅʹҙ brothers but not twins …
$calculation_finished:=False Repeat GET PROCESS VARIABLE($process_srv_id;calculation_finished;$calculation_finished) GET PROCESS VARIABLE($process_srv_id;Result;$Result) Until ($calculation_finished) $calculation_kill:=true SET PROCESS VARIABLE($process_srv_id;calculation_kill;$calculation_kill) // myOptimizedMethodSrv calculation_launch:=False calculation_finished:=False calculation_kill:=False customer_ID:=0 while( not(calculation_launch)) DELAY PROCESS(Current process;1) End while // 結果を計算する Result:=.... calculation_finished:=True While (Not(calculation_kill)) DELAY PROCESS(Current process;1) End while ྨࣅʹҙ brothers but not twins …
$calculation_finished:=False Repeat GET PROCESS VARIABLE($process_srv_id;calculation_finished;$calculation_finished) GET PROCESS VARIABLE($process_srv_id;Result;$Result) Until ($calculation_finished) $calculation_kill:=true SET PROCESS VARIABLE($process_srv_id;calculation_kill;$calculation_kill) // myOptimizedMethodSrv calculation_launch:=False calculation_finished:=False calculation_kill:=False customer_ID:=0 while( not(calculation_launch)) DELAY PROCESS(Current process;1) End while // 結果を計算する Result:=.... calculation_finished:=True While (Not(calculation_kill)) DELAY PROCESS(Current process;1) End while "Execute on server" メソッドに引数を渡せば良い ྨࣅʹҙ brothers but not twins …
$calculation_finished:=False Repeat GET PROCESS VARIABLE($process_srv_id;calculation_finished;$calculation_finished) GET PROCESS VARIABLE($process_srv_id;Result;$Result) Until ($calculation_finished) $calculation_kill:=true SET PROCESS VARIABLE($process_srv_id;calculation_kill;$calculation_kill) // myOptimizedMethodSrv calculation_launch:=False calculation_finished:=False calculation_kill:=False customer_ID:=0 while( not(calculation_launch)) DELAY PROCESS(Current process;1) End while // 結果を計算する Result:=.... calculation_finished:=True While (Not(calculation_kill)) DELAY PROCESS(Current process;1) End while "Execute on server" メソッドに引数を渡せば良い 1回にまとめられる ྨࣅʹҙ brothers but not twins …
$calculation_finished:=False Repeat GET PROCESS VARIABLE($process_srv_id;calculation_finished;$calculation_finished) GET PROCESS VARIABLE($process_srv_id;Result;$Result) Until ($calculation_finished) $calculation_kill:=true SET PROCESS VARIABLE($process_srv_id;calculation_kill;$calculation_kill) // myOptimizedMethodSrv calculation_launch:=False calculation_finished:=False calculation_kill:=False customer_ID:=0 while( not(calculation_launch)) DELAY PROCESS(Current process;1) End while // 結果を計算する Result:=.... calculation_finished:=True While (Not(calculation_kill)) DELAY PROCESS(Current process;1) End while "Execute on server" メソッドに引数を渡せば良い 1回にまとめられる "息継ぎ"する時間がない ྨࣅʹҙ brothers but not twins …
$calculation_finished:=False Repeat GET PROCESS VARIABLE($process_srv_id;calculation_finished;$calculation_finished) GET PROCESS VARIABLE($process_srv_id;Result;$Result) Until ($calculation_finished) $calculation_kill:=true SET PROCESS VARIABLE($process_srv_id;calculation_kill;$calculation_kill) // myOptimizedMethodSrv calculation_launch:=False calculation_finished:=False calculation_kill:=False customer_ID:=0 while( not(calculation_launch)) DELAY PROCESS(Current process;1) End while // 結果を計算する Result:=.... calculation_finished:=True While (Not(calculation_kill)) DELAY PROCESS(Current process;1) End while "Execute on server" メソッドに引数を渡せば良い 1回にまとめられる "息継ぎ"する時間がない パラメーターをコマンドに直接 渡すことは避けたほうが良い ྨࣅʹҙ brothers but not twins …
$calculation_finished:=False Repeat GET PROCESS VARIABLE($process_srv_id;calculation_finished;$calculation_finished) GET PROCESS VARIABLE($process_srv_id;Result;$Result) Until ($calculation_finished) $calculation_kill:=true SET PROCESS VARIABLE($process_srv_id;calculation_kill;$calculation_kill) // myOptimizedMethodSrv calculation_launch:=False calculation_finished:=False calculation_kill:=False customer_ID:=0 while( not(calculation_launch)) DELAY PROCESS(Current process;1) End while // 結果を計算する Result:=.... calculation_finished:=True While (Not(calculation_kill)) DELAY PROCESS(Current process;1) End while //myReallyOptimizedMethodSrv $customer_ID:=$1 // 結果を計算する $result:=.... $0:=$result ྨࣅʹҙ brothers but not twins …
$calculation_finished:=False Repeat GET PROCESS VARIABLE($process_srv_id;calculation_finished;$calculation_finished) GET PROCESS VARIABLE($process_srv_id;Result;$Result) Until ($calculation_finished) $calculation_kill:=true SET PROCESS VARIABLE($process_srv_id;calculation_kill;$calculation_kill) // myOptimizedMethodSrv calculation_launch:=False calculation_finished:=False calculation_kill:=False customer_ID:=0 while( not(calculation_launch)) DELAY PROCESS(Current process;1) End while // 結果を計算する Result:=.... calculation_finished:=True While (Not(calculation_kill)) DELAY PROCESS(Current process;1) End while //myReallyOptimizedMethodSrv $customer_ID:=$1 // 結果を計算する $result:=.... $0:=$result ྨࣅʹҙ brothers but not twins …
$calculation_finished:=False Repeat GET PROCESS VARIABLE($process_srv_id;calculation_finished;$calculation_finished) GET PROCESS VARIABLE($process_srv_id;Result;$Result) Until ($calculation_finished) $calculation_kill:=true SET PROCESS VARIABLE($process_srv_id;calculation_kill;$calculation_kill) // myOptimizedMethodSrv calculation_launch:=False calculation_finished:=False calculation_kill:=False customer_ID:=0 while( not(calculation_launch)) DELAY PROCESS(Current process;1) End while // 結果を計算する Result:=.... calculation_finished:=True While (Not(calculation_kill)) DELAY PROCESS(Current process;1) End while //myReallyOptimizedMethodSrv $customer_ID:=$1 // 結果を計算する $result:=.... $0:=$result ྨࣅʹҙ brothers but not twins …
$calculation_finished:=False Repeat GET PROCESS VARIABLE($process_srv_id;calculation_finished;$calculation_finished) GET PROCESS VARIABLE($process_srv_id;Result;$Result) Until ($calculation_finished) $calculation_kill:=true SET PROCESS VARIABLE($process_srv_id;calculation_kill;$calculation_kill) // myOptimizedMethodSrv calculation_launch:=False calculation_finished:=False calculation_kill:=False customer_ID:=0 while( not(calculation_launch)) DELAY PROCESS(Current process;1) End while // 結果を計算する Result:=.... calculation_finished:=True While (Not(calculation_kill)) DELAY PROCESS(Current process;1) End while //myReallyOptimizedMethodSrv $customer_ID:=$1 // 結果を計算する $result:=.... $0:=$result ྨࣅʹҙ brothers but not twins …
$calculation_finished:=False Repeat GET PROCESS VARIABLE($process_srv_id;calculation_finished;$calculation_finished) GET PROCESS VARIABLE($process_srv_id;Result;$Result) Until ($calculation_finished) $calculation_kill:=true SET PROCESS VARIABLE($process_srv_id;calculation_kill;$calculation_kill) // myOptimizedMethodSrv calculation_launch:=False calculation_finished:=False calculation_kill:=False customer_ID:=0 while( not(calculation_launch)) DELAY PROCESS(Current process;1) End while // 結果を計算する Result:=.... calculation_finished:=True While (Not(calculation_kill)) DELAY PROCESS(Current process;1) End while //myReallyOptimizedMethodSrv $customer_ID:=$1 // 結果を計算する $result:=.... $0:=$result ྨࣅʹҙ brothers but not twins …
$calculation_finished:=False Repeat GET PROCESS VARIABLE($process_srv_id;calculation_finished;$calculation_finished) GET PROCESS VARIABLE($process_srv_id;Result;$Result) Until ($calculation_finished) $calculation_kill:=true SET PROCESS VARIABLE($process_srv_id;calculation_kill;$calculation_kill) // myOptimizedMethodSrv calculation_launch:=False calculation_finished:=False calculation_kill:=False customer_ID:=0 while( not(calculation_launch)) DELAY PROCESS(Current process;1) End while // 結果を計算する Result:=.... calculation_finished:=True While (Not(calculation_kill)) DELAY PROCESS(Current process;1) End while //myReallyOptimizedMethodSrv $customer_ID:=$1 // 結果を計算する $result:=.... $0:=$result "Execute on server"コマンドは⾮同期コール ྨࣅʹҙ brothers but not twins …
$calculation_finished:=False Repeat GET PROCESS VARIABLE($process_srv_id;calculation_finished;$calculation_finished) GET PROCESS VARIABLE($process_srv_id;Result;$Result) Until ($calculation_finished) $calculation_kill:=true SET PROCESS VARIABLE($process_srv_id;calculation_kill;$calculation_kill) // myOptimizedMethodSrv calculation_launch:=False calculation_finished:=False calculation_kill:=False customer_ID:=0 while( not(calculation_launch)) DELAY PROCESS(Current process;1) End while // 結果を計算する Result:=.... calculation_finished:=True While (Not(calculation_kill)) DELAY PROCESS(Current process;1) End while //myReallyOptimizedMethodSrv $customer_ID:=$1 // 結果を計算する $result:=.... $0:=$result "Execute on server"コマンドは⾮同期コール "サーバー上で実⾏"メソッド属性は同期コール ྨࣅʹҙ brothers but not twins …
$path:=Get last query path(Description in text format) SET TEXT TO PASTEBOARD($path) DESCRIBE QUERY EXECUTION(False) ࢥͬͨΑ͏ͳ͕ಘΒΕͳ͍ͱ͖ʜ if no mistake have you made, yet losing you are …
$path:=Get last query path(Description in text format) SET TEXT TO PASTEBOARD($path) DESCRIBE QUERY EXECUTION(False) クエリプランとクエリパスで視点をエンジンルーム内に移動 ࢥͬͨΑ͏ͳ͕ಘΒΕͳ͍ͱ͖ʜ if no mistake have you made, yet losing you are …
$path:=Get last query path(Description in text format) SET TEXT TO PASTEBOARD($path) DESCRIBE QUERY EXECUTION(False) クエリプランとクエリパスで視点をエンジンルーム内に移動 優れたクエリを書くため,時には直感を働かせることも必要 ࢥͬͨΑ͏ͳ͕ಘΒΕͳ͍ͱ͖ʜ if no mistake have you made, yet losing you are …
($id_progress;"Update customers";0;"";True) ALL RECORDS([Customer]) $j:=0 $nb:=Records in table([Customer]) While (Not(End selection([Customer]))) & (Not(Progress Stopped ($id_progress))) $j:=$j+1 Progress SET PROGRESS ($id_progress;$j/$nb;[Customer]name) ///Կ͔͢Δ ... NEXT RECORD([Customer]) End while Progress QUIT ($id_progress) Mr Smith VAT rate ਐḿόʔͰ։ൃαΫαΫ 4D helps your progress
($id_progress;"Update customers";0;"";True) ALL RECORDS([Customer]) $j:=0 $nb:=Records in table([Customer]) While (Not(End selection([Customer]))) & (Not(Progress Stopped ($id_progress))) $j:=$j+1 Progress SET PROGRESS ($id_progress;$j/$nb;[Customer]name) ///Կ͔͢Δ ... NEXT RECORD([Customer]) End while Progress QUIT ($id_progress) Mr Smith VAT rate $id_progress:=Progress New Progress SET BUTTON ENABLED ($id_progress;True) Progress SET TITLE ($id_progress;"Apply new parameter";0;"";True) ALL RECORDS([Param]) $j:=0 $nb:=Records in table([Param]) While (Not(End selection([Param]))) & (Not(Progress Stopped ($id_progress))) $j:=$j+1 Progress SET PROGRESS ($id_progress;$j/$nb;[Param]name) ///Կ͔͢Δ ... NEXT RECORD([Param]) End while Progress QUIT ($id_progress) ਐḿόʔͰ։ൃαΫαΫ 4D helps your progress
($id_progress;"Update customers";0;"";True) ALL RECORDS([Customer]) $j:=0 $nb:=Records in table([Customer]) While (Not(End selection([Customer]))) & (Not(Progress Stopped ($id_progress))) $j:=$j+1 Progress SET PROGRESS ($id_progress;$j/$nb;[Customer]name) ///Կ͔͢Δ ... NEXT RECORD([Customer]) End while Progress QUIT ($id_progress) Mr Smith VAT rate $id_progress:=Progress New Progress SET BUTTON ENABLED ($id_progress;True) Progress SET TITLE ($id_progress;"Apply new parameter";0;"";True) ALL RECORDS([Param]) $j:=0 $nb:=Records in table([Param]) While (Not(End selection([Param]))) & (Not(Progress Stopped ($id_progress))) $j:=$j+1 Progress SET PROGRESS ($id_progress;$j/$nb;[Param]name) ///Կ͔͢Δ ... NEXT RECORD([Param]) End while Progress QUIT ($id_progress) おすすめ: ループ10回毎に メソッドをコールする ਐḿόʔͰ։ൃαΫαΫ 4D helps your progress
($i;1;$nb) If (Length($1->{$i})=0) Else APPEND TO ARRAY($_result;$1->{$i}) $nb_total:=$nb_total+1 End if End for COPY ARRAY($_result;$2->) ࣗͰΒͳ͍ͱؾ͕ࡁ·ͳ͍ don't keep a dog and bark yourself!
($i;1;$nb) If (Length($1->{$i})=0) Else APPEND TO ARRAY($_result;$1->{$i}) $nb_total:=$nb_total+1 End if End for COPY ARRAY($_result;$2->) がんばり過ぎ〜 $nb_total:=0 のほうが⾃然なのに この変数は要らないのでは $1->{$i}="" よりも 優れているのかなぁ? =0 / Else よりも #0 のほうが シンプルじゃないの? ࣗͰΒͳ͍ͱؾ͕ࡁ·ͳ͍ don't keep a dog and bark yourself!
pas lorsqu'il n'y a plus rien à ajouter, mais lorsqu'il n'y a plus rien à retirer. ᘳͱ͜ΕҎ্Ճ͑ΒΕͳ͍ͱ͖Ͱͳ͘ ͜ΕҎ্ΓͱΕͳ͍ͱ͖ʹୡ͞ΕΔΑ͏ͩ ʰਓؒͷʱΑΓ Wind, Sand and Stars (1939)