Hello,
I want to design a Flex Web Application that would
load features (flex components) hosted in different
SWF or SWC files at runtime. The prototype of that
application can be viewed on the url below.
http://80.227.133.21/FlexTestInternal/ApplicationLayoutManager.html
The actual application needs to call a webservice that
will return an xml. A sample xml is attached herewith.
The xml contains the layout description and the names
of feature (flex components) to be loaded. The layout
and features varies for different users.
I am thinking about deploying features in separate
SWF/SWC files so that only the required files will be
download at runtime. Can you please let me know the
following in this regard?
1. How can I package individual features in separate
SWF/SWF file using Flex Builder2.
2. How can I load the those separate SWF/SWC files at
runtime from the main SWF file?
3. In case of separate SWF/SWC files for features,
will the Flex library be included in every SWF/SWC
file?
I am also attaching the code of the prototype
application.
Regards,
Jehanzeb
__________________________________________________
Do You Yahoo!?
Tired of spam? Yahoo! Mail has the best spam protection around
http://mail.yahoo.com
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"
creationComplete="OnApplicationInitialize()">
<mx:Script>
<![CDATA[
import mx.containers.VBox;
import mx.containers.TabNavigator;
import mx.containers.Canvas;
import mx.controls.Label;
import mx.containers.HDividedBox;
import mx.containers.Panel;
import mx.containers.VDividedBox;
import mx.core.IContainer;
import mx.utils.StringUtil;
import mx.controls.Alert;
import mx.rpc.events.ResultEvent;
import mx.rpc.events.FaultEvent;
private function OnApplicationInitialize() : void
{
this.ajaxServiceInvokerProxy.addEventListener(FaultEvent.FAULT, this.OnError);
this.ajaxServiceInvokerProxy.addEventListener(ResultEvent.RESULT,
this.OnResultArrived);
this.ajaxServiceInvokerProxy.GetApplicationLayout.send();
}
private function OnError(event:FaultEvent) : void
{
var message:String;
message = StringUtil.substitute('Error Type:
[0]. Error Message: [1].', "A", "B");
mx.controls.Alert.show(message, "WebService
Error");
}
private function OnResultArrived(event:ResultEvent) :
void
{
var applicationLayout:String =
event.result.toString();
var applicationLayoutXml:XML = new
XML(applicationLayout);
this.LayoutPanels(applicationLayoutXml);
}
private function LayoutPanels(applicationLayoutXml:XML)
: void
{
var panelList:Object =
applicationLayoutXml.child("Pages");//.child("Pages").child("Page");//.Panels;
//panelList = panelList.child("Pages");
panelList =
panelList.child("Page").child("Panels");
//mx.controls.Alert.show(panelList.toXMLString(), "WebService Result");
//this.txtPanelList.text =
panelList.toXMLString();
var panel:Panel = new Panel();
panel.percentWidth = 100;
panel.percentHeight = 100;
panel.title = "Main Panel";
this.addChild(panel);
var panelXml:XML = null;
for each(panelXml in panelList.children())
{
if(panelXml.name() == "HorizontalSplit")
{
this.ProcessHorizontalPanel(panel, panelXml);
}
else if(panelXml.name() ==
"VerticalSplit")
{
this.ProcessVerticalPanel(panel, panelXml);
}
}
}
private function
ProcessHorizontalPanel(parentPanel:DisplayObjectContainer,
horizontalPanelXml:XML) : void
{
var horizontalPanel:VDividedBox = new
VDividedBox();
horizontalPanel.percentWidth = 100;
horizontalPanel.percentHeight = 100;
parentPanel.addChild(horizontalPanel);
var topPanel:XMLList =
horizontalPanelXml.TopPanel;
var bottomPanel:XMLList =
horizontalPanelXml.BottomPanel;
this.ProcessChildPanel(horizontalPanel,
topPanel, true);
this.ProcessChildPanel(horizontalPanel,
bottomPanel, true);
}
private function
ProcessVerticalPanel(parentPanel:DisplayObjectContainer, verticalPanelXml:XML)
: void
{
var verticalPanel:HDividedBox = new
HDividedBox();
verticalPanel.percentWidth = 100;
verticalPanel.percentHeight = 100;
parentPanel.addChild(verticalPanel);
var leftPanel:XMLList =
verticalPanelXml.LeftPanel;
var rightPanel:XMLList =
verticalPanelXml.RightPanel;
this.ProcessChildPanel(verticalPanel,
leftPanel, false);
this.ProcessChildPanel(verticalPanel,
rightPanel, false);
}
private function
ProcessChildPanel(parentPanel:DisplayObjectContainer, panelXmlList:XMLList,
isHorizontalPanel:Boolean) : void
{
//var childPanel:Panel = new Panel();
var sizePercent:int =
int(panelXmlList.attribute("SizePercent").toString());
var childPanel:Panel = new HeaderLessPanel();
if(isHorizontalPanel)
{
childPanel.percentWidth = 100;
childPanel.percentHeight = sizePercent;
childPanel.setStyle("backgroundColor",
0x4CAB32);
}
else
{
childPanel.percentWidth = sizePercent;
childPanel.percentHeight = 100;
childPanel.setStyle("backgroundColor",
0xAE1414);
}
parentPanel.addChild(childPanel);
var panelXml:XML = null;
for each(panelXml in panelXmlList.children())
{
if(panelXml.name() == "HorizontalSplit")
{
this.ProcessHorizontalPanel(childPanel, panelXml);
}
else if(panelXml.name() ==
"VerticalSplit")
{
this.ProcessVerticalPanel(childPanel, panelXml);
}
else if(panelXml.name() ==
"CompositeFeature")
{
this.LayoutCompositeFeature(childPanel, panelXml);
}
else
{
var label:Label = new Label();
label.text = panelXml.name();
childPanel.addChild(label);
}
}
}
private function
LayoutCompositeFeature(parentPanel:DisplayObjectContainer,
compositePanelXml:XML) : void
{
var featureList:XMLList =
compositePanelXml.Features;
var tabbedPanel:TabNavigator = new
TabNavigator();
tabbedPanel.percentHeight = 100;
tabbedPanel.percentWidth = 100;
var featureXml:XML = null;
for each(featureXml in featureList.children())
{
var vbox:VBox = new VBox();
vbox.label = featureXml.name();
vbox.percentHeight = 100;
vbox.percentWidth = 100;
var label:Label = new Label();
label.text = featureXml.name();
vbox.percentHeight = 100;
vbox.percentWidth = 100;
vbox.addChild(label);
tabbedPanel.addChild(vbox);
}
parentPanel.addChild(tabbedPanel);
}
]]>
</mx:Script>
<mx:WebService id="ajaxServiceInvokerProxy"
wsdl="http://192.168.0.101/AjaxServiceInvoker2/AjaxServiceInvoker.asmx?wsdl"
useProxy="false">
<mx:operation name="GetApplicationLayout">
</mx:operation>
</mx:WebService>
<!--<mx:TextArea id="txtPanelList" width="100%" height="100%"/>-->
</mx:Application>
<?xml version="1.0" encoding="UTF-8"?>
<Workspace Name="Default">
<Pages>
<Page Name="Page 1" ActivePage="True">
<Panels>
<HorizontalSplit IsMoveable="False">
<TopPanel SizePercent="92">
<VerticalSplit IsMoveable="False">
<LeftPanel SizePercent="26">
<HorizontalSplit IsMoveable="False">
<TopPanel SizePercent="54">
<HorizontalSplit IsMoveable="False">
<TopPanel SizePercent="50">
<CompositeFeature Layout="TabbedLayout">
<Features>
<Feature
Type="Sharesoft.WhiteWolf.Client.Desktop.MarketInformationFeatures.Notification.NotificationFeature"
Assembly="Sharesoft.WhiteWolf.Client.MarketInformationFeatures,
Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
Id="0f48f736-b0e2-480b-a90b-f1d89dadfe49" Name="Notification">
<State />
<Links />
</Feature>
<Feature
Type="Sharesoft.WhiteWolf.Client.Desktop.MarketInformationFeatures.NewsReader.NewsReaderFeature"
Assembly="Sharesoft.WhiteWolf.Client.MarketInformationFeatures,
Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
Id="be5589d0-83c3-4de3-a6a0-b10dcc4936d1" Name="News">
<State />
<Links />
</Feature>
</Features>
</CompositeFeature>
</TopPanel>
<BottomPanel SizePercent="50">
<Feature
Type="Sharesoft.WhiteWolf.Client.Desktop.MarketInformationFeatures.MarketIndex.MarketIndexFeature"
Assembly="Sharesoft.WhiteWolf.Client.MarketInformationFeatures,
Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
Id="af218173-c515-4a45-82e6-18d4bfc1fd77" Name="Market Index Summary">
<State />
<Links>
<Link
SourceId="af218173-c515-4a45-82e6-18d4bfc1fd77"
DestinationId="055996b5-ae76-40fe-9648-a129f32952ba" />
</Links>
</Feature>
</BottomPanel>
</HorizontalSplit>
</TopPanel>
<BottomPanel SizePercent="46">
<Feature
Type="Sharesoft.WhiteWolf.Client.Desktop.MarketInformationFeatures.Quote.QuoteFeature"
Assembly="Sharesoft.WhiteWolf.Client.MarketInformationFeatures,
Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
Id="41089048-3751-4471-a86d-c75070b237f6" Name="Quote">
<State />
<Links />
</Feature>
</BottomPanel>
</HorizontalSplit>
</LeftPanel>
<RightPanel SizePercent="74">
<HorizontalSplit IsMoveable="False">
<TopPanel SizePercent="22">
<CompositeFeature Layout="TabbedLayout">
<Features>
<Feature
Type="Sharesoft.WhiteWolf.Client.Desktop.MarketInformationFeatures.MarketByOrder.MarketByOrderFeature"
Assembly="Sharesoft.WhiteWolf.Client.MarketInformationFeatures,
Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
Id="703c9c4e-a0ef-4192-8948-9a150348faa5" Name="Market By Order">
<State />
<Links />
</Feature>
<Feature
Type="Sharesoft.WhiteWolf.Client.Desktop.MarketInformationFeatures.MarketByPrice.MarketByPriceFeature"
Assembly="Sharesoft.WhiteWolf.Client.MarketInformationFeatures,
Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
Id="df9b14bd-941c-4147-bc62-379c481d327f" Name="Market By Price">
<State />
<Links />
</Feature>
<Feature
Type="Sharesoft.WhiteWolf.Client.Desktop.MarketInformationFeatures.TopGainer.TopGainerFeature"
Assembly="Sharesoft.WhiteWolf.Client.MarketInformationFeatures,
Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
Id="bcc395a5-5708-4b6c-97d5-d40713d7af8d" Name="Top Gainers">
<State />
<Links />
</Feature>
<Feature
Type="Sharesoft.WhiteWolf.Client.Desktop.MarketInformationFeatures.TopLooser.TopLooserFeature"
Assembly="Sharesoft.WhiteWolf.Client.MarketInformationFeatures,
Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
Id="7e883537-72c5-4de4-ba36-025ede60b503" Name="Top Loosers">
<State />
<Links />
</Feature>
<Feature
Type="Sharesoft.WhiteWolf.Client.Desktop.MarketInformationFeatures.TopMover.TopMoverFeature"
Assembly="Sharesoft.WhiteWolf.Client.MarketInformationFeatures,
Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
Id="a77877cf-a2eb-4c40-9f5b-250978f996ca" Name="Most Active">
<State />
<Links />
</Feature>
<Feature
Type="Sharesoft.WhiteWolf.Client.Desktop.MarketInformationFeatures.IndexDetail.IndexDetailFeature"
Assembly="Sharesoft.WhiteWolf.Client.MarketInformationFeatures,
Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
Id="055996b5-ae76-40fe-9648-a129f32952ba" Name="Index Detail">
<State />
<Links />
</Feature>
</Features>
</CompositeFeature>
</TopPanel>
<BottomPanel SizePercent="78">
<CompositeFeature Layout="TabbedLayout">
<Features>
<Feature
Type="Sharesoft.WhiteWolf.Client.Desktop.MarketInformationFeatures.MarketView.MarketViewFeature"
Assembly="Sharesoft.WhiteWolf.Client.MarketInformationFeatures,
Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
Id="1a5ac357-39fe-4097-b7da-d5b966685d7c" Name="Market View">
<State />
<Links>
<Link
SourceId="1a5ac357-39fe-4097-b7da-d5b966685d7c"
DestinationId="41089048-3751-4471-a86d-c75070b237f6" />
</Links>
</Feature>
<Feature
Type="Sharesoft.WhiteWolf.Client.Desktop.MarketInformationFeatures.WatchList.WatchListFeature"
Assembly="Sharesoft.WhiteWolf.Client.MarketInformationFeatures,
Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
Id="680ad294-922b-46aa-8088-10f21e9d1d0e" Name="WatchList">
<State />
<Links />
</Feature>
<Feature
Type="Sharesoft.WhiteWolf.Client.Desktop.MarketInformationFeatures.Search.SearchFeature"
Assembly="Sharesoft.WhiteWolf.Client.MarketInformationFeatures,
Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
Id="1d7b2b7c-b629-4973-980e-4a4e38051cd3" Name="Search Symbols">
<State />
<Links />
</Feature>
<Feature
Type="Sharesoft.WhiteWolf.Client.Desktop.MarketInformationFeatures.AlertSetup.AlertSetupFeature"
Assembly="Sharesoft.WhiteWolf.Client.MarketInformationFeatures,
Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
Id="2cf0c325-1870-4c8a-8d78-91a622f066a3" Name="AlertSetup">
<State />
<Links />
</Feature>
<Feature
Type="Sharesoft.WhiteWolf.Client.Desktop.MarketInformationFeatures.Analysis.AnalysisFeature"
Assembly="Sharesoft.WhiteWolf.Client.MarketInformationFeatures,
Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
Id="e06c57d4-2d5e-463b-99f8-bbc622534f82" Name="Analysis">
<State />
<Links />
</Feature>
<Feature
Type="Sharesoft.WhiteWolf.Client.Desktop.MarketInformationFeatures.TradeHistory.TradeHistoryFeature"
Assembly="Sharesoft.WhiteWolf.Client.MarketInformationFeatures,
Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
Id="5c0b0ad7-fd26-48e7-a5d7-47a7b3ef7166" Name="Trade History">
<State />
<Links />
</Feature>
<Feature
Type="Sharesoft.WhiteWolf.Client.Desktop.MarketInformationFeatures.LiveChart.LiveChartFeature"
Assembly="Sharesoft.WhiteWolf.Client.MarketInformationFeatures,
Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
Id="a486b8b3-c363-47cf-8d07-728e6508aa2c" Name="Live Chart">
<State />
<Links />
</Feature>
</Features>
</CompositeFeature>
</BottomPanel>
</HorizontalSplit>
</RightPanel>
</VerticalSplit>
</TopPanel>
<BottomPanel SizePercent="8">
<Feature
Type="Sharesoft.WhiteWolf.Client.Desktop.MarketInformationFeatures.Ticker.TickerFeature"
Assembly="Sharesoft.WhiteWolf.Client.MarketInformationFeatures,
Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
Id="be3538c9-cd1d-4304-82b6-50af01436875" Name="Ticker">
<State />
<Links />
</Feature>
</BottomPanel>
</HorizontalSplit>
</Panels>
</Page>
</Pages>
</Workspace>