カスタムコンポーネント

nexacro platformでは、基本的にユーザーが必要とするコンポーネントを提供しています。但し、ユーザー環境によって特化した機能を必要とする場合があります。こういう場合は、当社のパートナー開発会社や開発者が作成したカスタムコンポーネントを使用するか、直接必要な機能を追加したカスタムコンポーネントを作成することができます。

今回の章では、ユーザーコンポーネントが提供される形式と、それを使用する方法についてのガイドを提供します。

カスタムコンポーネントを作成するためのガイドは、パートナー開発会社に一部提供されており、今後、すべてのユーザーに提供される予定です。

この文書では、カスタムコンポーネントを作成する具体的な方法については説明せず、すでに開発されたカスタムコンポーネントを適用する方法のみ説明します。

カスタムコンポーネント構成

カスタムコンポーネントは、下記のような形式で構成されます。カスタムコンポーネントは、プロトコルアダプタでモジュールとプロトコルを登録する方法と似ていますが、やや違います。

カスタムコンポーネントは、構成によって提供されるファイルの数が異なりますが、基本的に提供されるファイルは3つあります。

  1. モジュールファイル (*.json)

  2. オブジェクト情報ファイル (*.info)

  3. コンポーネントスクリプトファイル (*.js)

モジュール(Module)登録

プロジェクトフォルダ内のdefault_typedef.xmlファイルを直接変更したり、[Edit TypeDefinition>Modules]ウィンドウで該当する項目を追加します。

登録するモジュールとスクリプトは、nexacro studioでBase Lib Pathに指定されたパスの下の[component]フォルダーのサブパスにファイルが必要です。

デフォルト設定は、nexacro platformインストール·パスの下にnexacro14libフォルダです。

Base Lib Pathは、[Tools> Options> Environment> Build> Base Lib Path]で別のパスに変更することができます。

モジュールは、以下のような形でJSONファイルを作成します。「scripts」、「objInfo」項目に指定されたJavaScriptのパスは、[Base Lib Path> component]フォルダの下に該当フォルダとスクリプトファイルが必要です。

{
"name": "ExtComp",
"version": "14.0.0.0",
"description": "nexacro platform Common Component Library",
"license": "",
"scripts": [
"ExtComp/ExtCombo.js"
],
"objInfo": [
"ExtComp/ExtCombo.info",
"ExtComp/ExtEnum.info"
]
}
//@ sourceURL=ExtComp.json

プロトコルアダプタと異なる点は、カスタムコンポーネントで提供されるプロパティ、メソッド、イベント、Enumの関連情報を「objInfo」項目に設定しています。

<Module url="ExtComp.json"/>

オブジェクト情報

nexacro.ExtComboコンポーネントは、モジュールの設定時に「ExtCombo.info」、「ExtEnum.info」の2つのObjInfoファイルを設定します。「ExtCombo.info」ファイルは、コンポーネントに必要な情報を含んでおり、「ExtEnum.info」ファイルは、Enumプロパティに関する情報を含んでいます。 Enumプロパティ情報は、用途によってコンポーネントinfoファイルに含めたり、別のファイルとして作成できます。

nexacro studioはObjInfoに指定されたファイルの内容によってコンポーネントを追加し、[プロパティ]ウィンドウに情報が表示され、実際に実行されるアプリケーションの動作は、scriptsに設定されたJavaScriptファイルに定義された内容によって処理されます。

ExtCombo.infoファイルで追加またはオーバーライドされた項目は下記の通りです。詳細については、完全なコードを参照してください。

提供されたコードは、理解を助けるために提供されており、特定の機能を実行するための用途ではありません。

<?xml version='1.0' encoding='utf-8'?>
<MetaInfo version="1.0">
	<Object id="nexacro.ExtCombo"> 

		<!-- define extend component based nexacro.Combo -->
		<ObjectInfo 
			inheritance="nexacro.Combo"
			typename="nexacro.ExtCombo"
			csstypename="ExtCombo,ExtComboABC[userprop='abc']"
			csscontrolname="ExtComboControl,ExtComboControlABC[userprop='abc']"
			group="UIComponent"
			csspseudo="true"
			container="false"
			composite="true"
			tabstop="true"
			cssstyle="true"
			contents="true"
			formats="false"
			contentseditor="auto"
			defaultwidth="300"
			defaultheight="200"
			requirement="Runtime,HTML5"
			description=""/> 
		
		<PseudoInfo> 
			<Pseudo 
				name="pushed" 
				control="true" 
				deprecated="false" 
				unused="false" 
			/> 
			<Pseudo 
				name="focused" 
				control="true" 
				deprecated="false" 
				unused="true" 
			/>
		</PseudoInfo> 

		<ControlInfo>
		</ControlInfo>


		<PropertyInfo> 
			<!-- define new property -->
			<Property
				name="userprop"
				group="Misc"
				type="Enum"
				defaultvalue="abc"
				readonly="false"
				initonly="false"
				hidden="false"
				control="false"
				style="false"
				expr="false"
				deprecated="false"
				unused="false"
				objectinfo=""
				enuminfo="enum_ext_test"
				unitinfo=""
				requirement="Runtime,HTML5"
				description="this is desc"
			/>
			<!-- re-define super's property -->
			<Property
				name="tooltiptext"
				group="Misc"
				type="String"
				defaultvalue="1111111"
				readonly="false"
				initonly="false"
				hidden="false"
				control="false"
				style="false"
				expr="false"
				deprecated="false"
				unused="false"
				objectinfo=""
				enuminfo=""
				unitinfo=""
				requirement="Runtime,HTML5"
				description="this is desc"
			/>
			<!-- define new style property -->
			<Property
				name="itemopacity"
				group="Style"
				type="Opacity"
				defaultvalue=""
				readonly="false"
				initonly="false"
				hidden="false"
				control="false"
				style="true"
				expr="false"
				deprecated="false"
				unused="false"
				objectinfo="nexacro.Style_opacity"
				enuminfo=""
				unitinfo=""
				requirement="Runtime,HTML5"
				description="this is desc"
			/>
		</PropertyInfo> 

		
		<MethodInfo>
			<Method
				name="testFunc"
				group=""
				async="false"
				deprecated="false"
				unused="false"
				requirement="Runtime,HTML5"
				description="this is test method"
			>
				<Syntax
					text = "testFunc(a [, b])"
				>
				<Return/>
				<Arguments>
					<Argument 
						name="a" 
						type="String" 
						in="true" 
						out="false" 
						option="false" 
						variable="false" 
						description="any string" 
					/> 
					<Argument 
						name="b" 
						type="String" 
						in="true" 
						out="false" 
						option="true" 
						variable="false" 
						description="any string" 
					/> 
				</Arguments>
				</Syntax>
			</Method>
		</MethodInfo>
		

		<EventHandlerInfo>
			<!-- define event -->
			<EventHandler
				name="ontest"
				group="Event"
				deprecated="false"
				unused="false"
				requirement="Runtime,HTML5"
				description="this is test event"
			>
				<Syntax
					text="ontest(obj:Object, e:nexacro.EventInfo)"
				>
					<Return/>
					<Arguments>
						<Argument 
							name="obj" 
							type="Object" 
							in="true" 
							out="false" 
							option="false" 
							variable="false" 
							description="Event Source Object" 
						/> 
						<Argument 
							name="e" 
							type="nexacro.EventInfo" 
							in="true" 
							out="false" 
							option="false" 
							variable="false" 
							description="Event Information Object" 
						/> 
					</Arguments>
				</Syntax>
			</EventHandler>
		</EventHandlerInfo>
	</Object> 
</MetaInfo>

カスタムコンポーネントを画面上に配置すると、プロパティウィンドウに追加されたPseudo項目やプロパティ、イベントを確認することができます。

サンプルコードで、userpropプロパティを設定する項目の中でenuminfoは、値を直接入力せずに「enum_ext_test」というEnum項目を指定します。該当項目についての内容は、「ExtEnum.info」ファイルから確認することができます。

<?xml version='1.0' encoding='utf-8'?>
<MetaInfo version="1.0">
	<!-- define enum information -->
	<EnumInfo
		id="enum_ext_test"
		composite="false"
		delimiter=""
		description="abc, 123"
	>
		<Enum
			name="abc"
			description="abc"
		/>
		<Enum
			name="123"
			description="123"
		/>	
	</EnumInfo>
</MetaInfo>

Enum項目を指定したときに、プロパティウィンドウで該当プロパティの入力領域は、選択リストの形で表示されます。

コンポーネントスクリプト

アプリケーションの実行時コンポーネントの各プロパティとメソッド、イベントをどのように処理するかについての内容は、Javaスクリプトで作成されたファイルに追加する必要があります。

ExtCombo.jsファイルの完全なコードは下記の通りです。

提供されたコードでは、理解を助けるために提供されており、特定の機能を実行するための用途ではありません。

if (!nexacro.ExtCombo) 
{
    // ==============================================================================
    // nexacro.ExtCombo
    // ==============================================================================
    nexacro.ExtCombo = function(id, position, left, top, width, height, right, bottom, parent) 
    {
        nexacro.Combo.call(this, id, position, left, top, width, height, right, bottom, parent);
		
		this.userprop = "abc";
		this.itemopacity ="";
		this.onclick = null;
    };
    
    var _pExtCombo = nexacro._createPrototype(nexacro.Combo);
    nexacro.ExtCombo.prototype = _pExtCombo;
    _pExtCombo._type = "nexacroExtCombo";
    _pExtCombo._type_name = "ExtCombo";
    
	_pExtCombo.set_userprpo = function (v) 
	{
	    this.userprop = v;
	}
	
	_pExtCombo.set_itemopacity = function (v) 
	{
	    this.itemopacity = v;
	}
	_pExtCombo.testFunc = function (a,b)
	{
		return a+b;
	}

    delete _pExtCombo;
}

カスタムコンポーネント適用

コンポーネント登録

プロジェクトフォルダ内のdefault_typedef.xmlファイルを直接変更したり、[Edit TypeDefinition> Objects]ウィンドウで該当する項目を追加します。

idはユーザーが任意に指定できますが、classname値はカスタムコンポーネントの作成時に指定したクラス名を指定する必要があります。クラス名は、カスタムコンポーネントに添付されているマニュアル文書を参照するか、infoファイルのObject id項目を参照します。

モジュールの登録時に使用したExtCombo.infoファイルでは、Object id値を「nexacro.ExtCombo」に設定したため、コンポーネントの登録時にclassname値を「nexacro.ExtCombo」に設定します。

<?xml version='1.0' encoding='utf-8'?>
<MetaInfo version="1.0">
	<Object id="nexacro.ExtCombo"> 

		<!-- define extend component based nexacro.Combo -->
		<ObjectInfo 
			inheritance="nexacro.Combo"
			typename="nexacro.ExtCombo"

設定されたコンポーネントの基本的な情報は、default_typedef.xmlファイルに保存されます。

<Component type="JavaScript" id="ExtCombo" classname="nexacro.ExtCombo"/>

追加的なコンポーネントの配置時、デフォルト設定されている高さ、幅、アイコンの情報は、プロジェクト設定ファイル(*.xprj)に保存されます。

<?xml version="1.0" encoding="utf-8"?>
<Project active_adl="dd" version="1.2">
  <TypeDefinition url="default_typedef.xml"/>
  <GlobalVariables url="globalvars.xml"/>
  <ADL id="dd" url="dd.xadl"/>
  <ComponentInfoGroup>
    <ComponentInfo name="ExtCombo" defaultwidth="100" defaultheight="20" image="5"/>
  </ComponentInfoGroup>

コンポーネント使用

基本的なコンポーネントを使用することと同じように、ツールバーにあるコンポーネントのアイコンを選択し、フォームに適切なサイズで配置します。

設定ウィンドウで必要なプロパティを追加したり、イベントを定義することができ、スクリプトウィンドウでは、指定されたプロパティやメソッドの自動補完機能を提供します。