1

Liferay を使用してモジュールを開発しています。の一部には、従業員の休暇ステータスが Pending であるデータベースからのレコードのみを取得することが含まれます。「保留中」のレコードを取得する必要があるコードは次のとおりです。

  @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

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 に答える