1

我正在使用 Liferay 开发一个模块。一部分涉及仅从数据库中获取员工休假状态为待处理的那些记录。我必须获取“待处理”记录的代码是:

  @SuppressWarnings("unchecked")
   public static List<Employee> getEmployeeData() throws    PortalException, SystemException{

   List<Employee> employeeDetails;

   try{
    int totalEmployees = EmployeeLocalServiceUtil.getEmployeesCount();
            for(Employee emp: employeeDetails   {
               if(emp.getEmpStatus.equals("Pending")  {
    employeeDetails=  EmployeeLocalServiceUtil.getEmployees(0,totalEmployees);
           }
    }           
                      }catch(SystemException se){
                          employeeDetails = Collections.emptyList();
                     }


                     return employeeDetails;
                }

上面的代码获取所有详细信息 - 待处理和非待处理。我知道这是由于上面代码中的语句而发生的:

employeeDetails= EmployeeLocalServiceUtil.getEmployees(0,totalEmployees);

因为它获取所有行。那么我应该如何构建和修改我的代码以仅获取待处理的详细信息?

4

3 回答 3

2

当您在 Liferay 中处理自定义实体时,您可以在 service.xml 中使用 finder 标签来处理这种情况。在 service.xml 中为 empStatus 字段定义查找器。

<finder name="EmpStatus" return-type="Collection">
  <finder-column name="empStatus"/>
</finder>

这将在* *Persistence.java 中创建 finder[findByEmpStatus(String status)] 方法,该方法将根据 status 返回特定的行,现在您需要手动将方法添加到您的 *(Local)ServiceImpl.java 文件中。这些方法将调用您的 *persitence.finderMethodName() 方法。

高温下,

于 2013-04-20T16:26:04.753 回答
1

一个快速但非常糟糕的做法是让您的代码保持这种更改:

List<Employee> employeeDetails = new ArrayList<Employee>;
try{

List<Employees> allEmployees = EmployeeLocalServiceUtil.getAllEmployees();

        for(Employee emp: allEmployees {
           if(emp.getEmpStatus.equals("Pending")  {
employeeDetails.add(emp);
       }
}return employeeDetails;      

现在,正确的方法是:

  1. 正如@Pankaj Kathiriya 已经提议的那样,添加一个Finder。然后,构建服务
  2. 转到 EmployeeLocalServiceImpl,并添加

    public List getAllEmployeesByEmpStatus (String status) { 
    try { 
        return employeePersistence.findByEmpStatus(status); 
    } catch (SystemException e) {
        e.printStackTrace(); return Collections.emptyList(); 
        }
    }
    

然后再次构建服务

  1. 将您的代码替换为

        List employeeDetails = EmployeeLocalServiceUtil.getAllEmployeesByEmpStatus("Pending") ; 
    return employeeDetails;
    
于 2013-04-23T12:16:11.867 回答
0

我有一个解决方案。我在论坛中收到了在 liferay 中使用动态查询的建议。

这很简单。

在 liferay 上阅读有关动态查询的 wiki。

好吧,回答我自己的问题,这是我找到的解决方案:

  DynamicQuery dynamicQuery = DynamicQueryFactoryUtil.forClass(LeaveApplication.class);

  dynamicQuery.add(PropertyFactoryUtil.forName("EmpStatus").eq("Pending"));

然后我返回那些状态未决的人..

希望它可以帮助某人..欢迎更多建议:)

于 2013-04-22T10:32:31.903 回答