通信を作成ユーザーインターフェイスは、プロジェクトの要件に合わせてカスタマイズできます。このユーザーストーリーでは、一般的なカスタマイズの一部について実行方法を説明しています。
実装の概要次の例では、通信を作成ユーザーインターフェイスを変更する手順について詳しく説明します。通信を作成ユーザーインターフェイスアプリケーションでは、次のプロジェクトのスタイルが使用されます。 [SDK]/riaservices/assetcomposer/10.0.0.0/flex/adobe-acm-ccr-styles.swc
[SDK]/riaservices/assetcomposer/10.0.0.0/flex/adobe-acm-authoring-styles.swc
[SDK]/riaservices/riacore/10.0.0.0/flex/adobe-lcc-styles.swc
これらのスタイルプロジェクトは、テーマとして通信を作成アプリケーションに適用されます。通信を作成ソリューションテンプレートスタイルは、CreateCorrespondence/src/CSS/ccr_styles.css ファイルで定義されます。新しいスタイルを適用するか、既存のスタイルを変更するには、通信を作成ソリューションテンプレートアプリケーションでこれらのスタイルをオーバーライドします。
アプリケーションコンテキストのカスタマイズ通信を作成ユーザーインターフェイスの URL を変更するには、以下のタスクを実行します。 以下のファイル内の変数 CM_APPLICATION_CONTEXT の値を更新します。 CorrespondenceManagementSolutionTemplate/CreateCorrespondence/src/com/adobe/solutions/cmg/ccr/presentation/CCRApplication.as
CorrespondenceManagementSolutionTemplate/ManageAssets/src/com/adobe/solutions/cmg/manage\presentation/AMApplication.as
新しいアプリケーションコンテキストを反映するために、CorrespondenceManagementSolutionTemplate/Services/src/com/adobe/icc/bootstrap/AssetDefinitionsDeployer.java 内の CORRESPONDENCE_MANAGEMENT_ROOT_FOLDER 定数の値を更新します。
構築ブロックの設定ファイルで指定されるソリューションの場所を更新します。構築ブロック設定ファイルの場所を以下に示します。
CorrespondenceManagementSolutionTemplate\package-resources\etc\aep\config\BuildingBlockName
設定ファイルで指定されるソリューションの場所は、構築ブロックの設定フォルダーの場所に、ソリューションのアプリケーションコンテキストを付加して表されます(「/content」はオプション)。
特に、以下を変更する必要があります。
再構築と再デプロイを行います。再構築および再デプロイについては、Solution Template の構築とデプロイを参照してください。
日付の形式のカスタマイズCorrespondence Management Solution のデフォルトの日付の形式を変更できます。 管理者アカウントを使用して CRXDE にログインします。デフォルトのユーザー ID は admin で、デフォルトのパスワードは admin です。
左ペインの /content/cm フォルダーに移動します。
tbxeditor-config.xml ファイルをテキストエディターで開きます。
XML ファイル内で <defaultDateFormat> タグを探して形式を変更します。
tbxeditor-config.xml ファイルを保存します。
ソリューションテンプレートを再構築して再デプロイし、変更を反映します。
通信を作成ユーザーインターフェイスのインデントボタンの削除通信を作成ユーザーインターフェイスのコンテンツのインデントを変更する機能は、削除できます。インデントボタンがユーザーインターフェイスに表示されないようにするには、ツールバースキンファイルをカスタマイズしてボタンを非表示にします。 Flash Builder で、CreateCorrespondence プロジェクトをパッケージエクスプローラービューで開きます。
CreateCorrespondence/src/com.adobe.solutions.cmg.ccr/skins に移動します。
ここにスキンファイルを作成します。例えば、toolbarSkin.mxml をスキンファイル com.adobe.solutions.acm.ccr.skins.ToolBarSkin のコピーとして作成します。
新しい toolbarSkin.mxml ファイルを変更し、インデントボタンが表示されないように、そのボタンの「includeInLayout」および「visible」プロパティを「false」に設定します。 <s:HGroup gap="-1" >
<s:Button id="rightIndentBtn" styleName="increaseIndentButton" toolTip="{resourceManager.getString('Iccuser interfaceStrings','increaseIndentBtnToolTip')}" height="23" width="29" visible="false" includeInLayout="false"/>
<s:Button id="leftIndentBtn" styleName="decreaseIndentButton" toolTip="{resourceManager.getString('Iccuser interfaceStrings','decreaseIndentBtnToolTip')}" height="23" width="29" visible="false" includeInLayout="false"/>
</s:HGroup>
カスタマイズされたスキンファイルを使用する Solution Template スタイルシートを CreateCorrespondence/src/CSS に作成します。例えば、custom_styles.css を作成します。次のエントリを CreateCorrespondence/src/CSS/custom_styles.css に追加し、カスタマイズされたスキンがツールバークラスで使用されるようにします。 @namespace ccrpresentation "com.adobe.solutions.acm.ccr.presentation.*";
ccrpresentation|toolbar
{
backgroundGradientStartColor : #656565;
backgroundGradientEndColor : #353535;
borderContainerBgColor : #525252;
borderColor : #222222;
skinClass: ClassReference("com.adobe.solutions.cmg.ccr.skins.toolbarSkin");
}
新しい CSS ファイルを CreateCorrespondence/src/(デフォルトのパッケージ)/index.mxml に追加します。 <fx:Style source="/css/custom_styles.css"/>
再構築と再デプロイを行います。再構築および再デプロイについては、Solution Template の構築とデプロイを参照してください。
インデントボタンがツールバーから削除されます。
ユーザーグループに基づいたテキストモジュールの編集通信を作成ユーザーインターフェイスのテキストモジュールを編集する機能は、要件に応じてユーザーグループに基づいて制限できます。それには、次の手順を実行します。 ユーザーグループを作成します。ユーザーグループの作成について詳しくは、http://dev.day.com/content/docs/en/crx/current/administering/user_group_ac_admin.html を参照してください。
Flash Builder で、CreateCorrespondence プロジェクトをパッケージエクスプローラービューで開きます。
CreateCorrespondence/src/com.adobe.solutions.cmg.ccr/presentation に移動します。
ここに ActionScript クラスを作成します。例えば、com.adobe.solutions.acm.ccr.presentation.contentcapture.ModuleItemRenderer クラスを拡張する CustomModuleItemRenderer.as を作成します。このクラス内の commitProperties 関数をオーバーライドし、ユーザーグループに基づいて編集ボタンを無効にします。以下のソースコードは、「EditText」など、定義済みのユーザーグループがあることを前提としています。また、編集ボタンは、このグループに含まれるユーザーに対してのみ有効です。 package com.adobe.solutions.cmg.ccr.presentation
{
import com.adobe.icc.services.ServiceProvider;
import com.adobe.icc.services.user.ISSOManager;
import com.adobe.solutions.acm.ccr.presentation.contentcapture.ModuleItemRenderer;
import mx.collections.IList;
import spark.components.Button;
public class CustomModuleItemRenderer extends ModuleItemRenderer
{
public var userManager:ISSOManager = ServiceProvider.getUserService();
public function enableTextEditBtnBasedOnUserGroup():void
{
if(userManager && userManager.currentUser)
{
var listGroups:IList = userManager.currentUser.groups;
//If the EditText group is not assigned to the user disable the Edit button.
if(listGroups.getItemIndex("EditText") == -1)
textEditBtn.enabled = false;
}
}
override protected function commitProperties():void
{
super.commitProperties()
if(textEditBtn && textEditBtn.visible)
{
enableTextEditBtnBasedOnUserGroup();
}
invalidateDisplayList();
}
}
}
CreateCorrespondence/src/com.adobe.solutions.cmg.ccr/skins に移動します。スキンファイル TargetAreaRendererSkin.mxml を、スキンファイル com.adobe.solutions.acm.ccr.skins.contentcapture.TargetAreaRendererSkin.mxml のコピーとして作成します。新しい TargetAreaRendererSkin.mxml ファイルの moduleViewList を、CustomModuleItemRenderer を使用するように変更します。 <s:List id="moduleViewList" contentBackgroundAlpha="1.0"
alternatingItemColors="[0xffffff, 0xf8f8f8]" contentBackgroundColor="0xf8f8f8"
itemRenderer="com.adobe.solutions.cmg.ccr.presentation.CustomModuleItemRenderer"
width="100%" minHeight="0" >
<s:layout >
<s:VerticalLayout horizontalAlign="contentJustify" variableRowHeight="true" gap="0" paddingTop="0" paddingBottom="0"/>
</s:layout>
</s:List>
カスタマイズされたファイルを使用するスタイルシートを作成します(custom_styles.css など)。次のエントリを CreateCorrespondence/src/CSS/custom_styles.css に追加します。 /* CSS file */
@namespace s "library://ns.adobe.com/flex/spark";
@namespace mx "library://ns.adobe.com/flex/mx";
@namespace contentcapture "com.adobe.solutions.acm.ccr.presentation.contentcapture.*";
@namespace presentation "com.adobe.solutions.cmg.ccr.presentation.*";
contentcapture|TargetAreaRenderer
{
backgroundGradientStartColor : #656565;
backgroundGradientEndColor : #353535;
borderContainerBgColor : #454545;
borderColor : #222222;
skinClass: ClassReference("com.adobe.solutions.cmg.ccr.skins.TargetAreaRendererSkin");
}
presentation|CustomModuleItemRenderer
{
backgroundGradientStartColor : #656565;
backgroundGradientEndColor : #353535;
borderContainerBgColor : #454545;
borderColor : #222222;
skinClass: ClassReference("com.adobe.solutions.acm.ccr.skins.contentcapture.ModuleItemRendererSkin");
}
このカスタム CSS ファイルが index.mxml ファイルに含まれるように index.mxml を更新します。これは、他のすべての CSS ファイルの後に追加します。 <fx:Style source="/css/custom_styles.css"/>
再構築と再デプロイを行います。再構築および再デプロイについては、Solution Template の構築とデプロイを参照してください。
ユーザーが「EditText」グループに含まれている場合は、編集ボタンが有効になります。
表示用ターゲット領域のフィルタリング通信を作成ユーザーインターフェイスの表示用ターゲット領域は、要件に応じてフィルタリングできます。例えば、エージェントのどの種類のアクションに対しても閉じているターゲット領域を非表示にできます。それには、次の手順を実行します。 Flash Builder で、CreateCorrespondence プロジェクトをパッケージエクスプローラービューで開きます。
CreateCorrespondence/src/com.adobe.solutions.cmg.ccr/presentation に移動し、カスタムフィルターターゲット領域フィルター関数を CCRApplication.as ファイルに追加します。 import com.adobe.icc.dc.domain.IModuleInstance;
import com.adobe.icc.dc.domain.TargetInstance;
import com.adobe.icc.dc.domain.VariableInstance;
import com.adobe.icc.dc.domain.TextModuleInstance;
/**
* Returns true if the target area needs to displayed,
* false if it is not to be displayed
*/
private function customTargetInstanceFilterFunction(item:Object):Boolean
{
if(! (item is TargetInstance))
return false;
var targetInstance:TargetInstance = item as TargetInstance;
//Show the target area if it allows free text
if(targetInstance.allowFreeText)
return true;
if(!targetInstance.contents || targetInstance.contents.length < 1)
return false;
//If the order is not fixed show the target area
if(!targetInstance.ordered)
return true;
//Check if there is any optional content in the target area
for(var i:int=0; i<targetInstance.contents.length; i++)
{
var moduleInst:IModuleInstance = targetInstance.contents[i] as IModuleInstance;
if(moduleInst.optional)
return true;
//If there is a TextModule which is editable show the target area
if(moduleInst is TextModuleInstance && moduleInst.editable)
return true;
}
//Check if there are any editable content variables in the target area
if(targetInstance.contentVariables && targetInstance.contentVariables.length > 0)
{
for(var i:int=0; i<targetInstance.contentVariables.length; i++)
{
var varInst:VariableInstance = targetInstance.contentVariables[i] as VariableInstance;
if(varInst.editable)
return true;
}
}
return false;
};
CCRApplication.as ファイルの partAdded 関数を変更し、contentCapturePod のカスタムターゲット領域フィルター関数を設定します。 else if(instance == contentCapturePod)
{
//Set the custom filter function here
contentCapturePod.targetInstanceFilterFunction = customTargetInstanceFilterFunction;
BindingUtils.bindSetter(updateContentCaptureProvider, this, ["letterInstance", "targetInstances"]);
BindingUtils.bindSetter(updateContentCaptureVariableList, this, ["letterInstance", "variableInstances"]);
contentCapturePod.addEventListener("libraryInsertEvent", handleLibraryInsertEvent);
contentCapturePod.addEventListener("textEditEvent", handleTextEditEvent);
contentCapturePod.addEventListener("activeContentChange", contentCapturePod.handleActiveContentEvent);
addEventListener("ItemMoveUpClickEvent", handleItemMoveUpClick);
addEventListener("ItemMoveDownClickEvent", handleItemMoveDownClick);
addEventListener("ItemDeleteClickEvent", handleItemDeleteClick);
addEventListener("LeftIndentClickEvent", handleLeftIndentClick);
addEventListener("RightIndentClickEvent", handleRightIndentClick);
}
再構築と再デプロイを行います。再構築および再デプロイについては、Solution Template の構築とデプロイを参照してください。
コンテンツビューのターゲット領域は、定義されたフィルター関数に基づいて表示されます。
通信を作成ユーザーインターフェイスの表示オプションのカスタマイズデフォルトで、通信を作成ユーザーインターフェイスでレターインスタンスを開くと、レターをデータ表示またはコンテンツ表示で表示するオプションがあります。レターインスタンスのデフォルト表示(データまたはコンテンツ)をカスタマイズできます。また、データまたはコンテンツ表示のどちらを表示するか、表示をカスタマイズすることもできます。
通信を作成の表示をカスタマイズするには
[CorrespondenceManagementSolutionTemplate]\package-resources\content\cm\tbxeditor-config.xml のファイルに移動し、任意のテキストエディターでファイルを開きます。
次のノードに移動します。
CCRDefaultView
- AUTO
- デフォルト. レターインスタンスに変数やフィールドがある場合、デフォルトで、インスタンスはデータ表示で開かれます。ドロップダウンリストで「コンテンツ」を選択して、コンテンツ表示に移動します。レターインスタンスに変数やフィールドがない場合、インスタンスはコンテンツ表示で開きます。ただし、ドロップダウンリストで「データ」を選択してデータ表示に移動できます。
- DATA
- レターインスタンスはデータ表示で開かれます。ドロップダウンリストで「コンテンツ」を選択して、コンテンツ表示に移動します。
- CONTENT
- レターインスタンスはコンテンツ表示で開かれます。ドロップダウンリストで「データ」を選択して、データ表示に移動します。
- DATA_ONLY
- レターインスタンスはデータ表示で開かれます。ドロップダウンリストにあるのは「データ」オプションのみです。この設定を使用して、レターインスタンスを開くユーザーがコンテンツ表示でインスタンスを表示できないように、許可が与えられないことを保証します。
- CONTENT_ONLY
- レターインスタンスはコンテンツ表示で開かれます。ドロップダウンリストにあるのは「コンテンツ」オプションのみです。この設定を使用して、レターインスタンスを開くユーザーがデータ表示でインスタンスを表示できないように、許可が与えられないことを保証します。
tbxeditor-config.xml ファイルを保存します。
ソリューションテンプレートを再構築して再デプロイし、変更を反映します。
代替データ取得の作成通信を作成アプリケーションの代替データ取得ユーザーインターフェイスは、要件に応じて作成できます。このインターフェイスには、エージェントが入力および送信する必要があるレターのデータ要素リストが示されています。レターのコンテンツビューや PDF 表示がないので、処理が速くなります。それには、次の手順を実行します。 Flash Builder で、CreateCorrespondence プロジェクトをパッケージエクスプローラービューで開きます。
CreateCorrespondence/src/com.adobe.solutions.cmg.ccr/presentation に移動します。
CCRApplication.as ファイルを開き、以下のソースコードを追加します。 import com.adobe.dct.event.DCTServiceEvent;
import com.adobe.dct.model.DataDictionaryInstanceModel;
import com.adobe.dct.service.DataDictionaryUtilService;
import com.adobe.dct.transfer.DataDictionaryElement;
import com.adobe.icc.services.render.ILetterRenderService;
import com.adobe.icc.util.Map;
import com.adobe.icc.vo.Field;
import com.adobe.icc.vo.Variable;
import flash.events.MouseEvent;
import mx.collections.ArrayCollection;
import mx.rpc.remoting.RemoteObject;
import mx.rpc.IResponder;
import spark.components.FormItem;
import spark.components.TextInput;
[SkinPart(required="false")]
/**
* The data capture form.
*/
public var dataCaptureForm:spark.components.Form;
[SkinPart(required="false")]
/**
* Submit button which the agent will press to submit the form.
*/
public var submitBtn:Button;
private var _dataDictionaryInstance:DataDictionaryInstanceModel = null;
private var fieldList:IList = null;
private var phList:IList = null;
private var ddeList:IList = null;
private var textInputFieldList:ArrayCollection = new ArrayCollection();
private var textInputDDEList:ArrayCollection = new ArrayCollection();
private var textInputVariableList:ArrayCollection = new ArrayCollection();
/**
* Wrapper function which invokes the getLetterDataElements of the LetterService
* running on the server
*/
public function letterServiceGetLetterDataElements(letterId:String):AsyncToken
{
var _service:RemoteObject;
_service = com.adobe.icc.services.ServiceLocator.getInstance().getRemoteObject("lc.icc.dbservices.letterService");
var operationToken:AsyncToken = _service.getLetterDataElements(letterId);
return operationToken;
}
protected function getLetterDataElements(invokeParams:InvokeParams):void
{
var operationToken:AsyncToken = letterServiceGetLetterDataElements(invokeParams.letterId);
var responder:IResponder = new Responder(
function(event:ResultEvent):void
{
Debug.info("getLetterDataElements success");
var dataElem:Map = Map.fromObject(event.result as Object);
if(dataElem.hasKey("Field"))
{
fieldList = dataElem.value("Field");
if(fieldList != null && fieldList.length > 0)
{
for(var i:int = 0; i<fieldList.length; i++)
{
var fd:Field = fieldList[i];
var dataCaptureFormItem:FormItem = new FormItem();
dataCaptureFormItem.label = fd.displayName + " Field " + fd.type;
var ti:TextInput = new TextInput();
textInputFieldList.addItemAt(ti, i);
dataCaptureFormItem.addElement(ti);
dataCaptureForm.addElementAt(dataCaptureFormItem, i);
}
}
}
if(dataElem.hasKey("DDE"))
{
ddeList = dataElem.value("DDE");
if(ddeList != null && ddeList.length > 0)
{
for(var j:int = 0; j<ddeList.length; j++)
{
var dde:DataDictionaryElement = ddeList[j];
var dataCaptureFormItem:FormItem = new FormItem();
dataCaptureFormItem.label = dde.displayName + " DDE " + dde.elementType;
var ti:TextInput = new TextInput();
textInputDDEList.addItemAt(ti, j);
dataCaptureFormItem.addElement(ti);
dataCaptureForm.addElementAt(dataCaptureFormItem, i+j);
}
}
}
if(dataElem.hasKey("PH"))
{
phList = dataElem.value("PH");
if(phList != null && phList.length > 0)
{
for(var k:int = 0; j<phList.length; k++)
{
var ph:Variable = phList[k];
var dataCaptureFormItem:FormItem = new FormItem();
dataCaptureFormItem.label = ph.name + " PH " + ph.dataType;
var ti:TextInput = new TextInput();
textInputVariableList.addItemAt(ti, k);
dataCaptureFormItem.addElement(ti);
dataCaptureForm.addElementAt(dataCaptureFormItem, i+j+k);
}
}
}
},
function(faultEvent:FaultEvent):void
{
Debug.error("Error in getLetterDataElements", faultEvent);
}
);
operationToken.addResponder(responder);
}
/**
* Wrapper function which invokes the serializeDataElementsToXML of the LetterRenderService
* running on the server
*/
public function letterRenderServiceSerializeDataElementsToXML(ddiDataAsXml:String, phValues:Object,fieldValues:Object):AsyncToken
{
var _service:RemoteObject;
_service = com.adobe.icc.services.ServiceLocator.getInstance().getRemoteObject("lc.icc.renderlib.letterRenderService");
var operationToken:AsyncToken = _service.serializeDataElementsToXML(ddiDataAsXml, phValues, fieldValues);
return operationToken;
}
private function serializeDataElementsToXML(ddi:String, mapVar:Map, mapField:Map)
{
var operationToken:AsyncToken = letterRenderServiceSerializeDataElementsToXML(ddi, mapVar.toObject(), mapField.toObject());
var responder:IResponder = new Responder(
function(event:ResultEvent):void
{
Debug.info("serializeDataElementsToXML success");
var serializedXML:String = event.result as String;
trace(serializedXML);
var letterRenderService:ILetterRenderService = ServiceProvider.getLetterRenderService();
letterRenderService.renderLetterToFile(invocationParams.letterId, true, serializedXML, false, false).addHandlers(
function(event:ResultEvent):void
{
Debug.info("renderLetter success");
},
function(faultEvent:FaultEvent):void
{
Debug.error("Error in renderLetter", faultEvent);
}
)
},
function(faultEvent:FaultEvent):void
{
Debug.error("Error in serializeDataElementsToXML", faultEvent);
}
);
operationToken.addResponder(responder);
}
private function onSubmitBtnClick(e:Event)
{
var mapField:Map = new Map();
var mapVar:Map = new Map();
for(var i:int=0;i<textInputFieldList.length; i++)
{
var textInput:TextInput = textInputFieldList.getItemAt(i) as TextInput;
if(textInput)
trace(textInput.text);
mapField.assign((fieldList[i] as Field).path, textInput.text);
}
for(var i:int=0;i<textInputVariableList.length; i++)
{
var textInput:TextInput = textInputVariableList.getItemAt(i) as TextInput;
if(textInput)
trace(textInput.text);
mapVar.assign((phList[i] as Variable).name, textInput.text);
}
for(var i:int=0;i<textInputDDEList.length; i++)
{
var textInput:TextInput = textInputDDEList.getItemAt(i) as TextInput;
if(textInput)
trace(textInput.text);
if(textInput.text && textInput.text != "")
_dataDictionaryInstance.setValue((ddeList[i] as DataDictionaryElement).referenceName, textInput.text);
}
var dDEUtilservice:DataDictionaryUtilService = DCTServiceProvider.getUtilService();
dDEUtilservice.serializeDDItoXML(_dataDictionaryInstance.vo,
function(event:DCTServiceEvent):void
{
Debug.info("serializeDDItoXML success");
trace(event.data as String)
serializeDataElementsToXML(event.data as String, mapVar, mapField);
},
function(faultEvent:FaultEvent):void
{
Debug.error("Error in serializeDDItoXML", faultEvent);
}
)
}
initLetterInstance 関数を次のように変更します。
protected function initLetterInstance(invokeParams:InvokeParams):void
{
var letterInstanceBuilder:LetterInstanceBuilder = new LetterInstanceBuilder();
letterInstanceBuilder.setInitialXmlData(invokeParams.xmlData);
letterInstanceBuilder.setInitialXmlDataUrl(invokeParams.dataUrl);
letterInstanceBuilder.setLetterId(invokeParams.letterId);
letterInstanceBuilder.setLetterName(invokeParams.letterName);
letterInstanceBuilder.setLetterVersion(invokeParams.letterVersion);
letterInstanceBuilder.setUseTestData(invokeParams.useTestData);
letterInstanceBuilder.setUseLatest(invokeParams.useLatest);
letterInstanceBuilder.build().addHandlers(
function(event:ResultEvent):void
{
Debug.info("LetterInstanceBuilder success");
initialXmlData = event.result.initialXmlData;
letterInstance = event.result.letterInstance;
_dataDictionaryInstance = event.result.dataDictionaryInstance;
if(letterInstance)
{
getLetterDataElements(invokeParams);
}
},
function(faultEvent:FaultEvent):void
{
Debug.error("Error in letter Load", faultEvent);
if(faultEvent.fault && (faultEvent.fault.faultCode == "loadLetterFault" || faultEvent.fault.faultCode == "letterInstanceBuildFailure"))
{
ErrorManager.showMessage(resourceManager.getString('Messages', 'errorTitle'),resourceManager.getString('Iccuser interfaceStrings', 'errorLoadLetterTitle'),null,ErrorManager.Error_Icon,0xFFFF);
return;
}
ErrorManager.handleFault(faultEvent.fault, resourceManager.getString("Common","typeLetter"));
}
);
}
次のように、送信ボタンのクリックハンドラーを partAdded 関数に追加します。 else if(instance == submitBtn)
submitBtn.addEventListener(MouseEvent.CLICK, onSubmitBtnClick);
CreateCorrespondence/src/com.adobe.solutions.cmg.Create Correspondence/skins に移動します。 CCRApplicationSkin.mxml ファイルを開きます。このファイルのコンテンツ全体を以下のソースコードに置き換えて、データ要素および「 送信」ボタンが含まれるフォームを作成します。また、スキンファイルを作成することもできます。新しく作成したスキンファイルの参照を CreateCorrespondence/src/CSS/CSS_styles.css に設定します。 <?xml version="1.0" encoding="utf-8"?>
<s:SparkSkin xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
width="100%" height="100%" >
<fx:Metadata>
[HostComponent("com.adobe.solutions.cmg.ccr.presentation.CCRApplication")]
</fx:Metadata>
<fx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
import mx.core.user interfaceComponent;
]]>
</fx:Script>
<s:states>
<s:State name="initializing" />
<s:State name="normal" />
<s:State name="review" />
<s:State name="disabled"/>
</s:states>
<s:Rect left="0" right="0" top="0" bottom="0" >
<s:fill>
<s:SolidColor id="bgColor" color="0xeeeeee" alpha="1.0" />
</s:fill>
</s:Rect>
<s:Group width="100%" height="100%" >
<s:layout>
<s:VerticalLayout gap="0" />
</s:layout>
<s:Scroller width="100%" height="100%" >
<s:VGroup gap="0" width="100%" >
<s:Form id="dataCaptureForm" width="100%" height="100%" >
<!-- dataCaptureItems here dynamically -->
</s:Form>
</s:VGroup>
</s:Scroller>
<s:Button id="submitBtn" width="50" height="20" label="Submit"/>
</s:Group>
</s:SparkSkin>
再構築と再デプロイを行います。再構築および再デプロイについては、Solution Template の構築とデプロイを参照してください。
これで、通信を作成によって、すべてのデータ要素が含まれるフォームが作成されました。エージェントは、値を入力し、下部にある送信ボタンを使用して、レターを作成できます。
このアプローチの手順では代替データ取得機能が作成されますが、前述の実装には次の制限があります。 データ取得フォームフィールドは、データ型に基づいてレンダリングされません。
取得されたデータ要素のデフォルト値は表示されず、すべてのデータ要素について空白のテキストフィールドが示されます。
_dataDictionaryInstance.setValue 関数には制限があり、DDE のコレクションタイプでは失敗します。
使用ツールこのシナリオでは、Flash Builder を使用してスキンを作成し、ソリューションテンプレートを変更します。
|
|
|