ปัญหาขณะเพิ่มฟิลด์ acustom ใน liferay

ฉันกำลังสร้างผู้ใช้ด้วยตนเองโดยการสร้างแบบฟอร์มรายละเอียดผู้ใช้และเรียก UserLocalServiceUtil.addUser() ทุกอย่างทำงานได้ดี ฉันสามารถเพิ่มผู้ใช้ใหม่ได้ เมื่อคลิกปุ่มบันทึกในแบบฟอร์มรายละเอียดผู้ใช้ของฉัน ฉันกำลังส่งรายละเอียดแบบฟอร์มไปยังคลาสการดำเนินการของฉัน addUser() ในวิธีนี้ ฉันกำลังเรียกใช้วิธีต่อไปนี้เพื่อสร้างผู้ใช้

try {
                UserLocalServiceUtil.addUser(creatorUserId, companyId, autoPassword, password1,
                    password2, autoScreenName, screenName, emailAddress, mySite, openId,
                    locale, firstName, middleName, lastName, prefixId, suffixId, male,
                    birthdayMonth, birthdayDay, birthdayYear, jobTitle, groupIds,
                    organizationIds, roleIds, userGroupIds, sendEmail, serviceContext);


            } catch(Exception e){
                System.out.println(e.getMessage());
            }  

ผู้ใช้กำลังสร้างด้วยโค้ดด้านบน แต่ปัญหาคือฉันต้องการเพิ่มค่าฟิลด์ที่กำหนดเองในขณะที่เพิ่มผู้ใช้ด้วย รหัสเพื่อเพิ่มฟิลด์ที่กำหนดเองมีดังนี้

if(user.getExpandoBridge().hasAttribute("manager"))
                    {

                            user.getExpandoBridge().setAttribute("manager", manager);
                            System.out.println("Custom field is avaliable now !!! Update User entry ");
                    }
                    else
                    {
                            user.getExpandoBridge().addAttribute("manager");
                            user.getExpandoBridge().setAttribute("manager", manager);
                            System.out.println("Custom field is not avaliable !!! Update User entry ");
                    }

ตอนนี้ฉันจะรันโค้ดในวิธี addUser() ได้อย่างไร ปัญหาของฉันคือฉันกำลังเพิ่มผู้ใช้โดยทางโปรแกรมโดยการเรียก UserLocalServiceUtil.addUser() ดังนั้นฉันจึงไม่มี ID ผู้ใช้ที่สร้างขึ้นใหม่ ดังนั้นหากไม่มี ID ผู้ใช้ ฉันจะรับออบเจ็กต์ผู้ใช้สำหรับผู้ใช้ใหม่และดำเนินการตรรกะการแทรกของฟิลด์ที่กำหนดเองได้อย่างไร

ข้อเสนอแนะใด ๆ กรุณา ..

ฉันต้องสร้างผู้ใช้ด้วยค่าฟิลด์ที่กำหนดเองในเวลาเดียวกัน

ขอบคุณล่วงหน้า..


person Vinod    schedule 04.04.2015    source แหล่งที่มา


คำตอบ (2)


ลองสิ่งนี้

try {
          User newUser =  UserLocalServiceUtil.addUser(creatorUserId, companyId, autoPassword, password1,
                password2, autoScreenName, screenName, emailAddress, mySite, openId,
                locale, firstName, middleName, lastName, prefixId, suffixId, male,
                birthdayMonth, birthdayDay, birthdayYear, jobTitle, groupIds,
                organizationIds, roleIds, userGroupIds, sendEmail, serviceContext);


        } catch(Exception e){
            System.out.println(e.getMessage());
        }  

หลังจากนั้นสำหรับค่าขยาย

if(newUser.getExpandoBridge().hasAttribute("manager"))
                {

                        newUser.getExpandoBridge().setAttribute("manager", manager);
                        System.out.println("Custom field is avaliable now !!! Update User entry ");
                }
                else
                {
                        newUser.getExpandoBridge().addAttribute("manager");
                        newUser.getExpandoBridge().setAttribute("manager", manager);
                        System.out.println("Custom field is not avaliable !!! Update User entry ");
                }
person aston    schedule 06.04.2015

วิธีการ UserLocalServiceUtil.addUser ส่งคืนผู้ใช้ที่สร้างขึ้น - เช่น อินสแตนซ์ของคลาสผู้ใช้ คุณสามารถใช้อินสแตนซ์เพื่อเพิ่มแอตทริบิวต์ expo ได้ (และหากคุณต้องการ อินสแตนซ์จะมีรหัสที่เตรียมใช้งานไว้แล้ว)

อีกวิธีหนึ่งคือการสร้าง Service Wrapper สำหรับ UserLocalService Wrapper บริการจะขยายการใช้งานบริการดั้งเดิมและทำการปรับแต่งเพิ่มเติม ในกรณีของคุณ คุณสามารถแทนที่วิธี addUser ได้ โดยปล่อยให้การใช้งานเดิมเพิ่มผู้ใช้ (super.addUser(...)) แล้วเพิ่มแอตทริบิวต์ expando

สำหรับรายละเอียดเพิ่มเติม โปรดดู การแทนที่บริการพอร์ทัลในคู่มือนักพัฒนา Liferay 6.2

person Tomas Pinos    schedule 05.04.2015