2013-05-06 3 views
5

Мне нужно обновить информацию о существующем пользователе в моей базе данных programmaticaly Мне нужно обновить значения даты рождения имени пользователя в таблице user_ в базе данных Liferay В основном мне нужно запустить запрос на обновление.Обновление информации о пользователе в базе данных liferay

ответ

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]"); 

По первому запросу обновления можно изменить ПгвЬЫат, LastName из пользователя и второго запросом вы можете изменить дату рождения пользователя.

Надеюсь, что это ясно!

2

Попробуйте этот код ..

Здесь я обновляя только пользователя Имя (остальное вы можете сделать по-своему)

идентификатор пользователя = Вы можете получить это с помощью дисплея темы

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

Надеюсь, это поможет вам !!!

4

Это зависит от того, нужно ли это делать в коде портлета или путем отправки прямого запроса в db.

Liferay в основном кэширует все, поэтому, если вы обновляете запись в базе данных Liferay во время работы портала, скорее всего, запись уже находится в кеше, поэтому новые значения столбцов вообще не будут прочитаны. Вам нужно очистить кэш базы данных, перейдя в Панель управления -> Администрирование сервера.

Наоборот, если вы должны сделать такое в коде портлета, вы должны указать один из методов услуг Liferay. Вы пытаетесь обновить пользователя, поэтому вы должны вызвать метод UserLocalServiceUtil.updateUser (или UserServiceUtil.updateUser, если вы также хотите проверить разрешения). Вы можете видеть, что есть несколько методов updateUser, один из которых имеет множество параметров, а другой имеет только компонент в качестве параметра. В то время как первый содержит всю бизнес-логику (валидация, переиндексирование, обновление связанных объектов и т. Д.), Второй был просто автогенерирован и не должен использоваться (за исключением случаев, когда вы абсолютно точно знаете, что делаете). Таким образом, используйте метод с большим количеством параметров, просто передавая user.getCOLUMN() (например, user.getFacebookId()), если вы не хотите изменять значение этого столбца.

Надеется, что это помогает, и извините за мой плохой английский ...

+0

Кстати, вместо того, чтобы просто обновить БД (и так обходя каждый бизнес и проверки логики), можно также назвать 'UserServiceUtil.updateUser' м этад через веб-сервис SOAP или JSON ... –

7

Не рекомендуется обновить базу данных LifeRay напрямую, вы должны использовать Liferay API вместо того, чтобы делать эти вещи. В соответствии с this liferay forum post:

База данных Liferay не публикуется по какой-либо причине. Причина в том, что API делает значительно больше материалов, чем просто простые инструкции вставки SQL. Есть внутренние управляемые внешние ключи, есть вещи, которые обновляются не только в базе данных, но также в индексах, в jackrabbit и т. Д.

Поскольку все это управляется кодом, а не базой данных, любые обновления код изменит, как и когда база данных будет обновлена. Даже если это сработает для вас в версии 6.1 GA1, GA2 выйдет через пару недель, и база данных/код может снова измениться.

Использование только API - единственный способ гарантировать, что изменения выполнены правильно.

достаточно Ok проповедования и вернуться к вашей проблеме, вот несколько способов, которые вы можете сделать это:

  1. вы можете создать пользовательский портлет и использовать услуги Liferay и обновляете имя пользователя, дату рождения и т.д., используя UserLocalServiceUtil.updateUser() метод.
  2. Или вы можете создать клиент веб-сервис на основе SOAP или JSON, чтобы обновить данные, которые назвали бы тот же метод
  3. Или вы можете использовать Liferay's Beanshell tool, чтобы сделать это с помощью панели управления, следуя некоторые код для обновления пользователь (создан только для вас ASAP):

    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"); 
    

    контакт код построен с помощью исходного кода Liferay для UserLocalServiceImpl#updateUser метода

В случае, если вы задаетесь вопросом, что является боб оболочки и куда поместить этот код, здесь, где вы можете найти его в Liferay Панель управления Панель управления ->Сервер -> Администрирование сервера ->Script

Liferay Beanshell

+0

Красивый подробный. Не знал, что с beanshell мы могли бы это сделать. Спасибо –

+0

для beanshell, действительно спасибо. – asifaftab87

Смежные вопросы