驚くほどのパート5へようこそ blog役職 & webinar シリーズ! このシリーズでは、すべてのDominoアプリケーションの分析を支援します。

タイトル webinar このため blog投稿は「ソースコードの障害に気付いていなかったからといって、溝にたどり着かないでください」でした。

今回は、Dominoアプリケーションで分析する理由、内容、方法について説明します。

お困りの方は マーケティング Cookie を受け入れる このビデオを見るには 。

非開発者のための序文

開発者でない場合:次の紹介は、この投稿の残りの部分をよりよく理解するのに役立つ場合があります。

環境内のすべてのデータベースには、設計要素とコードが含まれています。 これは、その中のすべてのドキュメントを表示するためのものです。 それらを作成、編集、または読むためのものです。

ビューには、ドキュメントがリスト形式で表示されます。 これらは、ソートおよび/または分類することができます。 たとえば、日付、ユーザー名、またはそれぞれのアプリケーションとビューに適合するもので。

ビューに加えて、さらにXNUMXつのデザイン要素を強調する価値があります。 これらは、データベース内のドキュメントの作成、編集、または読み取りをサポートします。

  • ビュー内のアクション(通常、ビューの上部にあるボタンまたはメニューオプションから利用できます)
  • およびフォーム、およびフォームのフィールド

データベースは、さらに多くの種類の設計要素で構成できます。 それらのそれぞれは、次のプログラミング言語のXNUMXつまたは多くを使用できます。
@ Formulas、LotusScript、JavaScript、およびJava。

このコードも、さまざまなインターフェイスと依存関係を持つことができます。

  • その他のNotes / Dominoデータベース、
  • Microsoft ExcelやSAPなどの他のアプリケーション、
  • ファイルシステム–クライアントまたはサーバー上–、
  • オペレーティングシステム、
  • そして、他の多くの依存関係。

アプリケーションは、XNUMXつまたは複数のデータベースで構成され、XNUMXつまたは複数のサーバーで使用できます。 レプリケーションは、サーバー間で同じデータベースの同期を維持します。 これにより、地域やネットワーク全体で優れたパフォーマンス、負荷分散、高可用性が実現します。

アプリケーションの最適化、最新化、または移行を検討するときは、次のことを知っておく必要があります。

  • アプリケーションの複雑さ(設計要素の種類と数、およびコード行を考えてください)、
  • すべてのコードが何をするのか、
  • そして、コードがそれぞれのプロジェクトで扱いやすいかどうか。

それでは、なぜから始めましょう

ほとんどの開発者は、すべてのアプリケーションを自分で開発したわけではありません。 彼らがそうしたとしても(chapeau!)、それはおそらく「昨日すべて」ではなく、XNUMX、XNUMX年にわたって起こりました。 すべてのアプリケーションのコードをまだ十分に覚えていますか?

また、一部の企業には、Domino開発者さえいません。 何年にもわたって今日のアプリケーションランドスケープの構築を支援したすべての人は言うまでもありません。

次に、アプリケーションのソースコードを知ることは、Dominoでアプリケーションをそのまま実行/保守するのに最適です。

最後に、一般的には良い、悪い、醜いものではないにしても、すべての障害と役立つコードを見つけたいと思います。

アプリケーションを最適化、最新化、または移行する場合:

全体として、貴重な時間、欲求不満、落とし穴を自分で節約できたら素晴らしいと思いませんか? アプリケーションの利害関係者を知る、アプリケーションの設計とコードの分析と組み合わせると、はるかに強力になります。

利害関係者を知ると、次のこともわかります。

  • アプリケーションに加えた変更によって誰が影響を受けますか?
  • それらはどのように影響を受けますか?
  • 変更を開始する前に、誰に相談する必要がありますか?
  • あなたがしている仕事の恩恵を受けているのは誰ですか?

それは私たちに何をもたらします

「どのコードを分析する必要があるか」に飛び込む前に、次のことを覚えておいてください。 

コードを分析する前に考慮すべき他の多くの重要なデータポイントがあります。 

  • 最も使用され、最も複雑でないアプリケーションはどれですか?
    これらはすぐに報われます。 そして、誰も使用しないアプリケーションに時間を費やすべきではありません! 詳細については、も参照してください。 こちら & こちら
  • パフォーマンスまたはオフラインでの使用上の理由から、どのエンドユーザーがローカルレプリカを必要としますか? 
  • VIPまたは最も重要なプロフィットセンターはどのアプリケーションを使用していますか? 

これらは覚えておくべきほんの数例です–もっと見つけることができます ここ(スライド17〜21を参照)

では、どのコードを分析し、そこで何を探す必要がありますか? 

それのすべて。 期間。 *すべての*アプリケーション。 そしてそれらのそれぞれについて、それは意味します 

  • すべてのコード:@ Formulas、Java、JavaScript、LotusScript 
  • すべての設計要素(「コードコンテナ」を考えてください)。 これらには、フォーム、サブフォーム、ビュー、列、アクション、エージェント、ボタン、スクリプトライブラリなどがあります。 
  • 次の設計要素は、多くの場合、特別な注意を払う必要があります。
    XPages、Javaクラス、アプレット、Jarファイル、Webサービス、複合アプリケーション機能など 

両方のアプリケーション設計要素の適切な分析 & コードはXNUMXつの重要な質問に答えます: 

  1. すべてのコードはどこにありますか? どこですか? そして、それはどのような種類のコードですか? 
  2. そのコードは何をしますか?

次のXNUMXつの例は、設計とコードの両方を分析することの価値を示しています。 

a)アプリケーションのフォーム、フィールド、コードが多いほど、アプリケーションの最新化や移行に時間がかかります。 

b)Javaコードを使用するアプリケーションは、SharePointに移行するための理想的な候補ではありません。 はい、これは対応するコードが何をするかに部分的に依存します。 それでも、それはあなたがあなたのアプリケーションとprをランク付けするのを助けますevent 落とし穴。

WHAT コードで探す必要があります 

コードでの検索は、楽しいものからイライラするものまで、何でもかまいません。 

後 アプリのデザインをDXLにエクスポートする (Domino XML言語)、始めるためのXNUMXつのヒントを次に示します。 

  1. メモ帳などを起動して、結果を調べます。 最初の感触をつかむには、コードの一部を検索して、コードの一部を見つけてみてください。 また、ユーザー名、サーバー名などを検索します 
  2. OpenNTFのLotusScriptManagerまたはSourceSnifferをお試しください
    (Lotus Analyzerは使用しないでください!隠されたデザインと電話があります) 
  3. プロチャレンジ:DXLからNotesデータベースのドキュメントにコードをスライスします。 これにより、分類、検索、および後処理が容易になります(たとえば、設計要素をカウントするため)。 

上記のいずれかを試した場合、途中でいくつかの欠点に気付いたかもしれません。 

a)検索はコード内のコメント/コメントにも一致します 

b)@Db(Column OR Lookup)のような複合検索では、最初にプロチャレンジの上に取り組む必要があります
(=コードをNotes / DominoドキュメントまたはSQLデータベースにスライスします)。 個別に検索すると、結果が重複します。 これは、できるだけ少ないコードをレビューするというあなたの目的に反して非常にうまく機能します。 

c)検索は、探していなかったコードとも一致します。 例えば: 

  • 「開く」を検索すると、NotesDatabase [Object] .OpenとNotesStream [Object] .Openが見つかります。 
  • 「@DbLookup」の検索には、コードが存在するのと同じデータベースへの検索が含まれます。 ただし、他の/外部データベースへのルックアップのみが必要な場合があります。 または、結果にはODBCなどのNotes以外のルックアップも含まれます。 ただし、Notesルックアップのみを求める場合があります。 

だから、b検索を続ける前に、最適化する必要があります コー​​ド

良好な検索結果を得るには、すべてのコードからすべてのコメントを削除する必要があります。 はい、コメントは後でもう一度理解しやすくするためにコードに含めるとよいでしょう。 しかし、それらは検索結果を歪めます。 

次の図は、開発者がLotusScriptと@Formulasでコメントする方法を示しています。 

@Formulasでは、コメントはREMで始まり、その後に任意の量の空白(=空白またはタブ)が続きます。 次は、二重引用符または中括弧で囲まれた実際のコメントです。

無料でテストできるように、上記をすでに用意しています。

この記事全体は、独自の独立したアプリケーション分析を理解して実行するのに役立ちます。 それでも、貴重な時間を節約して、速く動きたいと思うかもしれません。 あなたがしなければならないのは すぐにプレイできるように登録する iDNA Applications サンドボックス。 あなたが登録したらすぐにあなたがする必要があるのはログインして私たちにナビゲートすることだけです 既製のインスタントコード検索。 確かに、それはあなた自身のアプリケーションを示しているわけではありませんが、コード検索がどのように機能するかについての良い考えをあなたに与えます。

テストには、「florian」、「vogler」、「server」、「/ acme」、「/ O = acme」、「workflow」を使用したテキスト検索を使用します。 また、「(?iw)@db(lookup | column)」のような正規表現検索を試してください。

それでは、アプリケーションのすべての(設計および)コードを*検索*するために、実際に何を調べてみましょう。

最適化したい場合

  • GetNthDocumentを検索する– GetFirst / GetNextDocumentよりも遅い
  • ハードコードされたサーバー名、ユーザー名、データベースファイル名、IPアドレス、電子メールアドレス、レプリカIDなどを検索します。
  • 古いコードを検索します(@ V2If、@ V3Username、@ V4UserAccess、@ UserPrivileges、@ IfError)
  • コードに依存しない:最も使用されている/人気のあるデータベースを見つけて、少し愛してください。 それらをより美しく、より現代的にしてください!

近代化したいなら

  • アプリケーションがNotesUI *クラスに大きく依存しているかどうかを確認してください。 これはWebブラウザーでは機能せず、いくつかの手直しが必要です
    ブラウザでサポートされていないコードを確認してください。 ヒント:「この機能はWebアプリケーションでは使用できません」のDesignerヘルプを検索してください。
  • ブラウザのサポートを示唆するコードはすでにたくさんありますか?
    つまり、@ WebDbName、@ BrowserInfo、@ ClientType、Domino @ DbCommands、…
  • アプリケーション/コードは印刷に依存していますか? それはブラウザからは難しいかもしれません
  • コードが動作するかどうかを分析する HCL Nomad
    • アプリケーションは XPages、Java、または ODBC に依存していますか? これは動作しません HCL Nomad.
    • アプリケーションはC-API呼び出しを使用しますか? はいの場合、コードはiOSとAndroidでも機能しますか?
    アプリケーションにはサードパーティのクライアント拡張機能が必要ですか?
  • コードに依存しない:最も使用されている/人気のあるデータベースを見つけて、少し愛してください。 それらをより美しく、より現代的にしてください!

移行したい場合

  • アプリケーションにはいくつのフォーム、フィールド、ビューなどがありますか? 最も複雑なものを最初に選択しないでください。
  • アプリは、それぞれのターゲットプラットフォームでうまく機能しないコードまたはデザイン要素に依存していますか?
    例:Java <> SharePoint、フォルダーが多すぎます<> SharePoint。 C-API。 プライベートまたはパブリックアドレスブック、メール(送信および)暗号化。 UseLSX、ODBC、DB2、DOS / cmd、OLE、ファイル、ディレクトリ、MIME、ドキュメントリンクなど。
  • アプリケーションは他のデータベースに依存していますか?
    他のデータベースに接続する@DbLookupsを考えてみてください(たとえば、server:filenameとして「」:「」を使用しないでください)。 New NotesDatabase、GetDatabase、.Open、.OpenWithFailover、.OpenIfModified、.OpenByReplicaID、[FileOpenDatabase]、[Compose]などにも同じことが言えます。
  • コードや移行に依存しない:残ったデータベースのXNUMXつに少し愛情を与え、より美しく、より現代的なものにします。

最後に、コードを最適に検索する方法を見てみましょう。

以下は本当に、本当に不気味なものです。 開発者でない場合は、このセクションをスキップしてください。

部分的には、(サブ)文字列だけでコードを検索しても、あまり遠くまで行かない理由についてはすでに説明しました。 多くの場合、一致が多すぎたり少なすぎたりします。 また、コードを検索する前に、すべてのコメントを削除する必要がある理由についても説明しました。

また、コードを検索する場合、次のことが非常に重要です。
どのように開発したかを考えてコードを検索しないでください。 もっと広く考えれば、他の人がどのようにコーディングしているかを知って驚くでしょう。

では、部分文字列の一致だけでなく、コードを検索するためのより良いアプローチは何ですか?

「*」(アスタリスク)などのワイルドカードをサポートするフルテキストインデックスを使用すると、ゲームをさらに進めることができます。 たとえば、「@ dbcolumn *または@dblookup *」を検索する場合–ただし、正確な否定はサポートされていません。 コード部分を正確に否定することは、たとえば、同じデータベースを指していない@DbLookupsのみを見つけるために不可欠です。

次の@DbLookupは、コードが実行されたのと同じデータベースからデータを検索します。これは、XNUMX番目のパラメーターとして「:」を使用して検索します。

次の@DbLookupは、「ローカル」アドレスブック(実行場所に応じてクライアントまたはサーバー)からデータを検索します。

「names.nsf」からデータを検索する@DbLookupを検索するのは非常に簡単です。 ワイルドカードだけでも:@dblookup(:“ names.nsf“)。 それはあなたがこのようなコードに出くわすまでです:

今、私たちは突然複数行にわたってコードを検索する必要があります–はい、そのようなコードを見てきました。

さらに悪化するのは、@関数はもちろんのこと、変数がパラメーターとして機能する場合です。

上記のコードは、同じデータベースからデータを検索します。 変数ht_filenameは、@ Subscription(@DbName; -1)の結果です。 これにより、コードが実行されるデータベースのファイル名が再び生成されます。

同様に、次のコード例は、ローカルアドレス帳からデータを検索します。

コードを検索するための最良の解決策は、コードを解析できるかどうかです。 これにより、上記の例のht_filenameの値を解決できます。 ただし、これに対する賢い解決策は見つかりませんでした。

スマートな解決策を見つけたのは、正確な否定を使用してコードを検索することです。

正規表現を使用します。

次の正規表現は大きな前進です。 これにより、実行元と同じデータベースからデータを検索しない@DbLookupを検索できます。

@dblookup([^;];(?!””(:””)?).*
@dblookup(開き角かっこは正規表現でエスケープする必要があるため、\(
[^;] *;次のセミコロンまで「セミコロン以外のもの」が続きます。

「。*;」の検索は、その表現が貪欲であるため、間違っています。 最後のセミコロンまで検索します。
(?!””(:””)?)次に「」を否定し、その後に別のオプションの:「」が続きます– XNUMX番目のパラメータは「」または「」のいずれかです:「」
.*行末まで

この例では、まだ微調整が必​​要です。

  • また、ほぼすべての場所で任意の量の空白をサポートします。
  • @dbnameまたは@subset(@dbname; 1):@ subset(@dbname; -1)が同じデータベースを使用する状況に対応します
  • クラスが「」または「メモ」である@DbLookupsのみを検索します(大文字と小文字は区別されません)

ボーナスポイントとして、LotusScriptEvaluatesで使用されている@dblookupsを見つけることもできます。 多くの場合、引用符もエスケープする必要があります。

上記のすべての要件(コード解析を除く)に一致する正規表現は…おそらく、今日目にする最も醜いものです。 

私は何時間も続けることができました

あなたが上記の本当に不気味なものを通り抜けたなら:私の帽子はあなたにオフです! あなたはスーパーヒーローの開発者であり、正規表現のサバイバーです。

すべての読者にとっての朗報は次のとおりです。 panagenda すでにかなりの重労働を行っています。 そして、私たちは共有が大好きです。

あなたが私たちを見てみると iDNA Applications サンドボックス、あなたが見つかります 70以上の既製の正規表現。 これらは、300を超えるさまざまなコードの結果を検索します。 これらすべてのパターンを独自のコード検索ソリューションで無料で使用できます。

また、正規表現を使用するよりも賢いアイデアがある場合や、新しい正規表現や改良された正規表現を思いついた場合に備えて、お知らせください。 community.

自分で作成する時間がない場合 コード 検索ソリューション:

役立つサードパーティのソリューションが数多くあります。 それらのいくつかはOpenNTFで利用可能です。 それらのいくつかは、私たち自身のような商用ソリューションです panagenda iDNA Applications.

まとめて

アプリケーションを適切に分析することは、次のXNUMXつの主要な目標に役立ちます。

  • (多くの)時間、欲求不満、お金を節約する
  • 正しいことに焦点を合わせ、知ること
  • Dominoランドスケープの変換を成功させる

最適化、近代化、または移行

  • 何をするにしても、Dominoアプリケーションの少なくともXNUMXつに愛を与えることを忘れないでください。 それはあなたに返済します。 多くのti

次のシリーズ

進捗報告。 それらはすべてのプロジェクトの一部であり、制作するのは楽しいものではありません。 あなたが共有しなければならないのはあなたの進歩だけではありません。 また、プロジェクトチームに仕事をするために必要なデータを提供する必要があります。 調整するのは難しく、終わりはありません。 しかし、成功を報告するとき、進捗レポートはあなたの友達になることができます!

移行および近代化プロジェクトは非常に費用がかかり、非常に注目を集めています。 最初から、たくさんの目があなたに向けられます。 期待は高いでしょう。 プロジェクトが失敗しないようにするにはどうすればよいですか? 時々あなたはできません。 一部のプロジェクトは、開始する前に運命づけられています。 行く前に知っておくべきです。

これからは、私たちが取り組んでいるアプリケーションの輪が継続的に拡大していきます。 各ステップはよりコストがかかり、慎重な計画はこれまで以上に大きな利益をもたらします。

このシリーズについて:

世界中の多くの企業が HCL Notes/Domino* 長年。 彼らはその関係から来る多くの利点を知っています。 さらに、Notes / Dominoは、プロセスとその動作の中心にあります。 これらすべてにもかかわらず、世界中のIT意思決定者は、Notes / Dominoが役割を減らすか、まったく役割を果たさない未来を想像し始めています。

*以前のIBMNotes / Domino