Cascade drop-down list in Share

cancel
Showing results for 
Search instead for 
Did you mean: 
eramesh
Active Member

Cascade drop-down list in Share

Hi,

I got requirement to have cascade drop-down list in Share,  change the constraint list of the second drop-down list based upon the value selected in the first drop-down list.

Any sample how to implement this would be great help!

Thanks!

6 Replies
douglascrp
Advanced II

Re: Cascade drop-down list in Share

Hello.

Please, take a look at the following projects:

GitHub - douglascrp/share-form-control-dependency: I've made some changes to the source code in orde... 

GitHub - douglascrp/alfresco-value-assistance: Configurable value assistance module for Alfresco Sha... 

The first one is simple, as it uses static lists of values.

The second one uses datalistas as the source for the list of values.

eramesh
Active Member

Re: Cascade drop-down list in Share

Thanks Doughlas!

I was looking for the first one with static list of values, added both the "filtered-selectone.ftl" and "parent-filter-selectione.ftl" to my existing sample model project. The first drop-down looks good but the second one displays the first half of the value not the second part of the value.

and it displays like this in the details view page.

Can you please let me know what I'm missing.

Thank you very much for your help!

douglascrp
Advanced II

Re: Cascade drop-down list in Share

Can you share your xml files? Both the content model and the share config?

eramesh
Active Member

Re: Cascade drop-down list in Share

Hi Douglas,

Here is my content-model.xml 

<constraints>
<constraint name="acme:areaConstraint" type="LIST">
<parameter name="allowedValues">
<list>
<value></value>
<value>1!1</value>
<value>2!2</value>
<value>3!3</value>
</list>
</parameter>
</constraint>

<constraint name="acme:subAreaConstraint" type="LIST">
<parameter name="allowedValues">
<list>
<value></value>
<value>1!A1</value>
<value>1!A2</value>
<value>1!A3</value>
<value>2!B1</value>
<value>2!B2</value>
<value>3!C1</value>
<value>3!C2</value>
</list>
</parameter>
</constraint>
</constraints>

<types>
<type name="acme:document">
<title>Base document type</title>
<parent>cm:content</parent>
<properties>
<property name="acme:documentId">
<title>Document Identification Number</title>
<type>d:text</type>
</property>
</properties>
</type>

<type name="acme:testdoc1">
<title>Test Doc1 document type</title>
<parent>cm:content</parent>
<properties>
<property name="acme:customerId">
<title>Customer Identification Number</title>
<type>d:text</type>
</property>
<property name="acme:areaProperty">
<title>Area</title>
<type>d:text</type>
<mandatory>false</mandatory>
<constraints>
<constraint ref="acme:areaConstraint" />
</constraints>
</property>
<property name="acme:subAreaProperty">
<title>Sub Area</title>
<type>d:text</type>
<mandatory>false</mandatory>
<constraints>
<constraint ref="acme:subAreaConstraint" />
</constraints>
</property>
</properties>
</type>

</types>

And here is my  share-config-custom.xml content

<alfresco-config>
<!-- creating nodes -->
<config evaluator="model-type" condition="acme:testdoc1">
<forms>
<!-- Search form -->
<form id="search">
<field-visibility>
<show id="cm:name" />
<show id="cm:title" force="true" />
<show id="cm:description" force="true" />
<show id="acme:areaProperty" />
<show id="acme:subAreaProperty" />

</field-visibility>
<appearance>
<!-- acme:testdoc1 -->
<set id="acmetestdoc1" appearance="fieldset" label-id="set.label.acme_testdoc1" />
<field id="acme:areaProperty" set="acmetestdoc1" label-id="prop.acme_areaProperty"
help-id="help.acme_areaProperty">

<control
template="/org/alfresco/components/form/controls/parent-filter-selectone.ftl">

<control-param name="filteredProperty">acme_subAreaProperty
</control-param>
</control>
</field>
<field id="acme:subAreaProperty" set="acmetestdoc1" label-id="prop.acme_subAreaProperty"
help-id="help.acme_subAreaProperty">

<control
template="/org/alfresco/components/form/controls/filtered-selectone.ftl" />

</field>
</appearance>
</form>
<!-- default, Create content -->
<form>
<field-visibility>
<show id="cm:name" />
<show id="cm:title" force="true" />
<show id="cm:description" force="true" />
<show id="acme:areaProperty" />
<show id="acme:subAreaProperty" />
</field-visibility>
<appearance>
<!-- edms:application -->
<set id="acmetestdoc1" appearance="fieldset" label-id="set.label.acme_testdoc1" />
<field id="acme:areaProperty" set="acmetestdoc1" label-id="prop.acme_areaProperty"
help-id="help.acme_areaProperty">

<control
template="/org/alfresco/components/form/controls/parent-filter-selectone.ftl">

<control-param name="filteredProperty">acme_subAreaProperty
</control-param>
</control>
</field>
<field id="acme:subAreaProperty" set="acmetestdoc1" label-id="prop.acme_subAreaProperty"
help-id="help.acme_subAreaProperty">

<control
template="/org/alfresco/components/form/controls/filtered-selectone.ftl" />

</field>
</appearance>
</form>
</forms>
</config>
<!-- existing nodes -->
<config evaluator="node-type" condition="acme:testdoc1" replace="true">
<forms>
<!-- Document Details, Edit Properties -->
<form>
<field-visibility>
<show id="cm:name" />
<show id="cm:title" force="true" />
<show id="cm:description" force="true" />
<show id="mimetype" for-mode="view" />
<show id="cm:author" for-mode="view" force="true" />
<show id="size" for-mode="view" />
<show id="cm:creator" for-mode="view" />
<show id="cm:created" for-mode="view" />
<show id="cm:modifier" for-mode="view" />
<show id="cm:modified" for-mode="view" />
<show id="acme:areaProperty" />
<show id="acme:subAreaProperty" />
</field-visibility>
<appearance>
<set id="acmetestdoc1" appearance="fieldset" label-id="set.label.acme_testdoc1" />
<field id="acme:areaProperty" set="acmetestdoc1" label-id="prop.acme_areaProperty"
help-id="help.acme_areaProperty">

<control
template="/org/alfresco/components/form/controls/parent-filter-selectone.ftl">

<control-param name="filteredProperty">acme_subAreaProperty
</control-param>
</control>
</field>
<field id="acme:subAreaProperty" set="acmetestdoc1" label-id="prop.acme_subAreaProperty"
help-id="help.acme_subAreaProperty">

<control
template="/org/alfresco/components/form/controls/filtered-selectone.ftl" />

</field>
</appearance>
</form>
<!-- Edit Properties pop-up -->
<form id="doclib-simple-metadata">
<field-visibility>
<show id="cm:name" />
<show id="cm:title" force="true" />
<show id="cm:description" force="true" />
<show id="acme:areaProperty" />
<show id="acme:subAreaProperty" />
</field-visibility>
<appearance>
<set id="acmetestdoc1" appearance="fieldset" label-id="set.label.acme_testdoc1" />
<field id="acme:areaProperty" set="acmetestdoc1" label-id="prop.acme_areaProperty"
help-id="help.acme_areaProperty">

<control
template="/org/alfresco/components/form/controls/parent-filter-selectone.ftl">

<control-param name="filteredProperty">acme_subAreaProperty
</control-param>
</control>
</field>
<field id="acme:subAreaProperty" set="acmetestdoc1" label-id="prop.acme_subAreaProperty"
help-id="help.acme_subAreaProperty">

<control
template="/org/alfresco/components/form/controls/filtered-selectone.ftl" />

</field>
</appearance>
</form>
<!-- InLine Edit N/A <form id="doclib-inline-edit" /> -->
</forms>
</config>


</alfresco-config>
douglascrp
Advanced II

Re: Cascade drop-down list in Share

Sorry for the late response.

How about the localization files?

You should try to set the values using the pattern bellow:

listconstraint.sample_areaConstraint.1!1=Área A
saikatrahul
Member II

Re: Cascade drop-down list in Share

Try the bellow code for filtered-selectone.ftl 

 

<#include "/org/alfresco/components/form/controls/common/utils.inc.ftl" />

<#if field.control.params.optionSeparator??>
<#assign optionSeparator=field.control.params.optionSeparator>
<#else>
<#assign optionSeparator=",">
</#if>
<#if field.control.params.labelSeparator??>
<#assign labelSeparator=field.control.params.labelSeparator>
<#else>
<#assign labelSeparator="|">
</#if>

<#assign fieldValue=field.value>

<#if fieldValue?string == "" && field.control.params.defaultValueContextProperty??>
<#if context.properties[field.control.params.defaultValueContextProperty]??>
<#assign fieldValue = context.properties[field.control.params.defaultValueContextProperty]>
<#elseif args[field.control.params.defaultValueContextProperty]??>
<#assign fieldValue = args[field.control.params.defaultValueContextProperty]>
</#if>
</#if>

<div class="form-field">
<#if form.mode == "view">
<div class="viewmode-field">
<#if field.mandatory && !(fieldValue?is_number) && fieldValue?string == "">
<span class="incomplete-warning"><img src="${url.context}/res/components/form/images/warning-16.png" title="${msg("form.field.incomplete")}" /><span>
</#if>
<span class="viewmode-label">${field.label?html}:</span>
<#if fieldValue?string == "">
<#assign valueToShow=msg("form.control.novalue")>
<#else>
<#assign valueToShow=fieldValue>
<#if field.control.params.options?? && field.control.params.options != "">
<#list field.control.params.options?split(optionSeparator) as nameValue>
<#if nameValue?index_of(labelSeparator) == -1>
<#if nameValue == fieldValue?string || (fieldValue?is_number && fieldValue?c == nameValue)>
<#assign valueToShow=nameValue>
<#break>
</#if>
<#else>
<#assign choice=nameValue?split(labelSeparator)>
<#if choice[0] == fieldValue?string || (fieldValue?is_number && fieldValue?c == choice[0])>
<#assign valueToShow=msgValue(choice[1])>
<#break>
</#if>
</#if>
</#list>
</#if>
</#if>
<span class="viewmode-value">${valueToShow?html}</span>
</div>
<#else>
<label for="${fieldHtmlId}">${field.label?html}:<#if field.mandatory><span class="mandatory-indicator">${msg("form.required.fields.marker")}</span></#if></label>
<#if field.control.params.options?? && field.control.params.options != "">
<select id="${fieldHtmlId}" name="${field.name}" tabindex="0"
<#if field.description??>title="${field.description}"</#if>
<#if field.control.params.size??>size="${field.control.params.size}"</#if>
<#if field.control.params.styleClass??>class="${field.control.params.styleClass}"</#if>
<#if field.control.params.style??>style="${field.control.params.style}"</#if>
<#if field.disabled && !(field.control.params.forceEditable?? && field.control.params.forceEditable == "true")>disabled="true"</#if>>
<#list field.control.params.options?split(optionSeparator) as nameValue>
<option value="${nameValue?html?split("|")[0]}"<#if nameValue?split("|")[0] == fieldValue?string || (fieldValue?is_number && fieldValue?c == nameValue?split("|")[0])> selected="selected"</#if>>
<#if nameValue?index_of("!") != -1>
${nameValue?split("|")[1]?split("!")[1]}
</#if>
</option>
</#list>
</select>
<@formLib.renderFieldHelp field=field />
<#else>
<div id="${fieldHtmlId}" class="missing-options">${msg("form.control.selectone.missing-options")}</div>
</#if>
</#if>
</div>

Hope this will help.