I have quite some experience with Flex and I am just starting to write my first AIR application and would like to use as much Spark as possible here.
So I started withe a simple Hello World application:
<?xml version="1.0" encoding="utf-8"?>
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx" backgroundColor="red"
initialize="initializeHandler(event)">
<s:Label text="Hello World"/>
<s:Button label="Test" initialize="onButtonInitialize()"/>
<fx:Script><![CDATA[
import mx.events.FlexEvent;
private function onButtonInitialize():void
{
trace("Button");
}
private function initializeHandler(event:FlexEvent):void
{
trace("Application");
}
]]></fx:Script>
</s:WindowedApplication>
Unfortunately this simple example shows no child components and even none of the initialize handlers is triggered. However as soon as I change the root tag to mx:WindowedApplication everything behaves as expected: The label and the button are shown and the console shows the output of the two trace statements.
What am I missing?
I am using Flex 4.5.0 and use flex-mojos for the build.
I'm going to guess that it's your descriptor file that's off. Here's the default one that Flash Builder created for me:
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<application xmlns="http://ns.adobe.com/air/application/2.6">
<!-- Adobe AIR Application Descriptor File Template.
Specifies parameters for identifying, installing, and launching AIR applications.
xmlns - The Adobe AIR namespace: http://ns.adobe.com/air/application/2.6
The last segment of the namespace specifies the version
of the AIR runtime required for this application to run.
minimumPatchLevel - The minimum patch level of the AIR runtime required to run
the application. Optional.
-->
<!-- A universally unique application identifier. Must be unique across all AIR applications.
Using a reverse DNS-style name as the id is recommended. (Eg. com.example.ExampleApplication.) Required. -->
<id>Airtest</id>
<!-- Used as the filename for the application. Required. -->
<filename>Airtest</filename>
<!-- The name that is displayed in the AIR application installer.
May have multiple values for each language. See samples or xsd schema file. Optional. -->
<name>Airtest</name>
<!-- A string value of the format <0-999>.<0-999>.<0-999> that represents application version which can be used to check for application upgrade.
Values can also be 1-part or 2-part. It is not necessary to have a 3-part value.
An updated version of application must have a versionNumber value higher than the previous version. Required for namespace >= 2.5 . -->
<versionNumber>0.0.0</versionNumber>
<!-- A string value (such as "v1", "2.5", or "Alpha 1") that represents the version of the application, as it should be shown to users. Optional. -->
<!-- <versionLabel></versionLabel> -->
<!-- Description, displayed in the AIR application installer.
May have multiple values for each language. See samples or xsd schema file. Optional. -->
<!-- <description></description> -->
<!-- Copyright information. Optional -->
<!-- <copyright></copyright> -->
<!-- Publisher ID. Used if you're updating an application created prior to 1.5.3 -->
<!-- <publisherID></publisherID> -->
<!-- Settings for the application's initial window. Required. -->
<initialWindow>
<!-- The main SWF or HTML file of the application. Required. -->
<!-- Note: In Flash Builder, the SWF reference is set automatically. -->
<content>[This value will be overwritten by Flash Builder in the output app.xml]</content>
<!-- The title of the main window. Optional. -->
<!-- <title></title> -->
<!-- The type of system chrome to use (either "standard" or "none"). Optional. Default standard. -->
<!-- <systemChrome></systemChrome> -->
<!-- Whether the window is transparent. Only applicable when systemChrome is none. Optional. Default false. -->
<!-- <transparent></transparent> -->
<!-- Whether the window is initially visible. Optional. Default false. -->
<!-- <visible></visible> -->
<!-- Whether the user can minimize the window. Optional. Default true. -->
<!-- <minimizable></minimizable> -->
<!-- Whether the user can maximize the window. Optional. Default true. -->
<!-- <maximizable></maximizable> -->
<!-- Whether the user can resize the window. Optional. Default true. -->
<!-- <resizable></resizable> -->
<!-- The window's initial width in pixels. Optional. -->
<!-- <width></width> -->
<!-- The window's initial height in pixels. Optional. -->
<!-- <height></height> -->
<!-- The window's initial x position. Optional. -->
<!-- <x></x> -->
<!-- The window's initial y position. Optional. -->
<!-- <y></y> -->
<!-- The window's minimum size, specified as a width/height pair in pixels, such as "400 200". Optional. -->
<!-- <minSize></minSize> -->
<!-- The window's initial maximum size, specified as a width/height pair in pixels, such as "1600 1200". Optional. -->
<!-- <maxSize></maxSize> -->
<!-- The initial aspect ratio of the app when launched (either "portrait" or "landscape"). Optional. Mobile only. Default is the natural orientation of the device -->
<!-- <aspectRatio></aspectRatio> -->
<!-- Whether the app will begin auto-orienting on launch. Optional. Mobile only. Default false -->
<!-- <autoOrients></autoOrients> -->
<!-- Whether the app launches in full screen. Optional. Mobile only. Default false -->
<!-- <fullScreen></fullScreen> -->
<!-- The render mode for the app (either auto, cpu, or gpu). Optional. Mobile only. Default auto -->
<!-- <renderMode></renderMode> -->
<!-- Whether or not to pan when a soft keyboard is raised or lowered (either "pan" or "none"). Optional. Defaults "pan." -->
<!-- <softKeyboardBehavior></softKeyboardBehavior> -->
<autoOrients>false</autoOrients>
<fullScreen>false</fullScreen>
<visible>false</visible>
</initialWindow>
<!-- We recommend omitting the supportedProfiles element, -->
<!-- which in turn permits your application to be deployed to all -->
<!-- devices supported by AIR. If you wish to restrict deployment -->
<!-- (i.e., to only mobile devices) then add this element and list -->
<!-- only the profiles which your application does support. -->
<!-- <supportedProfiles>desktop extendedDesktop mobileDevice extendedMobileDevice</supportedProfiles> -->
<!-- The subpath of the standard default installation location to use. Optional. -->
<!-- <installFolder></installFolder> -->
<!-- The subpath of the Programs menu to use. (Ignored on operating systems without a Programs menu.) Optional. -->
<!-- <programMenuFolder></programMenuFolder> -->
<!-- The icon the system uses for the application. For at least one resolution,
specify the path to a PNG file included in the AIR package. Optional. -->
<!-- <icon>
<image16x16></image16x16>
<image32x32></image32x32>
<image36x36></image36x36>
<image48x48></image48x48>
<image72x72></image72x72>
<image114x114></image114x114>
<image128x128></image128x128>
</icon> -->
<!-- Whether the application handles the update when a user double-clicks an update version
of the AIR file (true), or the default AIR application installer handles the update (false).
Optional. Default false. -->
<!-- <customUpdateUI></customUpdateUI> -->
<!-- Whether the application can be launched when the user clicks a link in a web browser.
Optional. Default false. -->
<!-- <allowBrowserInvocation></allowBrowserInvocation> -->
<!-- Listing of file types for which the application can register. Optional. -->
<!-- <fileTypes> -->
<!-- Defines one file type. Optional. -->
<!-- <fileType> -->
<!-- The name that the system displays for the registered file type. Required. -->
<!-- <name></name> -->
<!-- The extension to register. Required. -->
<!-- <extension></extension> -->
<!-- The description of the file type. Optional. -->
<!-- <description></description> -->
<!-- The MIME content type. -->
<!-- <contentType></contentType> -->
<!-- The icon to display for the file type. Optional. -->
<!-- <icon>
<image16x16></image16x16>
<image32x32></image32x32>
<image48x48></image48x48>
<image128x128></image128x128>
</icon> -->
<!-- </fileType> -->
<!-- </fileTypes> -->
<!-- iOS specific capabilities -->
<!-- <iPhone> -->
<!-- A list of plist key/value pairs to be added to the application Info.plist -->
<!-- <InfoAdditions>
<![CDATA[
<key>UIDeviceFamily</key>
<array>
<string>1</string>
<string>2</string>
</array>
<key>UIStatusBarStyle</key>
<string>UIStatusBarStyleBlackOpaque</string>
<key>UIRequiresPersistentWiFi</key>
<string>YES</string>
]]>
</InfoAdditions> -->
<!-- <requestedDisplayResolution></requestedDisplayResolution> -->
<!-- </iPhone> -->
<!-- Specify Android specific tags that get passed to AndroidManifest.xml file. -->
<!--<android>
<manifestAdditions>
<![CDATA[
<manifest android:installLocation="auto">
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-configuration android:reqFiveWayNav="true"/>
<supports-screens android:normalScreens="true"/>
<uses-feature android:required="true" android:name="android.hardware.touchscreen.multitouch"/>
<application android:enabled="true">
<activity android:excludeFromRecents="false">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
</application>
</manifest>
]]>
</manifestAdditions>
</android> -->
<!-- End of the schema for adding the android specific tags in AndroidManifest.xml file -->
</application>
Related
I am trying to generate Cucumber PDF report.
I am getting following error.
tech.grasshopper.pdf.PDFCucumberReport collectReportConfiguration
INFO: PDF report configuration not found. Using default settings.
My extent.properties file:
extent.reporter.spark.start=true
extent.reporter.spark.out=test-output/SparkReport/Spark.html
extent.reporter.spark.config=src/test/resources/extent-config.xml
extent.reporter.spark.out=test-output/SparkReport/
screenshot.dir=test-output/
screenshot.rel.path=../
extent.reporter.pdf.start=true
extent.reporter.pdf.out=test output/PdfReport/ExtentPdf.pdf
#basefolder.name=reports
#basefolder.datetimepattern=d-MMM-YY HH-mm-ss
extent.reporter.spark.vieworder=dashboard,test,category,exception,author,device,log
systeminfo.os=WIndows
systeminfo.user=Su
systeminfo.build=1.1
systeminfo.AppName=AutomationPractice
I have also added extent-config.properties. And pom dependency:
<dependency>
<groupId>tech.grasshopper</groupId>
<artifactId>extentreports-cucumber6-adapter</artifactId>
<version>2.6.0</version>
<scope>test</scope>
</dependency>
Please let me know how can I correct it.
Create extent-config.xml in resources folder with the below content
<?xml version="1.0" encoding="UTF-8"?>
<extentreports>
<configuration>
<!-- report theme -->
<!-- STANDARD, DARK -->
<theme>DARK</theme>
<!-- document encoding -->
<!-- defaults to UTF-8 -->
<encoding>UTF-8</encoding>
<!-- protocol for script and stylesheets -->
<!-- defaults to https -->
<!-- HTTP, HTTPS -->
<protocol>HTTPS</protocol>
<!-- offline report -->
<timelineEnabled>true</timelineEnabled>
<!-- offline report -->
<enableOfflineMode>false</enableOfflineMode>
<!-- use thumbnails for base64 images -->
<!-- this may slowdown viewing tests -->`enter code here`
<thumbnailForBase64>false</thumbnailForBase64>
<!-- title of the document -->
<documentTitle>FCPQ-DG Test Automation Extent Report</documentTitle>
<!-- report name - displayed at top-nav -->
<reportName>
Test Automation Report
</reportName>
<!-- timestamp format -->
<timeStampFormat>MMM dd, yyyy HH:mm:ss</timeStampFormat>
<!-- custom javascript -->
<scripts>
<![CDATA[
$(document).ready(function() {
});
]]>
</scripts>
<!-- custom styles -->
<styles>
<![CDATA[
]]>
</styles>
</configuration>
</extentreports>
When I log into http://localhost:8080/alfresco I can navigate to a folder and see four content items. So far so good. But there is no indication as to what the type is of each content type, except for a PDF icon.
Is there a way for me to specify an icon for my custom content types?
I would like the icon to be dependent on my custom type.
<types>
<type name="sc:doc">
<title>Someco Content</title>
<parent>cm:content</parent>
<icon>boring-icon.png</icon> <-- something like this
</type>
<type name="sc:marketingDoc">
<title>Marketing Document</title>
<parent>bnp:doc</parent>
<icon>fancy-marketing-icon.png</icon> <-- something like this
</type>
</types>
If it matters, I am using Alfresco 3.3 (Enterprise).
Take a look here http://docs.alfresco.com/3.4/tasks/kb-code-explorer-add.html
e.g. web-client-config-custom.xml (sc:marketingDocis the Alfresco content type):
<!-- Specify icon for the kb:document instances -->
<config evaluator="string-compare" condition="sc:marketingDoc icons">
<icons>
<icon name="sc_marketingDoc-icon" path="/images/icons/your_custom_icon.gif" />
</icons>
</config>
Are you informed, that Alfresco Explorer is deprecated & you should use Share instead?
We have a linux machine (Red Hat) to compile our flex (3.0) application.
It's an ant task (which is called by maven-antrun-plugin).
We decided to change our build machine (same Red Hat).
So i copy/paste the FLEX_HOME repertory on the new machine (from the old one), install ant then checkout the project on the new machine.
Here is the log when i call : ant -buildfile build-flex.xml
Buildfile: build-flex.xml
version:
[echo] Version ${maven.pom.version}
[copy] Copying 1 file to /home/ad59aphr/build/pharerh-ihm/flex_resources
compile.release:
[mxmlc] Loading configuration file /exec/products/flex_sdk/frameworks/flex-config.xml
[mxmlc] /home/ad59aphr/build/pharerh-ihm/flex_src/flexClient_381495.cache (No such >file or directory)
Most of the time it hangs up here with java using 100% cpu.
Sometimes it shows a few warnings from the compilation but do not go further.
When i use the ant -debug -buildfile build-flex.xml, it shows the command executed :
[mxmlc] FlexTask.execute: -compiler.keep-generated-actionscript=true -compiler.incremental=true +flexlib=/exec/products/flex_sdk/frameworks -compiler.services=/home/ad59aphr/build/pharerh-ihm/WebContent/WEB-INF/flex/services-config.xml -metadata.description=PhareRH -metadata.title=PhareRH -compiler.accessible=true -compiler.optimize=true -compiler.strict=true -compiler.headless-server=true -load-config=/exec/products/flex_sdk/frameworks/flex-config.xml -compiler.source-path=/exec/products/flex_sdk/frameworks -compiler.source-path=/home/ad59aphr/build/pharerh-ihm/flex_resources -compiler.source-path=/home/ad59aphr/build/pharerh-ihm/flex_src -compiler.source-path=/home/ad59aphr/build/pharerh-ihm/flex_src_gen -compiler.context-root=/ -compiler.debug=false -compiler.include-libraries+=/home/ad59aphr/build/pharerh-ihm/flex_libs/Cairngorm.swc -compiler.include-libraries+=/home/ad59aphr/build/pharerh-ihm/flex_libs/Collator.swc -compiler.include-libraries+=/home/ad59aphr/build/pharerh-ihm/flex_libs/automation.swc -compiler.include-libraries+=/home/ad59aphr/build/pharerh-ihm/flex_libs/automation_agent.swc -compiler.include-libraries+=/home/ad59aphr/build/pharerh-ihm/flex_libs/automation_dmv.swc -compiler.include-libraries+=/home/ad59aphr/build/pharerh-ihm/flex_libs/qtp.swc -- /home/ad59aphr/build/pharerh-ihm/flex_src/flexClient.mxml
I can't see any difference between the working machine (old one) and this new machine about the debug output.
I tried to copy the old .cache file to new machine (+ changing the number), it gives me :
compile.release:
[mxmlc] Loading configuration file /exec/products/flex_sdk/frameworks/flex-config.xml
[mxmlc] Failed to match the compile target with /home/ad59aphr/build/pharerh-ihm/flex_src/flexClient_381495.cache. The cache file will not be reused.
I tried to change the -incremental to false in the build-flex.xml but same result : stuck.
I tried tu compile in root to avoid any rights problems, same result.
My build-flex.xml :
<?xml version="1.0" encoding="UTF-8"?>
<!-- $HeadURL: http://svnserver.mdp/pharerh/branches/G1R3/developpement/pharerh-ihm/build-flex.xml $ -->
<!-- WARNING: Eclipse auto-generated file.
Any modifications will be overwritten.
To include a user specific buildfile here, simply create one in the same
directory with the processing instruction <?eclipse.ant.import?>
as the first entry and export the buildfile again. -->
<project basedir="." default="release" name="iah-admin-ui">
<property environment="env" />
<property name="WebApp.location" value="${env.TOMCAT_HOME}/webapps/pharerh-ihm" />
<property name="flexClient.location" value="${basedir}" />
<property name="FLEX_HOME" value="${env.FLEX_HOME}" />
<property name="FDS_CONFIG_FILE" value="${env.FLEX_HOME}/frameworks/flex-config.xml" />
<property name="webcontent_location" value="${flexClient.location}/WebContent" />
<property name="FDS_SERVICES_CONFIG_FILE" value="${flexClient.location}/WebContent/WEB-INF/flex/services-config.xml" />
<taskdef resource="flexTasks.tasks" classpath="${env.FLEX_HOME}/ant/lib/flexTasks.jar" />
<target name="version">
<echo message="Version ${maven.pom.version}" />
<copy file="${flexClient.location}/flex_templates/version.properties" toDir="${flexClient.location}/flex_resources/" overwrite="true">
<filterset>
<filter token="generated" value="# ATTENTION : Ce fichier est le resultat d'une generation automatique. Ne pas editer." />
<filter token="version" value="${maven.pom.version}" />
</filterset>
</copy>
</target>
<target name="compile.release" depends="version">
<mxmlc file="${flexClient.location}/flex_src/flexClient.mxml" keep-generated-actionscript="true" incremental="true" services="${FDS_SERVICES_CONFIG_FILE}" >
<accessible>true</accessible>
<optimize>true</optimize>
<strict>true</strict>
<headless-server>true</headless-server>
<load-config filename="${FDS_CONFIG_FILE}" />
<source-path path-element="${env.FLEX_HOME}/frameworks" />
<source-path path-element="${flexClient.location}/flex_resources" />
<source-path path-element="${flexClient.location}/flex_src" />
<source-path path-element="${flexClient.location}/flex_src_gen" />
<compiler.include-libraries dir="${flexClient.location}/flex_libs" append="true" >
<include name="*.swc" />
</compiler.include-libraries>
<compiler.context-root>/</compiler.context-root>
<debug>false</debug>
<metadata description="PhareRH" title="PhareRH" />
</mxmlc>
</target>
<target name="flex.wrapper">
<html-wrapper
title="Bienvenue sur l'application Phare-rh"
height="100%"
width="100%"
bgcolor="#869ca7"
output="${webcontent_location}"
swf="flexClient"
template="express-installation"
history="false"
application="flexClient"
file="flexClient.html"
/>
<!-- Ajout des balises pour la gestion du cache dans le fichier html. -->
<replace file="${webcontent_location}/flexClient.html">
<replacetoken><![CDATA[<head>]]></replacetoken>
<replacevalue><![CDATA[<head>
<!-- Gestion du cache -->
<meta http-equiv="expires" content="0" />
<meta http-equiv="pragma" content="no-cache" />
<meta http-equiv="cache-control" content="no-cache, must-revalidate, max-age=0" />
<meta http-equiv="Cache" Content="no store" />
<meta http-equiv="last-modified" content="" />
]]></replacevalue>
</replace>
</target>
<target name="compile.debug" depends="version">
<mxmlc file="flex_src/flexClient.mxml" keep-generated-actionscript="false" services="${FDS_SERVICES_CONFIG_FILE}">
<accessible>false</accessible>
<optimize>false</optimize>
<strict>true</strict>
<load-config filename="${FDS_CONFIG_FILE}" />
<source-path path-element="${env.FLEX_HOME}/frameworks" />
<compiler.include-libraries dir="flex_libs" append="true">
<include name="*.swc" />
</compiler.include-libraries>
<debug>true</debug>
<metadata description="PhareRH" title="PhareRH">
</metadata>
</mxmlc>
</target>
<target name="release" depends="compile.release">
<move file="flex_src/flexClient.swf" todir="${webcontent_location}" overwrite="true" />
</target>
<target name="packaging" depends="compile.release, flex.wrapper">
<move file="flex_src/flexClient.swf" todir="${webcontent_location}" overwrite="true" />
</target>
<target name="release-debug" depends="compile.debug">
<move file="${APP_ROOT}/flex_src/flexClient.swf" todir="release" overwrite="true" />
</target>
<target name="release-no-compile">
<echo message="WebAppLocation : ${WebApp.location}"/>
<copy file="bin-debug/flexClient.swf" todir="${WebApp.location}" overwrite="true" />
</target>
<target name="properties-encoding">
<exec command="native2ascii -encoding ISO8859_1 flex_resources/election.properties election.properties.ISO8859_1">
</exec>
<move file="election.properties.ISO8859_1" tofile="flex_resources/election.properties" overwrite="true" />
<exec command="native2ascii -encoding ISO8859_1 flex_resources/phareRH.properties phareRH.properties.ISO8859_1">
</exec>
<move file="phareRH.properties.ISO8859_1" tofile="flex_resources/phareRH.properties" overwrite="true" />
<exec command="native2ascii -encoding ISO8859_1 flex_resources/erreurs.properties erreurs.properties.ISO8859_1">
</exec>
<move file="erreurs.properties.ISO8859_1" tofile="flex_resources/erreurs.properties" overwrite="true" />
<exec command="native2ascii -encoding ISO8859_1 flex_resources/veillesociale.properties veillesociale.properties.ISO8859_1">
</exec>
<move file="veillesociale.properties.ISO8859_1" tofile="flex_resources/veillesociale.properties" overwrite="true" />
<exec command="native2ascii -encoding ISO8859_1 flex_resources/rup.properties rup.properties.ISO8859_1">
</exec>
<move file="rup.properties.ISO8859_1" tofile="flex_resources/rup.properties" overwrite="true" />
<exec command="native2ascii -encoding ISO8859_1 flex_resources/administration.properties administration.properties.ISO8859_1">
</exec>
<move file="administration.properties.ISO8859_1" tofile="flex_resources/administration.properties" overwrite="true" />
</target>
</project>
My flex-config.xml
<?xml version="1.0"?>
<!--
ADOBE SYSTEMS INCORPORATED
Copyright 2005-2007 Adobe Systems Incorporated
All Rights Reserved.
NOTICE: Adobe permits you to use, modify, and distribute this file
in accordance with the terms of the license agreement accompanying it.
-->
<flex-config>
<compiler>
<!-- Turn on generation of accessible SWFs. -->
<accessible>false</accessible>
<!-- Specifies the locales for internationalization. -->
<locale>
<locale-element>en_US</locale-element>
</locale>
<!-- List of path elements that form the roots of ActionScript class hierarchies. -->
<!-- not set -->
<!--
<source-path>
<path-element>string</path-element>
</source-path>
-->
<!-- Allow the source-path to have path-elements which contain other path-elements -->
<allow-source-path-overlap>false</allow-source-path-overlap>
<!-- Run the AS3 compiler in a mode that detects legal but potentially incorrect -->
<!-- code. -->
<show-actionscript-warnings>true</show-actionscript-warnings>
<!-- Turn on generation of debuggable SWFs. False by default for mxmlc, -->
<!-- but true by default for compc. -->
<!--
<debug>true</debug>
-->
<!-- List of SWC files or directories to compile against but to omit from -->
<!-- linking. -->
<external-library-path>
<path-element>libs/player/playerglobal.swc</path-element>
</external-library-path>
<!-- Turn on writing of generated/*.as files to disk. These files are generated by -->
<!-- the compiler during mxml translation and are helpful with understanding and -->
<!-- debugging Flex applications. -->
<keep-generated-actionscript>false</keep-generated-actionscript>
<!-- not set -->
<!--
<include-libraries>
<library>string</library>
</include-libraries>
-->
<!-- List of SWC files or directories that contain SWC files. -->
<library-path>
<path-element>libs</path-element>
<path-element>libs/player</path-element>
<path-element>locale/{locale}</path-element>
</library-path>
<namespaces>
<!-- Specify a URI to associate with a manifest of components for use as MXML -->
<!-- elements. -->
<namespace>
<uri>http://www.adobe.com/2006/mxml</uri>
<manifest>mxml-manifest.xml</manifest>
</namespace>
</namespaces>
<!-- Enable post-link SWF optimization. -->
<optimize>true</optimize>
<!-- Keep the following AS3 metadata in the bytecodes. -->
<!-- Warning: For the data binding feature in the Flex framework to work properly, -->
<!-- the following metadata must be kept: -->
<!-- 1. Bindable -->
<!-- 2. Managed -->
<!-- 3. ChangeEvent -->
<!-- 4. NonCommittingChangeEvent -->
<!-- 5. Transient -->
<!--
<keep-as3-metadata>
<name>Bindable</name>
<name>Managed</name>
<name>ChangeEvent</name>
<name>NonCommittingChangeEvent</name>
<name>Transient</name>
</keep-as3-metadata>
-->
<!-- Turn on reporting of data binding warnings. For example: Warning: Data binding -->
<!-- will not be able to detect assignments to "foo". -->
<show-binding-warnings>true</show-binding-warnings>
<!-- toggle whether warnings generated from unused type selectors are displayed -->
<show-unused-type-selector-warnings>true</show-unused-type-selector-warnings>
<!-- Run the AS3 compiler in strict error checking mode. -->
<strict>true</strict>
<!-- Use the ActionScript 3 class based object model for greater performance and better error reporting. -->
<!-- In the class based object model most built-in functions are implemented as fixed methods of classes -->
<!-- (-strict is recommended, but not required, for earlier errors) -->
<as3>true</as3>
<!-- Use the ECMAScript edition 3 prototype based object model to allow dynamic overriding of prototype -->
<!-- properties. In the prototype based object model built-in functions are implemented as dynamic -->
<!-- properties of prototype objects (-strict is allowed, but may result in compiler errors for -->
<!-- references to dynamic properties) -->
<es>false</es>
<!-- List of CSS or SWC files to apply as a theme. -->
<!-- not set -->
<!--
<theme>
<filename>string</filename>
<filename>string</filename>
</theme>
-->
<!-- Turns on the display of stack traces for uncaught runtime errors. -->
<verbose-stacktraces>false</verbose-stacktraces>
<!-- Defines the AS3 file encoding. -->
<!-- not set -->
<!--
<actionscript-file-encoding></actionscript-file-encoding>
-->
<fonts>
<!-- Enables advanced anti-aliasing for embedded fonts, which provides greater clarity for small -->
<!-- fonts. This setting can be overriden in CSS for specific fonts. -->
<!-- NOTE: flash-type has been deprecated. Please use advanced-anti-aliasing <flash-type>true</flash-type> -->
<advanced-anti-aliasing>true</advanced-anti-aliasing>
<!-- The number of embedded font faces that are cached. -->
<max-cached-fonts>20</max-cached-fonts>
<!-- The number of character glyph outlines to cache for each font face. -->
<max-glyphs-per-face>1000</max-glyphs-per-face>
<!-- Defines ranges that can be used across multiple font-face declarations. -->
<!-- See flash-unicode-table.xml for more examples. -->
<!-- not set -->
<!--
<languages>
<language-range>
<lang>englishRange</lang>
<range>U+0020-U+007E</range>
</language-range>
</languages>
-->
<!-- Compiler font manager classes, in policy resolution order-->
<managers>
<manager-class>flash.fonts.JREFontManager</manager-class>
<manager-class>flash.fonts.AFEFontManager</manager-class>
<manager-class>flash.fonts.BatikFontManager</manager-class>
</managers>
<!-- File containing cached system font licensing information produced via
java -cp mxmlc.jar flex2.tools.FontSnapshot (fontpath)
Will default to winFonts.ser on Windows XP and
macFonts.ser on Mac OS X, so is commented out by default.
<local-fonts-snapshot>localFonts.ser</local-fonts-snapshot>
-->
</fonts>
<!-- Array.toString() format has changed. -->
<warn-array-tostring-changes>false</warn-array-tostring-changes>
<!-- Assignment within conditional. -->
<warn-assignment-within-conditional>true</warn-assignment-within-conditional>
<!-- Possibly invalid Array cast operation. -->
<warn-bad-array-cast>true</warn-bad-array-cast>
<!-- Non-Boolean value used where a Boolean value was expected. -->
<warn-bad-bool-assignment>true</warn-bad-bool-assignment>
<!-- Invalid Date cast operation. -->
<warn-bad-date-cast>true</warn-bad-date-cast>
<!-- Unknown method. -->
<warn-bad-es3-type-method>true</warn-bad-es3-type-method>
<!-- Unknown property. -->
<warn-bad-es3-type-prop>true</warn-bad-es3-type-prop>
<!-- Illogical comparison with NaN. Any comparison operation involving NaN will evaluate to false because NaN != NaN. -->
<warn-bad-nan-comparison>true</warn-bad-nan-comparison>
<!-- Impossible assignment to null. -->
<warn-bad-null-assignment>true</warn-bad-null-assignment>
<!-- Illogical comparison with null. -->
<warn-bad-null-comparison>true</warn-bad-null-comparison>
<!-- Illogical comparison with undefined. Only untyped variables (or variables of type *) can be undefined. -->
<warn-bad-undefined-comparison>true</warn-bad-undefined-comparison>
<!-- Boolean() with no arguments returns false in ActionScript 3.0. Boolean() returned undefined in ActionScript 2.0. -->
<warn-boolean-constructor-with-no-args>false</warn-boolean-constructor-with-no-args>
<!-- __resolve is no longer supported. -->
<warn-changes-in-resolve>false</warn-changes-in-resolve>
<!-- Class is sealed. It cannot have members added to it dynamically. -->
<warn-class-is-sealed>true</warn-class-is-sealed>
<!-- Constant not initialized. -->
<warn-const-not-initialized>true</warn-const-not-initialized>
<!-- Function used in new expression returns a value. Result will be what the -->
<!-- function returns, rather than a new instance of that function. -->
<warn-constructor-returns-value>false</warn-constructor-returns-value>
<!-- EventHandler was not added as a listener. -->
<warn-deprecated-event-handler-error>false</warn-deprecated-event-handler-error>
<!-- Unsupported ActionScript 2.0 function. -->
<warn-deprecated-function-error>true</warn-deprecated-function-error>
<!-- Unsupported ActionScript 2.0 property. -->
<warn-deprecated-property-error>true</warn-deprecated-property-error>
<!-- More than one argument by the same name. -->
<warn-duplicate-argument-names>true</warn-duplicate-argument-names>
<!-- Duplicate variable definition -->
<warn-duplicate-variable-def>true</warn-duplicate-variable-def>
<!-- ActionScript 3.0 iterates over an object's properties within a "for x in target" statement in random order. -->
<warn-for-var-in-changes>false</warn-for-var-in-changes>
<!-- Importing a package by the same name as the current class will hide that class identifier in this scope. -->
<warn-import-hides-class>true</warn-import-hides-class>
<!-- Use of the instanceof operator. -->
<warn-instance-of-changes>true</warn-instance-of-changes>
<!-- Internal error in compiler. -->
<warn-internal-error>true</warn-internal-error>
<!-- _level is no longer supported. For more information, see the flash.display package. -->
<warn-level-not-supported>true</warn-level-not-supported>
<!-- Missing namespace declaration (e.g. variable is not defined to be public, private, etc.). -->
<warn-missing-namespace-decl>true</warn-missing-namespace-decl>
<!-- Negative value will become a large positive value when assigned to a uint data type. -->
<warn-negative-uint-literal>true</warn-negative-uint-literal>
<!-- Missing constructor. -->
<warn-no-constructor>false</warn-no-constructor>
<!-- The super() statement was not called within the constructor. -->
<warn-no-explicit-super-call-in-constructor>false</warn-no-explicit-super-call-in-constructor>
<!-- Missing type declaration. -->
<warn-no-type-decl>true</warn-no-type-decl>
<!-- In ActionScript 3.0, white space is ignored and '' returns 0. Number() returns -->
<!-- NaN in ActionScript 2.0 when the parameter is '' or contains white space. -->
<warn-number-from-string-changes>false</warn-number-from-string-changes>
<!-- Change in scoping for the this keyword. Class methods extracted from an -->
<!-- instance of a class will always resolve this back to that instance. In -->
<!-- ActionScript 2.0 this is looked up dynamically based on where the method -->
<!-- is invoked from. -->
<warn-scoping-change-in-this>false</warn-scoping-change-in-this>
<!-- Inefficient use of += on a TextField.-->
<warn-slow-text-field-addition>true</warn-slow-text-field-addition>
<!-- Possible missing parentheses. -->
<warn-unlikely-function-value>true</warn-unlikely-function-value>
<!-- Possible usage of the ActionScript 2.0 XML class. -->
<warn-xml-class-has-changed>false</warn-xml-class-has-changed>
</compiler>
<!-- compute-digest: writes a digest to the catalog.xml of a library. Use this when the library will be used as a
cross-domain rsl.-->
<!-- compute-digest usage:
<compute-digest>boolean</compute-digest>
-->
<!-- A list of runtime shared library URLs to be loaded before applications start. -->
<!-- not set -->
<!--
<runtime-shared-libraries>
<url>string</url>
<url>string</url>
</runtime-shared-libraries>
-->
<!-- runtime-shared-library-path: specifies a SWC or directory to link against and an RSL URL to load with optional failover URLs -->
<runtime-shared-library-path>
<path-element>libs/framework.swc</path-element>
<rsl-url>framework_3.0.0.477.swz</rsl-url>
<policy-file-url></policy-file-url>
<rsl-url>framework_3.0.0.477.swf</rsl-url>
<policy-file-url></policy-file-url>
</runtime-shared-library-path>
<!-- static-link-runtime-shared-libraries: statically link the libraries specified by the -runtime-shared-libraries-path option.-->
<static-link-runtime-shared-libraries>true</static-link-runtime-shared-libraries>
<!-- target-player: specifies the version of the player the application is targeting.
Features requiring a later version will not be compiled into the application.
The minimum value supported is "9.0.0".-->
<!-- target-player usage:
<target-player>version</target-player>
-->
<!-- Enables SWFs to access the network. -->
<use-network>true</use-network>
<!-- Metadata added to SWFs via the SWF Metadata tag. -->
<metadata>
<title>Adobe Flex 3 Application</title>
<description>http://www.adobe.com/products/flex</description>
<publisher>unknown</publisher>
<creator>unknown</creator>
<language>EN</language>
</metadata>
<!-- licenses: specifies a list of product and serial number pairs. -->
<!-- not set -->
<licenses>
<license>
<product>flexbuilder3</product>
<serial-number>XXXXXXXXXXXXXXXXX</serial-number>
</license>
</licenses>
</flex-config>
I think the "flexClient_381495.cache (No such >file or directory)" message is innocuous. That's just standard output from ant or the ant task, right? I think I've seen messages like this a million times, but it's been a while since I used ant...
You mentioned that it hangs after printing that output, but sometimes you also see compiler warnings. I'm guessing it is entering the compile phase every time. Sometimes you get far enough into compiling to see some warning messages.
This sounds like you might want to specify a bigger heap size for the JVM. Some details on doing that here and here.
One big "Hi" for all humans from planet Tridion :).
I am trying to make component links editable in SDL Tridion UI 2012.
I have one component that contains multi-valued component links as one of fields.
When I put following in DWT
<!-- TemplateBeginRepeat name="componentLink" -->
<!-- TemplateBeginIf cond="TemplateRepeatIndex<3" -->
<li>
<a href="#" tridion:href="##RenderComponentField(FieldPath+"componentLink",TemplateRepeatIndex)##">
Link${TemplateRepeatIndex}
</a>
</li>
<!-- TemplateEndIf -->
<!-- TemplateEndRepeat -->
Inside Template Builder as a result I got following:
<li>tcm:8-625</tcdl:ComponentField>">Link0</li>
<li>tcm:8-626</tcdl:ComponentField>">Link1</li>
<li>tcm:8-627</tcdl:ComponentField>">Link2</li>
As expected an error occured on "Default Finish Actions" on a page level
Unable to find proper value for tridion:href
Is it needed to extract component links inside C# TBB in some previous action or exist any other way to resolve this( Enabling component links for SDL Tridion UI)?
In my "new UI VM" I have the following code in a design:
<tcdl:ComponentField name="LinkText">
<a tridion:href="##Component.Fields.Target##">${LinkText}</a>
</tcdl:ComponentField>
The linked Component is editable in the new UI. The tcdl:ComponentField is processed to wrap the appropriate in-context editing instructions around the link. You should be able translate that on to your code pretty easily...
Thank you Jeremy, manually adding <tcdl:ComponentField> tag resolve this issue.
Here is final code that correctly resolve component links on a page level:
<!-- TemplateBeginRepeat name="componentLink" -->
<!-- TemplateBeginIf cond="TemplateRepeatIndex<3" -->
<li>
<tcdl:ComponentField name="componentLink">
<a tridion:href="##Field##">Link${TemplateRepeatIndex} </a>
</tcdl:ComponentField>
</li>
<!-- TemplateEndIf -->
<!-- TemplateEndRepeat -->
I am working on DWT TBB in SDL Tridion 2011 SP1.
I have a embedded field "body" which is multivalued. In this embedded field I have one more simple Text field "value", which is again multivalued.
To render the "value" field I have to use two repeating loops.
But I am unable to differentiate the Indeces of the both loops.
I have written as follows.
<!-- TemplateBeginRepeat name="Component.Fields.body" -->
<!-- TemplateBeginRepeat name="Component.Fields.body[${TemplateRepeatIndex}].value" -->
<div>##RenderComponentField("Fields.body[${TemplateRepeatIndex}].value", TemplateRepeatIndex)## </div>
<!-- TemplateEndRepeat -->
<!-- TemplateEndRepeat -->
I am unable to render the fields.
Can any one help how to handle multiple nested regions in DWT TBB.
Thank you.
The Tridion practice page that Neil referred to is a good reference. But that page shows how to generically iterate over all embedded fields. In cases where you know the field name, things get a bit easier. In you case, this is all that is needed in your DWT:
<!-- TemplateBeginRepeat name="body" -->
<!-- TemplateBeginRepeat name="Field.value" -->
<div>##RenderComponentField(FieldPath+".value",
TemplateRepeatIndex)## </div>
<!-- TemplateEndRepeat -->
<!-- TemplateEndRepeat -->
Line by line:
Iterate over the values of the body field of your Component
Iterate over the values of the value subfield of your body embeddable schema
At this stage the FieldPath refers to the current body value, so body[0], body[1], etc. and TemplateRepeatIndex is the index of the current value. So we can construct the correct RenderComponentField call with this knowledge.
Example
I have a Component with two body fields, each with two value fields. So the XML is:
<Content xmlns="uuid:8841d68e-7b1b-45cd-a6d6-7e7da5de3ef9">
<body>
<value>body1.value1</value>
<value>body1.value2</value>
</body>
<body>
<value>body2.value1</value>
<value>body2.value2</value>
</body>
</Content>
The output from the above DWT on this Component is:
<div><tcdl:ComponentField name="body[0].value"
index="0">body1.value1</tcdl:ComponentField></div>
<div><tcdl:ComponentField name="body[0].value"
index="1">body1.value2</tcdl:ComponentField></div>
<div><tcdl:ComponentField name="body[1].value"
index="0">body2.value1</tcdl:ComponentField></div>
<div><tcdl:ComponentField name="body[1].value"
index="1">body2.value2</tcdl:ComponentField></div>
Debugging these situations
Many people have problems writing constructs like these. I am no exception, I have just found that I can get most cases working by knowing that the crucial variables are: Field, FieldPath and TemplateRepeatIndex. When in doubt, simply embed this fragment into your DWT inside every TemplateBeginRepeat.
(FieldPath=##FieldPath##, TemplateRepeatIndex=##TemplateRepeatIndex##)
Does the FieldPath variable not help you here?
See the Tridion Practice site for an example of iterating over multivalue embedded fields.
As you noticed already, you cannot use the outer loop index inside the inner loop. The inner loop index will hide the outer loop index. Therefore, you need a workaround. I can think of 2 that I used in the past:
Use a C# TBB (either assembly or fragment) to generate the output. This is not a very nice solution, but it is practical. You could at least generate the output of the inner loop and store the individual values in Package variables. Then in the outer loop you can simply iterate over the values and include them in the output. Example: create variables called body_0, body_1, etc. Then output them inside the outer loop using ##body_${TemplateRepeatIndex}##
Use Dreamweaver functions to simulate the inner loop index. You can have a function to Set a Package item variable, and one to Increment it. Then use this variable inside the loops. Example:
<!-- TemplateBeginRepeat name="Component.Fields.body" -->
##Set("i", 0)##
<!-- TemplateBeginRepeat name="Component.Fields.body[${i}].value" -->
<div>##Component.Fields.body[${i}].value[${TemplateRepeatIndex}]</div>
<!-- TempalteEndRepeat -->
##Increment("i")##
You will have to write the Set and Increment DWT functions yourself to store and increment a value in the Package.
Try this way:-
<!-- TemplateBeginRepeat name="Component.Fields.body" -->
##Push("PrimaryIndex", TemplateRepeatIndex)##
<!-- TemplateBeginRepeat name="Component.Fields.body[${PrimaryIndex}].value" -->
##Push("SecondaryIndex", TemplateRepeatIndex)##
<div>##RenderComponentField("Fields.body[${PrimaryIndex}].value", ${SecondaryIndex})## </div>
<!-- TemplateEndRepeat -->
<!-- TemplateEndRepeat -->
UPDATE 1:
Just I got an idea on this. How about doing this way?
<!-- TemplateBeginRepeat name="Component.Fields.body" -->
<!-- TemplateBeginRepeat name="value" -->
<div>##Field##</div>
<!-- TemplateEndRepeat -->
<!-- TemplateEndRepeat -->
Without using any TemplateRepeatIndex
For those who are using Tridion 2009 without SP1 version (like our customer), 'FieldPath' variable cannot be used as suggested in the earlier answers. But there is a simple way to achieve this in DWT itself as given below in the example code:
<!-- TemplateBeginRepeat name="Component.body" -->
<!-- TemplateBeginRepeat name="Field.value" -->
<div> ##Field##> </div>
<!-- TemplateEndRepeat -->
<!-- TemplateEndRepeat -->