Liferay 控制台 Groovy 脚本缺少方法错误

Liferay Console Groovy script missing method error

我正在 Liferay 控制面板服务器管理脚本控制台中测试一个快速 groovy 脚本。我需要尝试看看是否可以使用 Liferay API.

以编程方式添加新用户

我是 groovy 的新手,可能犯了一个新手错误。我不确定为什么会收到错误消息,我一直在尝试并四处寻找解决方案。

我在 tomcat.

上使用 Liferay 6.2 EE sp7

我的脚本代码是

import com.liferay.portal.model.Company;
import com.liferay.portal.model.Contact;
import com.liferay.portal.model.Role;
import com.liferay.portal.model.ContactConstants;
import com.liferay.portal.model.RoleConstants;

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 com.liferay.counter.service.CounterLocalServiceUtil;
import com.liferay.portal.service.RoleLocalServiceUtil;
import com.liferay.portal.service.ServiceContext;
import com.liferay.portal.service.ServiceContextFactory;
import com.liferay.portal.kernel.util.StringPool;
import com.liferay.portal.kernel.util.LocaleUtil;

long companyId = 52700 // my instance id
long creatorUserId = 52881 //my userid I am testing and running the script with

List<Long> userGroupIds = []

ServiceContext serviceContext = ServiceContextFactory.getInstance(User.class.getName(), actionRequest);

Company company = CompanyLocalServiceUtil.getCompanyById(companyId);
long companyGroupId = company.getGroup().getGroupId();
List<Long> groupIds = []
groupIds.add(companyGroupId as long)

Role rolePu = RoleLocalServiceUtil.getRole(companyId, RoleConstants.POWER_USER);
List<Long> roleIds = []
roleIds.add(rolePu.getRoleId() as long)

try {

    User user = UserLocalServiceUtil.addUserWithWorkflow(creatorUserId, companyId, 
        false, "test", "test", false, "01234567",
        "01234567@abc.com", 0, " ", LocaleUtil.getDefault(),
        "First Add", " ", "Last Add", 0, 0, true,
        1, 1, 1970, "Job", groupIds,
        null, roleIds, userGroupIds, false,
        serviceContext);
} catch(e) {
    out.println("""<div class="portlet-msg-error">${e}</div>""")
    e.printStackTrace(out)
}

我得到的错误是:

groovy.lang.MissingMethodException: No signature of method: static com.liferay.portal.service.UserLocalServiceUtil.addUserWithWorkflow() is applicable for argument types: (java.lang.Long, java.lang.Long, java.lang.Boolean, java.lang.String, java.lang.String, java.lang.Boolean, java.lang.String, java.lang.String, java.lang.Integer, java.lang.String, java.util.Locale, java.lang.String, java.lang.String, java.lang.String, java.lang.Integer, java.lang.Integer, java.lang.Boolean, java.lang.Integer, java.lang.Integer, java.lang.Integer, java.lang.String, java.util.ArrayList, java.util.ArrayList, java.util.ArrayList, java.util.ArrayList, java.lang.Boolean, com.liferay.portal.service.ServiceContext) values: [52881, 52700, false, test, test, false, 01234567, 01234567@abc.com, 0, , en_US, First Add, , Last Add, 0, 0, true, 1, 1, 1970, Job, [52741], [52741], [52709], [], false, com.liferay.portal.service.ServiceContext@5355c009] Possible solutions: addUserWithWorkflow(long, long, boolean, java.lang.String, java.lang.String, boolean, java.lang.String, java.lang.String, long, java.lang.String, java.util.Locale, java.lang.String, java.lang.String, java.lang.String, int, int, boolean, int, int, int, java.lang.String, [J, [J, [J, [J, boolean, com.liferay.portal.service.ServiceContext) at groovy.lang.MetaClassImpl.invokeStaticMissingMethod(MetaClassImpl.java:1357) at groovy.lang.MetaClassImpl.invokeStaticMethod(MetaClassImpl.java:1343) at org.codehaus.groovy.runtime.callsite.StaticMetaClassSite.call(StaticMetaClassSite.java:50) at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:40) at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:116) at Script28.run(Script28.groovy:44) at com.liferay.portal.scripting.groovy.GroovyExecutor.eval(GroovyExecutor.java:58) at (lots omitted...)

我已经尝试 运行 使用等效的 beanshell 脚本 运行 解决方法 addUserWithWorkflow 引起的问题。

所以我尝试仅使用 addUser 方法,该方法在脚本执行期间无异常运行。但是,它在添加适当的组和联系人时遇到了问题,并生成了 运行 时间异常。

从各种 liferay 论坛帖子中,我了解到 addUserWithWorkflow 是更好的方法。但是,我运行进入上面的调用错误。

UserLocalServiceUtil.addUserWithWorkflow API docs

Script tips I followed

我想证明我可以使用脚本控制台中的 API 正确添加用户。

如果我需要提供更多详细信息,请告诉我。

请帮忙!

根据以下 Olaf 的见解更新分辨率:

我更改了脚本以将所有长数组定义为 "long[] userGroupIds = []" .... 我克服了上面的错误。它确实有助于缩小范围并阅读 Groovy documentation另一种定义数组的方法也有帮助。

//long[] userGroupIds = {};
//long[] userGroupIds = [] as long[].
//List<Long> userGroupIds = []

long[] userGroupIds = []

... 
Company company = CompanyLocalServiceUtil.getCompanyById(companyId);
long companyGroupId = company.getGroup().getGroupId();
//long groupIds[] = {companyGroupId};
//List<Long> groupIds = []
//groupIds.add(companyGroupId as long)
long[] groupIds = [companyGroupId];

Role rolePu = RoleLocalServiceUtil.getRole(companyId, RoleConstants.POWER_USER);
//List<Long> roleIds = []
//roleIds.add(rolePu.getRoleId() as long)
long[] roleIds = [rolePu.getRoleId()];

嗯,错误消息说:

No signature of method: static ...UserLocalServiceUtil.addUserWithWorkflow() is applicable for argument types: [long list of argument types]

比较 API 文档及其界面(一一比较),并确保您使用的是 Liferay 6.2(因为您正在 linking 6.2 API 函数.

一个很好的猜测是,此错误消息抱怨四个 ArrayList 参数(接近列表末尾),而您 link 希望看到的 API long[]