こんにちは、開発担当の米原です。

本日は最近XPages開発でハマった時のお話です。

現象

設計の編集などしていると、XPageとカスタムコントーロールの設計が開かなくなり
設計をクリックしても、下のようなエラー画面が表示され設計の中身が見れなくなりました。

設計は開かないが、生成したWebページは設計通りの画面が開きました。

設計

Xpage : xpTest001

<?xml version=”1.0″ encoding=”UTF-8″?>
  <xp:view xmlns:xp=”http://www.ibm.com/xsp/core” xmlns:xc=”http://www.ibm.com/xsp/custom”>
 <xp:this.resources>
  <xp:styleSheet href=”/test001.css”></xp:styleSheet>
  <xp:styleSheet href=”/test002.css”></xp:styleSheet>
 </xp:this.resources>
 <xc:ccTest001></xc:ccTest001>
</xp:view>

CstomControl : ccTest001

<?xml version=”1.0″ encoding=”UTF-8″?>
<xp:view xmlns:xp=”http://www.ibm.com/xsp/core” xmlns:xc=”http://www.ibm.com/xsp/custom”>
 <xp:table styleClass=”tbl_001″>
  <xp:tr>
   <xp:td styleClass=”bk_001″>
    styleClass=”bk_001″
    <xp:inputText id=”inputText1″></xp:inputText>
   </xp:td>
   <xp:td>
   </xp:td>
   </xp:tr>
  <xp:tr>
   <xp:td></xp:td>
   <xp:td styleClass=”bk_002″>
    styleClass=”bk_002″
    <xp:inputText id=”inputText2″></xp:inputText>
   </xp:td>
  </xp:tr>
 </xp:table>
</xp:view>

style sheet : test001.css

.bk_001{
background:rgb(255, 0, 0);
}

.bk_002{
background:rgb(0, 256, 0);
}

.tbl_001 {
width: 90%;
text-align: center;
border-collapse: collapse;
border-spacing: 0;
margin: 50px 50px;
}
.tbl_001 th {
padding: 10px;
background: #e9faf9;
border: solid 1px #778ca3;
}
.tbl_001 td {
padding: 10px;
border: solid 1px #778ca3;
}

どこが原因だったのか

原因ですが

カスタムコントロールの ccTest001内でセットしている
styleClassに設定していました styleClass=”bk_002″ が原因でした。

.bk_002{
background:rgb(0, 256, 0);
}

すごい単純なミスなのですが、RGBの範囲ですが、 0~255 でして、256はダメですね。
今回はWebの画面もちゃんと、緑色も出ていましたので、なぜか設計のみ開くことが出来なくなる現象となりました。

エラー内容が表示されず分からない所だったので、初めはDBがつぶれたかと思い、
再度作成し直したりしたりと色々試行錯誤しておりました。

原因さえ分かれば大したことではないのですが、なかなかはまってしまいましたので、似た様な所でお困りの方がいましたら、参考にしていただければと思います。

設計が開かなくなったら、XPageならまずその中に含有されいるカスタムコントロールを疑い、簡易化しながらどこが怪しいか切り分けて、カスタムコントールに問題が無い場合はその中で呼んでるカスタムコントロールを除外や、今回の様にカスタムコントロール内で使用しているスタイルシートなどを疑っていくと原因が見つけやすいかと思われます。

あとですね、今回はNotesのV9で発生しておりまして、今回のブログを書く際に、V12でも試してみましたら、
何とちょっと画面がかわっておりまして、もう少しエラーが詳しく表示されていました。

エラー内容に

java.lang.IllegalArgumentException: Argument not valid
at org.eclipse.swt.SWT.error(Unknown Source)
at org.eclipse.swt.SWT.error(Unknown Source)
at org.eclipse.swt.SWT.error(Unknown Source)
at org.eclipse.swt.graphics.RGB.<init>(Unknown Source)
at com.ibm.etools.xve.renderer.internal.style.CSSColorUtil.stringToRGB(Unknown Source)

CSSのRGBあたりに何かしら問題があるよ的なものがでていますね。
V12ならもしかしらすぐ解決できていたかもしれません。

NotesDominoも進化し続けているので、バージョンを上げる方がより快適に開発できそうですね。

今回はテスト的に単純な設計を作成してでしたが、
実際ハマった設計はもっと複雑なものでして数時間ハマりました。。。

参考にしていただければと思います。

それでは今日はこの辺で失礼いたします。

こんにちは開発担当の米原です。
今回は、日時をユリウス日(ジュリアン日)に変換しないといけないケースがありましたので、その時の備忘です。

ユリウス日(Julian Day、JD)とは

ユリウス暦紀元前4713年1月1日の正午(世界時)からの日数です。
ユリウス日は、日付が長期にわたり連続するため、日数計算やさまざまな暦の関連付けなど、幅広く使われています。

サンプルコード(XPages サーバサイドJavascript)


//ジュリアン日変換
function funcToJulianDay(p_year, p_month, p_day) {
    //月が1月または2月の場合、前の年の13月または14月とみなすみたい
	if (p_month <= 2) {
        p_year -= 1;
        p_month += 12;
    }
    var jDay = 0;
    var seireki = 0;
    var correct = 0;

    //指定された年の世紀部分
    seireki = Math.floor(p_year / 100);
    
    //400年周期での閏年の補正
    correct = 2 - seireki + Math.floor(seireki / 4);

    // 年を365.25日と見なし計算
  //基準年である紀元前4713年からの年数をプラス
  //月の部分を日数に変換(30.6001 を掛けることで、月の平均日数(約30.6日)を使って月数を日数に変換)
    //日の部分をそのまま加算   1524.5(基準日(紀元前4713年1月1日正午)との補正)
    jDay = Math.floor(365.25 * (p_year + 4716)) + 
	   Math.floor(30.6001 * (p_month + 1)) + 
			p_day + correct - 1524.5; 

    return jDay;
}
//呼び出し元サンプル(今日の日付を取得し変換)
function test001(){
	try{
		var year = 0;
		var month = 0;
		var day = 0;
		
		var dt:Date = @Today(); // 今日のの日時を取得してみる
		year = dt.getFullYear();
		month  = dt.getMonth() + 1;
		day = dt.getDate();
		var julianDay = funcToJulianDay(year, month, day);

		print("ユリウス日:", julianDay);
		
	}catch(e){
		print("Error in test001:"+e)
	}
}

参考にどうぞ。

こんにちは、米原です。
本日は9月に開催される、Notes/Dominoイベント  DominoHub2024 Osaka のご紹介です。

DominoHubと言えば6月に東京で開催されましたが、なんと9月19日(木)に大阪で開催されます!

今回のテーマは!

「Immersive experience/没入型体験」

新しい機能を直に触って確認することも出来る様に展示ブースもご用意してます!

HCL Dominoは企業の業務効率化やコラボレーションの促進に貢献してきた信頼にあるソフトウェアです。
DominoHubでは、これまで以上にDominoの可能性を引き出し参加者に楽しさと驚きを提供します。

まずは日程等の情報です。

  • 日程:2024年9月19日(木)
  • テーマ:「Immersive experience」~最新Dominoの没入型体験~
  • 主催:HCLアンバサダー & 有志メンバー
  • 費用:無料(事前登録制)
  • 場所:プレミアホテル-CABIN PRESIDENT-大阪
    • 大阪市北区南森町1丁目3-19 2階・開場:9時30分、10時00分 開始~17時00分 終了(予定)
  • 懇親会:(会場未定、無料):17時30分開始~19時00分終了(予定)

こんな人におすすめ!

  • Notes/DominoDominoの新しい機能を直に触って確認してみたいユーザー
  • Notes/Dominoを継続的に積極利用するユーザー
  • Notes/Dominoから移行検討、情報収集をしているユーザー
  • Notes/Dominoから移行をして問題を抱えているユーザー

地図

大阪府大阪市北区南森町1丁目3−19

今回のDominoHubの注目ポイント

その1

今回のイベントは現地のみの開催です。

Webでの配信はございませんのでぜひ現地にてご参加ください!

現地だけでしかお話できない内容も聞けるかも。。。

1日だけですが、濃厚な内容になっています。

セッション内容

その2

展示ブースがあります

新しい機能を現地で触って確認しただける展示スペースもご用意しています!

展示ブースでは新しい機能をご体験できます。

展示内容

その3

ランチセッションもご用意!

ランチ付きのセッションです。ランチを食べながらセッションを楽しめます!

今回はどんなランチでしょうか。。。

その4

イベント最後には懇親会もご用意していますので一緒に楽しみましょう。

色々な話を聞けるチャンスです!

皆様とお話出来ることを楽しみにしております

当日はHCLAmbasadorも大勢参加予定です。皆様とお話出来ることを楽しみにしております。

ご興味を持たれた方、ご参加されてはどうでしょうか?

DominoHub詳細・申込はこちら

それでは皆様のご参加をお待ちしております。

こんにちは。ケートリックの米原です。

今回はNotes Domino の体験型ウェビナーのご案内です。

主催と協賛は

主催:Misc Workshops OSAKA 協賛:ノーツコンソーシアム

となっております。

日時は2024/05/30(木) 14時~15時半(予定)に開催されます!

開催方法はWeb会議方式となっております。

今回は体験型となっていまして、スマホ、カメラ、GPS、などの機能もDominoだけで作成したアプリで体験するいい機会です!

その道のプロフェッショナルが手厚く説明していただけるとのことです!そして無料です。。。。

それでは、少しでも興味を持たれたら参加してみてはいかがでしょうか。

今回のウェビナーの詳細はこちらから

 

今回協賛である、HCL Notes / Domino日本最大のユーザーコミュニティでも色々な情報が手に入りますよ。

詳しくはこちらから

 

そして今回の講師はノーツコンソーシアムの大阪研究会のメンバーです。

そんな大阪研究ご興味がありましたら研究会も参加してみてはどうでしょうか?

非会員の方でも大歓迎です。

そんな大阪研究会の情報はこちらから

 

ではでは、今回はこの辺で失礼します。

こんにちは。米原です。

今回はイベントのご案内です。

ノーツコンソーシアムの大型イベントが2024/02/16(金)に開催されます!

ノーツコンソーシアムは、HCL Notes/Domino 日本最大のユーザーコミュニティです。
もちろん弊社ケートリックもコミュニティに参加しています!

 

ノーツコンソーシアム FESTA 2024

開催日時:2024年2月16日(金):14:30~17:45 (受付開始:14:15~)
開催会場:アキバプラザ(東京千代田区)6F セミナールーム3
参加費:無料、事前申込不要

・ノーツコンソーシアム会長挨拶・基調講演
・研究会発表
・HCLジャパン Notes/Domino 35周年とV14など
などなど色々ないい話が聞けるはずです!
弊社のメンバーも発表予定ですよ。

詳しくはこちらを

https://www.notescons.gr.jp/home.nsf/event.xsp?action=openDocument&documentId=E327A212EDD66A6B49258A6A002F4B1E

ノーツコンソーシアム 30周年記念イベント

開催日時:2024年2月16日(金):18:00~20:00 (受付開始:17:45~)
開催会場:アキバプラザ(東京千代田区)5F レセプションホールAB
参加費:無料、事前申込制

ノーツコンソーシアム30周年、Notes/Domino35周年となり、皆様でお祝いするイベントとなります。
皆さんで集まってお祝いしましょう!

こちらは事前申込が必要ですのでご注意を!!
お申込みはこちらから イベントの詳細もご確認できます。

https://30anniversary.notescons.gr.jp/

 

それでは、現地でお会いできることを楽しみにしております!

XPagesリッチテキストコントロールのカスタマイズ

XPagesのリッチテキストコントロール カスタマイズ

Notes/Dominoエンジニア XPages担当の米原です。

まだまだ現役でXpagesの開発を行っています!
最近行き詰まったところがありましたで備忘としてブログに残すことにしました。

リッチテキストの入力高さを固定(縦スクロール付き)方法

リッチテキストを画面に配置したのですが、文字を入力して改行していくと、
自動で入力枠が縦に広がり結構縦に長くなり1画面の領域を結構占領してしまいます。
どうにか縦の幅を狭くしたいと思いました。

入力をするとどんどん広がって他の項目が見えなくなったりします。

Dojo属性を追加することによりCKEditorのConfig値を変更しました。
autoGrow_maxHeight:縦幅の広がった際の最大値

こんな感じで最大枠を指定できます。長くなる場合は縦のスクロールバーが機能します。

ツールバーを消す方法

今回の場合上のツールバーも不要なので消したいと思います。

同じように、今度は nameに toolbar 、valueに [[]]  これで上のツールバーは消えます。

この様にしてすっきりしました!
ここで「tootbar」 の「value」 に表示したいアイコンを選択することも可能です。

詳しくはこちらを参照してください↓
https://www.ktrick.com/xpages-richtext-ckeditor-toolbar-customize/

設定値などは、こちらを参考にしました。
https://docs-old.ckeditor.com/ckeditor_api/symbols/CKEDITOR.config.html

また色々と試したいと思います!


DominoV9→DominoV12 バージョンアップでXpagesエラーが発生した件

こんにちは。Xpages担当の米原です。

本日はXpagesでDominoV9からDominoV12にバージョンアップした際にハマったエラーの回避方法についてのお話です。

V9のサポート期日が迫っていまして、V12に更新されるお客さんが増えてきています。
そう、NotesDominoはどんどん進化してその都度便利な機能が追加されています!
V9で終わりではないですよ!!!

リリース情報その1

リリース情報その2

安心してNotes Domino 使い続けましょう。

さてさて本題に戻りまして

今回発生した問題はこちらの機能です。

  1. ボタン押下でダイアログを表示
  2. ダイアログ内で処理を実行(入力フィールドの値などセット)
  3. ダイアログ内で更新したものをダイアログを閉じるときのイベント(onHide)で部分更新

    OKボタンで更新するのは、OKボタンのイベントに処理を追加で可能なのですが、
    「x」ボタンが押された時にも反映したい場合があり、そのためにonHideイベントに部分更新のIDをセットしそのエリアを更新するように使用していました。

ここで、最後の「×」やOKでダイアログを閉じる際に、onHideが機能するのですが、
何とエラーになってしまってます。。
V9では大丈夫だったのに、V12ではこの使い方はダメなようです。

簡単なサンプルで確認したらこのようなものになります。

ダイアログ起動ボタン押下でダイアログ起動

「×」ボタン押下

エラー発生となります。

設計はこのようなものです

	<xe:dialog id="dlgTest" title="入力用ダイアログ">
		<xp:panel>
			ボタン押下で値がセットされ、×ボタンで値が更新します。<br/>
			<xp:button value="値をセット" id="button5">
				<xp:eventHandler event="onclick" submit="true">
					<xp:this.action><![CDATA[#{javascript:getComponent("testText").setValue("値がセットされました。")}]]></xp:this.action>
				</xp:eventHandler>
			</xp:button>
			<xp:button value="値をクリア" id="button1">
				<xp:eventHandler event="onclick" submit="true">
					<xp:this.action><![CDATA[#{javascript:getComponent("testText").setValue("値がクリアされました")}]]></xp:this.action>
				</xp:eventHandler>
			</xp:button>
		</xp:panel>
		<xp:eventHandler event="onHide" submit="true" refreshMode="partial" refreshId="testPan" disableValidators="true">
		</xp:eventHandler>
	</xe:dialog>

色々と調べた所、、、

どうも部分更新のエラー処理がV10から変更されているようでその影響の様です。

こちらに情報がありました 参考URL

回避策として、

Xspプロパティに「xsp.error.disable.detection.set01=true」をセットすることで
V9.0.1でのエラー処理に戻すことが可能です。

それでは、Xspプロパティを更新した状態でもう一度実行すると

「値をセット」ボタン押下後に、「×」ボタン押下すると

「値がセットされました。」と文言が更新されました。期待通りの動作です。

似た様な現象が発生した場合は参考になればと思います。

それでは本日はここまでで。


XPagesで同じカスタムコントールを使用する場合のID被りへの対処法

Notes/Dominoエンジニア XPages担当の米原です。

今回もXPagesのお話です!

共通して使用しているカスタムコントロールを同ページで複数使用する必要がある場合、

例えばこんなパターン

<xp:panel>
	<xc:ccFormSample02>
		<xc:this.rendered><![CDATA[#{javascript:param.get("paramTEST") == "01"}]]></xc:this.rendered>
	</xc:ccFormSample02>
	<xc:ccFormSample02>
		<xc:this.rendered><![CDATA[#{javascript:param.get("paramTEST") == "02"}]]></xc:this.rendered>
	</xc:ccFormSample02>
</xp:panel>

「ccFormSample02 」カスタムコントロールをURLパラメータの値で表示/非表示の切り替えを行っています。

↑ paramTEST=01 の場合
↑ paramTEST=02 の場合

今回は設計が複雑ではない簡単なカスタムコントロールを用意しましたが、実際運用される場合はもっと複雑

で複数配置を目的としたカスタムコントロールがあるかと思います。

例えばこのようなときが想像できます。

カスタムコントロールA(共通して使用したい。)

画面の表示をURLパラメータで切り替えている場合

画面Aでは「カスタムコントロールA」情報が重要になるので一番上に表示させたい。

画面Bでは「カスタムコントロースA」情報はあまり重要ではないので一番下に表示させたい。

そのような場合に同じカスタムコントロールを同画面に配置してURLパラメータで切り替えることで実装したりします。

表示・非表示切り替えで対応する場合に問題になるのが、IDの問題です!
今回は共有箇所のInputTestフィールドにIDを付与していてそのIDを元に値をセットしている場合があります。

<xp:tr>
	<xp:td styleClass="tblHead">
		<xp:label id="label2"
			for="orderNumber1">
			<xp:this.value><![CDATA[#{javascript:
var ret = "";
ret = "共通箇所"
return ret;}]]></xp:this.value>
		</xp:label>
	</xp:td>
	<xp:td>
		<xp:inputText id="test001"></xp:inputText>
	</xp:td>
</xp:tr>

id="test001" 箇所ですね。

例えば初期値に値をセットさせたい場合でこのように値をセットしている場合

	<xp:this.afterPageLoad><![CDATA[#{javascript:
getComponent("test001").setValue("test");
}]]></xp:this.afterPageLoad>

「 getComponent("test001").setValue("test"); 」このような方法で表示の値をセットすると、

結果的には

↑ paramTEST=01 の場合
↑ paramTEST=02 の場合

paramTEST=01 の場合 は初期値に 「test」がセットされていますが、 paramTEST=02 の場合 は値がセットされていません。

これはIDが被っているので最初に見つけた所のIDにセットされるようになります。

もう少し詳しく説明しますと、 getComponent("test001") .setValue("test") とすると、最初の id="test001"が取得されて、そちらに値がセットされてしまいます。

非表示の方法としてrenderをfalse にしたり、 style に display:none をして非表示にしたりしますが、 getComponent では非表示にしても取得されていまうので、そのような現象になってしまいます。

さてさて、どうしたものかな~と。。。。

そこで活躍するのが「loaded」です!

<xp:panel>
	<xc:ccFormSample02>
		<xc:this.loaded><![CDATA[${javascript:param.get("paramTEST") == "01"}]]></xc:this.loaded>
	</xc:ccFormSample02>
	<xc:ccFormSample02>
		<xc:this.loaded><![CDATA[${javascript:param.get("paramTEST") == "02"}]]></xc:this.loaded>
	</xc:ccFormSample02>
</xp:panel>

loaded は ページ作成時にコントロールを作成するかどうかですので、どちらかのカスタムコントールしか作成されなくなり、IDが被ることが無く期待した動作になるということになります。

loadedを使用した場合のparamTEST=02

無事期待する動作となりました。

今回のパターンでは 「rendered」では都合が悪く、「loaded」を使用しましたが、「loaded」は一度「false」にしてしまうと、ページ全体をロードしなおさないと表示の切り替えができません。「rendered」に関しましては、部分更新で表示/非表示の切り替えが可能となります。

両方使える場合では「 loaded 」が「false」の場合はカスタムコントロールを一切読み込まないので、余分にメモリを消費しないことや処理速度も 「rendered」 に比べて早いのではないかと考えられます。

用途に合わせて使うのがよろしいかと思います。

似た様なことでお困りの際はお試ししてください。

ではでは本日はこの辺で失礼いたします。


Domino DesignerでXPageを開いた際に開くのが遅い時の対応

Xpagesの設計をDesignerで開いた際に遅い件

Notes/Dominoエンジニア XPages担当の米原です

設計をDesigerで開いた際におそい~と思ったことはないでしょうか??

設計が少ない場合はそうでもないのですが、
より複雑になった場合、カスタムコントロールの数が多くなっていきだんだん遅くなりますよね。

回避策としまして

  • 冗長な処理をなくす
  • DBを分ける
  • PCのスペックを上げる。メモリ増幅 ^^;

などが考えられます。

ここでは取り上げる方法は、Desigerで設計を開いた際により早く開くことができるのと、
やりようによっては設計が見やすくもそうでなくもなります。

今回は1つのカスタムコントロールに5個のカスタムコントロールをセットしているもので試してみます。
これくらいなら特に遅くもならないのですが、実運用しているものでしたら、カスタムコントールの中に
カスタムコントロールはいっぱい入っているケースがあり、特にリピートコントロールは遅く成る要員の一つです

カスタムコントロール ccFormMain02

上図ではどのようなコントロールが配置されているとかがすぐわかるのでいいのはいいのですが

①のカスタムコントロールを開きまして、プロパティの設計定義を開きます。
そこに、XSPの形式で入力します。テスト的に下図のように設定します。

設定後に再度ccFormMain02を確認すると
test と表示されます。
ん、、、、見にくい

コメントは少し装飾しました。うんいい感じです

マークアップ式はこんな感じです↓

<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core" xmlns:xc="http://www.ibm.com/xsp/custom"
    xmlns:xe="http://www.ibm.com/xsp/coreex">
	<div style="border: 2px solid #A9A9A9; padding: 3px; margin: 5px;">
		<h1>添付用のリッチテキスト</h1>
		<div>
			フォームA,Bで使用予定
		</div>
	</div>
</xp:view>

こんなふうに全て記入すると。。。

見やすくなりましたね、マークアップ箇所は基本のHTMLで記入するだけなのでお好みいに合わせて
カスタマイズできます。

ということで、見やすくなりました。めでたしめでたし!

あれれちょっと待った~表示が変わっただけなのでは、、、、

と思いきや、これで設計を開くときには今回のマークアップの設計定義を読み込むので
設計は格段に速く開くことが可能になります。

さすがに今回のサンプル的なのでは速さは体感できませんが、カスタムコントロールが増えて
複雑化してきたら結構ストレスがたまる位に起動が遅く成りますのでその際には体感できるかと思います。

それでは今回はここまでとします。


【11/26(金) 13時30分配信】HCL&ケートリック&ライブネス 共催ウェビナー~Microsoft 365連携したドミノアプリの活用事例~のご案内

11/26(金) 13時30分〜配信

HCL&ケートリック&ライブネス 共催ウェビナー

~Microsoft 365連携したドミノアプリの活用事例~

本セミナーでは、HCL、ライブネス、ケートリック3社による、各社製品紹介を含めた、ドミノとMS365の連携事例をご紹介いたします。

弊社ケートリックからは、ドミノ ローコード・プロコード開発環境 consentFlow による、

  • お客様活用事例
  • ワークフローアプリのAzureAD / MS Teams連携
  • 待望の機能!ノーツアプリ モダナイゼーション

をご紹介。

講演最後にはケートリック主催セミナーらしく、時間の許す参加者様とのゆる~い質疑応答の時間も用意しておりますので、是非ご参加ください。

- 日程: 2021年11月26日(金) 13:30 - 15:00
- 会場: Webセミナー
- 主催: ケートリック株式会社
- 費用: 無料(事前登録制)
- 詳細・お申し込み: ->
https://us02web.zoom.us/webinar/register/WN_-nenV5NcR86xTOpgh0UVnA


【セッション 1】
「待望の機能が充実!アプリ開発ツールconsentFlowの新機能紹介」

AzureADによるMS TeamsからのSSO認証、consentFlow APIによる既存データ連携、ノーツアプリWEB化等、consentFlowの新機能を事例を交えてご紹介

講師: ケートリック株式会社 代表取締役 田付和慶


【セッション 2】
「ベストなDominoの使い方」

MS365/Teamsと連携した情報ポータル『LIVENESS PORTAL』と会議室を効率良く使う方法のご紹介

講師:株式会社ライブネス 代表取締役 赤松康司


【セッション 3】
「Notes/Domino最新動向とお客様事例」

MS365を採用しつつ、Domino継続・活用したポイント

 講師:株式会社エイチシーエル・ジャパン                                           ビジネスパートナー&ブランドストラテジー 鴨志田 喜弘