Hi,
I want to dynamically populate the dropdown values in alfresco share. I have created a datalist to store the dropdown values and created a class extending the ListOfValuesConstraint class and calling it from the model file. But there is no option to get the search service or node service to look for the datalist values from the custom class. I dont want to store the dropdown values in database since the maintenence also will be difficult. To add a new value later we may have to contact the DB team insert values on that table. Please see the code below.
Model File configuration
<constraint name="hrrocesDropdownList"
type="com.poc.ddl.ProcessDropdownListConstraint">
<parameter name="allowedValues">
<list>
</list>
</parameter>
</constraint>
<property name="hrrocess">
<title>Process</title>
<type>d:text</type>
<mandatory>false</mandatory>
<index enabled="true">
<tokenised>TRUE</tokenised>
<facetable>false</facetable>
</index>
<constraints>
<constraint ref="hrrocesDropdownList" />
</constraints>
</property>
share-config-custom.xml
<field id="hrrocess"
label-id="form.field.label.hr_process" set="hrDocSet">
<control
template="/org/alfresco/components/form/controls/selectone.ftl" />
</field>
public class ProcessDropdownListConstraint extends ListOfValuesConstraint{
private static ServiceRegistry serviceRegistry;
@Override
public void initialize() {
}
//I am unable to get the service registry object or node Service or Search service here
@Override
public void setAllowedValues(List allowedValues) {
List<String> allowedValues1 = new ArrayList<String>();
allowedValues1.add("Payroll");
allowedValues1.add("Holiday and Absense");
allowedValues1.add("Hiring");
System.out.println("allowedValues1 "+allowedValues1);
super.setAllowedValues(allowedValues1);
}
Tried below code not working
ApplicationContext ctx = ApplicationContextHelper.getApplicationContext();
System.out.println("ctx "+ctx);
Also tried this way still getting application context as null.
public class ProcessDropdownListConstraint extends ListOfValuesConstraint implements ApplicationContextAware{
private static ServiceRegistry registry;
private static ApplicationContext applicationContext;
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
this.applicationContext = applicationContext;
}
}
can anyone pelase help me on this?
Thanks in Advance,
Sandhya
You should declare your ProcessDropdownListConstraint as an Spring bean an XML in order to inject ServiceRegistry.
You could find also interesting this approach:
This project allows the users to maintain the values in the datalists using Alfresco Share web interface.
Thanks for the reply. I have added ProcessDropdownListConstraint class in a bean as below.
<bean id="ProcessDropdownListConstraint" class="com.util.ProcessDropdownListConstraint"
depends-on="repositoryEndBootstrapBean" lazy-init="default">
<property name="nodeService">
<ref bean="nodeService"/>
</property>
<property name="searchService">
<ref bean="searchService"/>
</property>
</bean>
I am getting the below error.
Caused by: org.springframework.beans.MethodInvocationException: Property 'allowedValues' threw exception; nested exception is org.alfresco.error.AlfrescoRuntimeException: 06150022 SOLR queries can not be executed while the repository is bootstrapping
Caused by: org.alfresco.error.AlfrescoRuntimeException: 06150022 SOLR queries can not be executed while the repository is bootstrapping
Ask for and offer help to other Alfresco Content Services Users and members of the Alfresco team.
Related links:
By using this site, you are agreeing to allow us to collect and use cookies as outlined in Alfresco’s Cookie Statement and Terms of Use (and you have a legitimate interest in Alfresco and our products, authorizing us to contact you in such methods). If you are not ok with these terms, please do not use this website.