2013-05-06 35 views

Trả lời

1
update user_ set firstName="New First Name", lastName="New Last Name" where emailAddress="[email protected]"; 
update contact_ set birthday="date string" where contactId in(select contactId from user_ where emailAddress="[email protected]"); 

Bằng truy vấn cập nhật đầu tiên bạn có thể thay đổi firstName, lastName của người dùng và theo truy vấn thứ hai, bạn có thể thay đổi ngày sinh của người dùng.

Hy vọng rõ ràng!

2

Hãy thử mã này ..

Ở đây tôi đang cập nhật chỉ sử dụng First name (nghỉ ngơi bạn có thể làm theo cách riêng của bạn)

userId = bạn có thể có được điều này sử dụng màn hình chủ đề

User user = UserLocalServiceUtil.getUser(userId); 
user.setFirstName("new name"); 
UserLocalServiceUtil.updateUser(user); 

Hy vọng điều này sẽ giúp bạn !!!

4

Tùy thuộc vào việc bạn phải thực hiện điều này trong mã portlet hay bằng cách gửi truy vấn trực tiếp đến db.

Liferay cơ bản lưu trữ mọi thứ, vì vậy nếu bạn cập nhật một bản ghi trong cơ sở dữ liệu Liferay trong khi cổng đang chạy, rất có thể bản ghi đó đã có trong bộ đệm, và vì vậy giá trị cột mới sẽ không được đọc. Bạn sẽ phải xóa cache cơ sở dữ liệu bằng cách vào Control Panel -> Server Administration.

Ngược lại, nếu bạn phải làm một điều như vậy trong mã portlet, bạn nên gọi một trong các phương thức của dịch vụ Liferay. Bạn đang cố cập nhật Người dùng, vì vậy bạn nên gọi phương thức UserLocalServiceUtil.updateUser (hoặc UserServiceUtil.updateUser nếu bạn cũng muốn kiểm tra quyền). Bạn có thể thấy có một số phương thức khác nhau là updateUser, một trong số chúng có rất nhiều tham số và một phương thức khác chỉ có bean làm tham số. Trong khi cái đầu tiên chứa tất cả logic nghiệp vụ (xác thực, reindexing, cập nhật các thực thể liên quan, vv), cái thứ hai chỉ được tạo tự động và không được sử dụng (trừ khi bạn hoàn toàn biết mình đang làm gì). Vì vậy, sử dụng phương pháp có nhiều thông số, chỉ cần chuyển user.getCOLUMN() (ví dụ: user.getFacebookId()) nếu bạn không muốn thay đổi giá trị của cột đó.

Hy vọng nó giúp, và xin lỗi vì tiếng Anh xấu của tôi ...

+0

BTW, thay vì chỉ cập nhật db (và do đó bỏ qua tất cả các logic kinh doanh và xác nhận), bạn cũng có thể gọi là 'UserServiceUtil.updateUser' m ethod qua SOAP hoặc dịch vụ web JSON ... –

7

Nó không được khuyến khích để cập nhật cơ sở dữ liệu liferay trực tiếp, bạn nên sử dụng Liferay API thay vì làm những điều này. Theo this liferay forum post:

Cơ sở dữ liệu Liferay không được xuất bản vì lý do. Lý do là API thực hiện nhiều thứ hơn so với các câu lệnh chèn SQL đơn giản. Có các khóa ngoại được quản lý nội bộ, có những thứ được cập nhật không chỉ trong cơ sở dữ liệu mà còn trong các chỉ mục, trong jackrabbit, v.v.

Vì tất cả điều này được quản lý bởi mã chứ không phải bởi cơ sở dữ liệu, mọi cập nhật vào mã sẽ thay đổi cách thức và thời điểm cơ sở dữ liệu được cập nhật. Ngay cả khi nó đã làm việc cho bạn trong một phiên bản 6,1 GA1, GA2 là sắp ra trong một vài tuần và cơ sở dữ liệu/mã có thể thay đổi một lần nữa.

Gắn bó với API là cách duy nhất để đảm bảo các thay đổi được thực hiện đúng.

Ok giảng dạy đủ và trở lại vấn đề của bạn, sau đây là một số cách bạn có thể làm những:

  1. bạn có thể xây dựng một portlet tùy chỉnh và sử dụng dịch vụ liferay và cập nhật tên người dùng, ngày sinh vv sử dụng UserLocalServiceUtil.updateUser() phương pháp.
  2. Hoặc bạn có thể xây dựng một khách hàng dịch vụ web dựa trên SOAP hoặc JSON để cập nhật các chi tiết đó sẽ gọi phương thức tương tự
  3. Hoặc bạn có thể sử dụng Liferay's Beanshell tool để làm điều này từ bảng điều khiển, sau đây là một số mã để cập nhật người sử dụng (tạo riêng cho bạn càng sớm càng tốt):

    import com.liferay.portal.model.Company; 
    import com.liferay.portal.model.Contact; 
    import com.liferay.portal.model.ContactConstants; 
    import com.liferay.portal.model.User; 
    import com.liferay.portal.service.CompanyLocalServiceUtil; 
    import com.liferay.portal.service.ContactLocalServiceUtil; 
    import com.liferay.portal.service.UserLocalServiceUtil; 
    
    import java.util.Calendar; 
    import java.util.Date; 
    import java.util.GregorianCalendar; 
    
    long companyId = 10135; // this would be different for you 
    
    User user = UserLocalServiceUtil.getUserByEmailAddress(companyId, "[email protected]"); 
    
    // Updating User's details 
    
    user.setEmailAddress("[email protected]"); 
    user.setFirstName("First Test"); 
    user.setLastName("Last Test"); 
    user.setScreenName("myTestScreenName"); 
    
    UserLocalServiceUtil.updateUser(user, false); 
    
    // Updating User's Birthday 
    
    // December 12, 1912 
    int birthdayMonth = 11; 
    int birthdayDay = 12; 
    int birthdayYear = 1912; 
    
    Calendar cal = new GregorianCalendar(); 
    cal.set(birthdayYear, birthdayMonth, birthdayDay, 0, 0, 0); 
    cal.set(Calendar.MILLISECOND, 0); 
    
    Date birthday = cal.getTime();  
    
    System.out.println("Updated User: " + user + "\nBirthdate to be updated: " + birthday); 
    
    long contactId = user.getContactId(); 
    
    Contact contact = ContactLocalServiceUtil.getContact(contactId); 
    
    if(contact == null) { 
    
        contact = ContactLocalServiceUtil.createContact(contactId); 
    
        Company company = CompanyLocalServiceUtil.getCompany(user.getCompanyId()); 
    
        contact.setCompanyId(user.getCompanyId()); 
        contact.setUserName(StringPool.BLANK); 
        contact.setCreateDate(new Date()); 
        contact.setAccountId(company.getAccountId()); 
        contact.setParentContactId(ContactConstants.DEFAULT_PARENT_CONTACT_ID); 
    } 
    
    contact.setModifiedDate(new Date()); 
    contact.setBirthday(birthday); 
    
    ContactLocalServiceUtil.updateContact(contact, false); 
    
    System.out.println("Users birthdate updated successfully"); 
    

    mã tiếp xúc được xây dựng với sự giúp đỡ của mã nguồn Liferay cho UserLocalServiceImpl#updateUser phương pháp

Trong trường hợp bạn đang tự hỏi là những gì đậu vỏ và nơi để đặt mã này, đây là nơi bạn có thể tìm thấy nó trong Liferay Control Panel Control Panel ->server ->quản lý máy chủ ->Script

Liferay Beanshell

+0

Chi tiết độc đáo. Không biết với vỏ sò chúng ta có thể làm một điều như vậy. Cảm ơn –

+0

cho beanshell, thực sự cảm ơn. – asifaftab87

Các vấn đề liên quan