07-15-2019 03:50 AM
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
07-15-2019 05:21 AM
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.
07-15-2019 06:07 AM
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
Explore our Alfresco products with the links below. Use labels to filter content by product module.