Page 8 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 通常モードに戻る ┃ INDEX ┃ ≪前へ │ 次へ≫ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ▼また スクリプトの質問です。 xyr 01/11/25(日) 1:59 ┣Re:また スクリプトの質問です。--> ギブアップです。 ykitz 01/11/25(日) 9:13 ┃ ┗Re:また スクリプトの質問です。--> ギブ... xyr 01/11/27(火) 1:27 ┃ ┣Re:また スクリプトの質問です。--> ギブ... ykitz 01/11/27(火) 5:46 ┃ ┗Re:また スクリプトの質問です。--> 追加情報 ykitz 01/11/27(火) 8:20 ┗Re:また スクリプトの質問です。 nva 01/11/28(水) 2:14 ┗nvaさん、待ってました。 ykitz 01/11/28(水) 7:52 ┗Re:nvaさん、待ってました。 xyr 01/12/1(土) 3:22 ┣「(Globals) の(Declarations)にインクルード」とは ykitz 01/12/1(土) 9:16 ┗画面上のデータの扱いやFieldBoxの扱いについて nva 01/12/5(水) 1:27 ┣Re:画面上のデータの扱いやFieldBoxの扱いについて ykitz 01/12/5(水) 4:58 ┗Re:画面上のデータの扱いやFieldBoxの扱いに... xyr 01/12/8(土) 17:26 ┗Re:画面上のデータの扱いやFieldBoxの扱いに... nva 01/12/8(土) 18:25 ┗やっぱり無理? xyr 01/12/10(月) 1:33 ┗Re:やっぱり無理? nva 01/12/10(月) 2:06 ┗やってみました... xyr 01/12/12(水) 0:03 ┗Re:やってみました... nva 01/12/12(水) 19:12 ┗Re:やってみました... xyr 01/12/13(木) 0:36 ┗Re:やってみました... nva 01/12/13(木) 21:09 ┣Re:やってみました... ykitz 01/12/14(金) 4:13 ┗nva さんからスクリプトのサンプル提供 !!! ykitz 01/12/17(月) 6:59 ─────────────────────────────────────── ■題名 : また スクリプトの質問です。 ■名前 : xyr ■日付 : 01/11/25(日) 1:59 -------------------------------------------------------------------------
| xyrです。 また質問させてください。 スクリプトエディタで スクリプトを書く場所を (Globals) ではなく、別のモジュール上に メニューの "作成(C)"−"サブルーチン(S)" で 任意のサブルーチン名をつけて作成しました。 これを 同一モジュール内のボタンに割り付けた "Sub Click(Source As...." のスクリプトから 呼び出す事は出来るのでしょうか? 実行させる方法がわかりません。 マクロでは "(Globals)" ではないので呼び出せませんし。 |
| xyr さんのおっしゃるような難しい方法は、分かりません。ギブアップです。 私は、スクリプト内で共用できるルーチンは (Globals) に記述し、 各オブジェクトの、たとえば Sub Click から Call するような、 ごく基本的な記述方法しか知りません。 なお、(Globals) には、複数のサブルーチンを記述することができます。 前に、issun さんもおっしゃっていましたが、 アプローチのスマートマスターの中にある「会議室予約」には かなり本格的なスクリプトが含まれていますので、是非、ご覧になって下さい。 具体的にすぐに使える方法を見つけるというより、全体の記述の仕方を参考にする という意味で、お役に立つと思います。 また、「ロータススクリプト マニュアル」のうち、 下記の各章が参考になるかもしれません。 「ランゲージリファレンス」 第2章 プロシージャ 第7章 ステートメント、組み込み関数、サブルーチン、データ型、命令 「プログラマーガイド」 第4章 プロシージャ:関数、サブルーチン、プロパティ 「ハンドブック」 第2章 アプリケーションを構築するため構成要素 第3章 ロータススクリプトのプログラミングツール どなたか、お分かりの方、いらっしゃいませんか? |
| ykitzさん 意外に簡単な事で 私がわからないだけなのかなと思い 質問したのですが。 すみません、難解な質問だったようで。 (Globals) 以外の場所に スクリプトを書いて エディタの実行アイコンを押すと 問題なく動くものですから、アプリケーションからは どうやったら実行できるかと思って。 実はスクリプトコードが、最大値の 64KB を越えてしまいまして、このような質問をした訳です。 ヘルプには エラー解決方法として (Globals)以外のモジュールに分割してくださいと いう様な事が書いてありました。 と、いうことは 他の場所から実行する方法が有るのだろうと考えたのです。 変な質問でごめんなさい、もう一度 自分で調べてみます。 |
| >> xyrさん: >実はスクリプトコードが、最大値の 64KB を越えてしまいまして、このような質問をした訳です。 かなり大がかりなようですね。すごいです。 で、あまり参考にはなりませんが、手がかりになりそうな情報を見つけましたので ご覧になって下さい。 それのある場所は、スクリプトエディタのヘルプです。 いずれも、スクリプトエディタのヘルプの「ロータススクリプト」の中にあります。 (1) 「目次」タブ -> カテゴリ別リファレンス -> 言語の規則と制限 -> 言語とスクリプトの制限 -> コンパイラとコンパイルしたファイルの制限 (2) 「キーワード」タブ #include 命令 参考になるといいのですが。 |
| 「ロータススクリプト マニュアル」の「ハンドブック」の以下の項目が 参考になるように思われます。 外部のスクリプトファイルを使う。 スクリプトを外部の LSO または LSS ファイルにエクスポートする。 かなり複雑で高度なことをなさろうとしておられるようですので、 是非、「ロータススクリプト マニュアル」を購入なさることをお勧めします。 |
| 管理人さんおひさしぶりです 掲示板復活してたんですね これからもよろしくお願いします >> xyrさん: >スクリプトエディタで スクリプトを書く場所を (Globals) ではなく、別のモジュール上に >メニューの "作成(C)"−"サブルーチン(S)" で 任意のサブルーチン名をつけて作成しました。 > >これを 同一モジュール内のボタンに割り付けた "Sub Click(Source As...." のスクリプトから >呼び出す事は出来るのでしょうか? 実行させる方法がわかりません。 これは実行できません 自作のプロシージャは配置したオブジェクトからのみコールしてください すべてのオブジェクトや複数のオブジェクトから呼ぶ可能性のあるプロシージャは (Globals) に記述してください もしくはLSS化して(Globals) の(Declarations)にインクルードしてください 64kを超えるようなことはめったにないのですが、どのような作業でしょうか? |
| nvaさん、待ってました。 スクリプトに詳しい方の登場で、この掲示板の情報交流も、 より盛んになると思います。 これからも、よろしくお願いします。 あ、もちろん、アプローチ初心者の皆さん、 ごく初歩的な質問も、どんどんしてくださいね。 誰もがみんな、初めは初心者ですからね。 さて、64KB を超えるスクリプトとは、かなり高度で複雑な内容だと思います。 すごい。 >64kを超えるようなことはめったにないのですが、どのような作業でしょうか? xyr さん、もし差し支えがなければ、概要をお知らせください。 恐らく、この下の【25】から始まるスレッドの中で書かれている内容に 関連しているのだとは思いますが。 別の目で見ると、別の解決策が見つかるかもしれません。 |
| ykitzさん nvaさん こんばんは。 またまた 返事が遅れてしまいました。 >さて、64KB を超えるスクリプトとは、かなり高度で複雑な内容だと思います。 >恐らく、この下の【25】から始まるスレッドの中で書かれている内容に >関連しているのだとは思いますが。 お察しの通り、【25】スレッドの話です。 内容は ぜんぜん複雑ではなくて ここに書くのも恥ずかしいのですが 書かないと話になりませんので恥をしのんで。 フォームに多数のフィールドで形成した表の "行" にあたる部分を 「1行削除」、「1行挿入」、「1行コピー&貼り付け」 という事をやりたいのです。 前回 ykitzさんに教えていただいた "Source.項目2.text = Source.項目1.text" または "CurrentView.Body.項目2.Text = CurrentView.Body.項目1.text" の書式で オブジェクト名 "項目2"、"項目1" の数値の部分を変数化して "For 〜 Next"文で 処理したかったのですが 私がやった限りでは オブジェクト名は変数化ができないようなので 同じ書式をだらだら羅列して作ると 「1行削除」、「1行挿入」 機能だけで 64KB を越えてしまいました。 変数化って出来るのでしょうか? それと、LSS ですが これもすでに試していたのですが LSS に書いたスクリプトは 64KB の範囲に含まれてしまうみたいで (Globals)内に書いたものが少なくてもエラーになってしまいました。 nvaさん:「(Globals) の(Declarations)にインクルード」とはどういう...。 (Declarations)の意味を理解していないもので。(汗) LSO に関しては LSOエクスポート までは 出来たのですが それをどうやって実行するのか解らずギブアップしてしまいました。 とりあえず 今は機能を簡素化して「1行削除」、「1行挿入」 機能だけは 実現できています。 |
| xyrさん、こんにちは。 >オブジェクト名 "項目2"、"項目1" の数値の部分を変数化して >"For 〜 Next"文で 処理したかったのですが >私がやった限りでは オブジェクト名は変数化ができないようなので >同じ書式をだらだら羅列して作ると >「1行削除」、「1行挿入」 機能だけで 64KB を越えてしまいました。 >変数化って出来るのでしょうか? ということは、多分、ResultSet の中で、 配列を使って項目間の値のやり取りをして、 それをフィールドに戻すようなやり方になるのだと思います。 私の実力では、何となくそうじゃないかな、までは分かるのですが 具体的にどうするまでは詰め切れません。すいません。 >それと、LSS ですが これもすでに試していたのですが >LSS に書いたスクリプトは 64KB の範囲に含まれてしまうみたいで >(Globals)内に書いたものが少なくてもエラーになってしまいました。 なんとなく、やな予感がしてたんですが、やっぱり...。 >nvaさん:「(Globals) の(Declarations)にインクルード」とはどういう...。 > (Declarations)の意味を理解していないもので。(汗) nvaさんにかわりまして、この部分だけは、お答えできます。 スクリプトエディタの「オブジェクト」欄で (Globals) 、「スクリプト」欄で (Declarations) をそれぞれ選択した状態のことです。 その状態で、スクリプト記述欄に、%include ファイル名 と記述します。 【52】の繰り返しになりますが、 スクリプトエディタのヘルプの「ロータススクリプト」の下記項目が 参考になると思います。 (1)「目次」タブ -> カテゴリ別リファレンス -> 言語の規則と制限 -> 言語とスクリプトの制限 -> コンパイラとコンパイルしたファイルの制限 (2)「キーワード」タブ #include 命令 ただ、ResultSet を使う方法が、正解のような気がしてますが...。 |
| >> xyrさん: 遅くなりました申し訳ないです >前回 ykitzさんに教えていただいた >"Source.項目2.text = Source.項目1.text" または >"CurrentView.Body.項目2.Text = CurrentView.Body.項目1.text" の書式で >オブジェクト名 "項目2"、"項目1" の数値の部分を変数化して >"For 〜 Next"文で 処理したかったのですが >私がやった限りでは オブジェクト名は変数化ができないようなので >同じ書式をだらだら羅列して作ると 問題や勘違いを一つずつ潰していきましょう 1. 25のスレッドを見て不明な点はどのようなテーブル構造のデータが どのような規則で画面に表示されているかです 更新の対象が「画面上に表示されているもののみ」の様ですので 上記の事はスクリプトをどう記述するかに大きくかかわります Query,ReultSetを使用したほうがスムーズにいくのか、 FieldBox.textで更新したほうがいいのか、 時間のあるときに詳しい情報をください 2. 「オブジェクト名」の変数化はできます 「オブジェクト名」を変数化するには Dim strObjname As String strObjname = CurrentView.Body.[オブジェクト].Name といった感じでできます ただ[オブジェクト]の部分は .text や .Name などの対象になる オブジェクトがくるので「オブジェクト名」を代入した文字列型変数を もってきてもだめです (この文法では通常オブジェクト名をそのまま記述して、オブジェクトを差す ことができるので勘違いをしやすい部分です) ではオブジェクトを変数化できないのか?となりますが これもできます Dim fbxObj As FieldBox Dim a as String Set fbxObj = CurrentView.Body.[オブジェクト] a = fbxObj.text 'fbxObjの参照しているフィールドボックスの値を取りだしている というふうに記述します FieldBox型のオブジェクト変数を用意してSet分の後に代入式を続けます ややこしいですがこの違いを理解してください .[オブジェクト]の部分がオブジェクト名でそのまま記述できるなら .nameで名前を拾ったり、オブジェクト変数化したりする必要はないのでは? とこの単純なコードでは感じるかもしれません 確かにそのとおりです が、フォーム上のFieldBoxを配列化して一度に 扱ったりする場面でこの考え方が重要になりますので踏まえておいてください |
| nva さん、助かります & 勉強させてもらってます。 今回の説明で、「ロータススクリプト マニュアル」のわからなかった部分が 少し理解できました。 xyr さん、追加情報お待ちしてます。 |
| nvaさん すみません、返事が遅れました。 仕事が忙しくパソコンに火を入れている暇が無かったもので、ご勘弁を。 どうも勉強不足でいまいち理解できないのですが 私がやりたい事を書きますと For i = 1 To 9 DT1 = "項目" & i DT2 = "項目" & i + 1 CurrentView.Body.DT1.Text = CurrentView.Body.DT2.text Next i という事なんですが(これでは動作しないことはわかっております) オブジェクト名 "項目1" 中の数字部を増やして "DT1","DT2" の部分に代入したいのです。 >Dim fbxObj As FieldBox >Dim a as String > >Set fbxObj = CurrentView.Body.[オブジェクト] >a = fbxObj.text 'fbxObjの参照しているフィールドボックスの値を取りだしている を どんなふうに使えば実現できるのか わかりません。 なんか一から十まで聞いているようで申し訳ないのですけれど。 |
| >> xyrさん: >どうも勉強不足でいまいち理解できないのですが >私がやりたい事を書きますと > >For i = 1 To 9 > DT1 = "項目" & i > DT2 = "項目" & i + 1 > > CurrentView.Body.DT1.Text = CurrentView.Body.DT2.text >Next i > >という事なんですが(これでは動作しないことはわかっております) >オブジェクト名 "項目1" 中の数字部を増やして >"DT1","DT2" の部分に代入したいのです。 すいません、私の質問がややこしかったようです xyrさんのやりたいことは理解できますが、その方法よりも フォーム上に表示されるデータの規則がわかればFieldBoxで値を受け渡しするよりも QueryやResultSetという見えないオブジェクトを利用したほうが データの操作はかなり高速なので(データ量が多いほど)たベースの設計が どうなっているかを知りたかったのです >>Dim fbxObj As FieldBox >>Dim a as String >> >>Set fbxObj = CurrentView.Body.[オブジェクト] >>a = fbxObj.text 'fbxObjの参照しているフィールドボックスの値を取りだしている >を どんなふうに使えば実現できるのか わかりません。 この方法をループして使うにはフォーム上のFieldBoxが規則的に 配置されている必要があるのです フォーム上に置かれたFieldBoxやButtonなどは配置された順番で番号を隠し持ってます これを利用しますのでスクリプトで扱うことを考慮せずに作ったフォームでは かなり面倒なコードになったりします(フォームを作り直したほうが早いです) この方法は横道にそれそうですのでしばらく保留しましよう |
| nvaさん 早速のお返事 ありがとうございます。 いつもチェックしてくれてるのですね、頭が下がります。 私の書式では 実現不可能ということなのかな? >フォーム上に表示されるデータの規則がわかればFieldBoxで値を受け渡しするよりも >QueryやResultSetという見えないオブジェクトを利用したほうが >データの操作はかなり高速なので(データ量が多いほど)たベースの設計が >どうなっているかを知りたかったのです Query や ResultSet は、スクリプト初心者の私にとっては なんのことやらサッパリでして。 今、動作させているスクリプトは Athlon 700MHz の環境で 1.5秒ほどかかります、遅いです。 ちょっと話しがずれますが LSO は、LSSのように (Globals)内 64KBの束縛があるのでしょうか。 無いのであれば とりあえず目指す機能は実現できるのですけど。 ただスレッド最初に書いたように動作させる書式がわかってないんで 試すことすら出来てないのです。 あ〜情けない。 |
| >> xyrさん: >私の書式では 実現不可能ということなのかな? 実現不可能というよりは実現するにはフォームを再設計する必要があります どのように設計するかというとフォーム上に置かれたオブジォクとが スクリプトでどのように管理されているかを知った上で一つ一つ配置する必要があります >Query や ResultSet は、スクリプト初心者の私にとっては >なんのことやらサッパリでして。 >今、動作させているスクリプトは Athlon 700MHz の環境で >1.5秒ほどかかります、遅いです。 可視オブジェクトを一度に操作するとどうしても遅くなります >ちょっと話しがずれますが LSO は、LSSのように >(Globals)内 64KBの束縛があるのでしょうか。 >無いのであれば とりあえず目指す機能は実現できるのですけど。 LSOもLSSも64kの範囲外です ヘルプの 言語とスクリプトの制限 +コンパイラとコンパイルしたプログラム構造の制限 に %INCLUDE ファイルの内容を除いたスクリプト当たりの行数 最大値 64KB とあります また 実行可能なモジュールコードのサイズ 最大値 64KB とあるのでLSOやLSS自身が64kを超えてもアウトです 他にも制限事項が記載されてますので一度確認をしておいてください |
| nvaさん こんばんは。 もう一度 LSS を試してみました。 しかし、結果は同じくエラーでした。 ファイルサイズ 60KBほどの LSSを 3種類用意して %INCLUDE "C:\data\insert.LSS" という感じで 3個のスクリプトに使用したのですが 2個目までは問題ないのですが 3個目を記述すると 「最大の利用できるコードサイズを越えています」という 64KBオーバーのエラーが発生してしまいます。 LSSを使わず すべてスクリプト内に記述した時と同じ結果になってしまいました。 3個のLSSをどのように組み合わせても2個は OK で、3個は NG です。 (3個とも内容は異なります。) やはり %INCLUDE で参照するファイル内容は64KBにカウントされているとしか思えません。 |
| >> xyrさん: >ファイルサイズ 60KBほどの LSSを 3種類用意して > %INCLUDE "C:\data\insert.LSS" >という感じで 3個のスクリプトに使用したのですが >2個目までは問題ないのですが 3個目を記述すると >「最大の利用できるコードサイズを越えています」という >64KBオーバーのエラーが発生してしまいます。 >LSSを使わず すべてスクリプト内に記述した時と同じ結果になってしまいました。 >3個のLSSをどのように組み合わせても2個は OK で、3個は NG です。 > (3個とも内容は異なります。) ここまでくると実際のものを見てみないとなんとも回答ができませんね 考えられる原因をしらみつぶしにしていくしかないようです 申し訳ないです 私も複雑な処理は組むものの1モジュール64kを超えたことがないので 64kオーバー時のロータススクリプトエディタの動きや癖をよく知らないです 余談ですが・・・ ロータススクリプトエディタは結構アホなので無茶をすると固まったり 落ちたり、全然違うエラーメッセージを出したり、その他にも多くの癖を 抱えたツールです >やはり %INCLUDE で参照するファイル内容は64KBにカウントされているとしか思えません。 これですとxyrさんの行った実験では2つめのINCLUDEで超えていると思います 業務でお使いのアプリらしいので、ここで公開するわけにはいかないですしね ※ しつこいようで申し訳ないですがQueryやResultSetを使えば賞味30〜70行程度で 終わる処理のような気がしてならないです |
| nvaさん >しつこいようで申し訳ないですがQueryやResultSetを使えば賞味30〜70行程度で >終わる処理のような気がしてならないです そう思います、やりたい事は 非常に簡単なことなんですけどね。 読んできたフィールドデータを1つずつ、ずらして入力するだけなんですが。 私もしつこいようですけど QueryやResultSet というのが????で 理解できてませんから 悲しきかな それができないんですよねえ。 難しいなあ、初心者向けの解説書なんて無いようだし。 nvaさん は どのような本で勉強されたのでしょう? ロータススクリプトは いまや超マイナーな世界なんでしょうね。 マイクロソフトの陰謀にしてやられたって感じ。 メジャーなビジネス系ソフトは、ほとんどマイクロソフトというのが 私としては気にいらないのですよ。 .... このスレッドも長くなってきたし どうも私の勉強不足で nvaさんがアドバイスのしようが無くなってきたようですので いい加減 ご迷惑でしょうから このあたりで終了とさせてください。 単独で もう少し勉強してみますので。 行き詰まった時 また教えていただけると助かります。 |
| >> xyrさん: > nvaさん >私もしつこいようですけど QueryやResultSet というのが????で >理解できてませんから 悲しきかな それができないんですよねえ。 >難しいなあ、初心者向けの解説書なんて無いようだし。 >nvaさん は どのような本で勉強されたのでしょう? >ロータススクリプトは いまや超マイナーな世界なんでしょうね。 >マイクロソフトの陰謀にしてやられたって感じ。 >メジャーなビジネス系ソフトは、ほとんどマイクロソフトというのが >私としては気にいらないのですよ。 LotusScriptはMSのVB互換を目指して設計されたスクリプト言語ですので まずはMSの製品でVBAを理解するとLotusScriptのヘルプだけで 理解できるようになると思います >.... >このスレッドも長くなってきたし >どうも私の勉強不足で nvaさんがアドバイスのしようが無くなってきたようですので >いい加減 ご迷惑でしょうから このあたりで終了とさせてください。 >単独で もう少し勉強してみますので。 >行き詰まった時 また教えていただけると助かります。 力不足で申し訳ないです 今度バッチプロセスでのデータハンドリング(Connection Query ResultSetの利用) のサンプルを作って公開します |
| > 今度バッチプロセスでのデータハンドリング(Connection Query ResultSetの > 利用)のサンプルを作って公開します 期待しています。 私も、ずいぶん勉強になりそうです。 よろしければ、サンプルをダウンロードできるようにしたいと思います。 メールに添付してお送り下さい。 もちろん、強制ではありません。 nvaさんの自由意思でお決め下さい。 |
| nva さんからスクリプトのサンプルを提供していただきました。 下記のページからダウンロードすることができます。 http://www.geocities.co.jp/SiliconValley-Bay/5766/sample/smpls02.htm スクリプトの中に初心者用に詳しく説明がありますので、 とても参考になると思います。 nva さん、ありがとうございます。 |