当前位置: 首页 > 知识库问答 >
问题:

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

焦宏硕
2023-03-14

我正在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.缺少方法异常:没有方法的签名:静态com.liferay.portal.service.UserLocalServiceUtil.addUserBackWorkflow()适用于参数类型:(java.lang.,java.lang.,java.lang.布尔,java.lang.字符串,java.lang.字符串,java.lang.布尔,java.lang.字符串,java.lang.字符串,java.lang.整数,java.lang.字符串,java.util.区域设置,java.lang.字符串,java.lang.字符串,java.lang.字符串,java.lang.整数,java. lang.整数,java. lang.布尔,java. lang.整数,java. lang.整数,java. lang.整数,java. lang.字符串,java. util.java. util.java. util.java. util.ArrayList, java. lang.布尔值,com。ServiceContext)值:[52881,52700, false, test, test, false,01234567,01234567@abc.com,0,,en_US, First Add,, Last Add,0,0, true,1,1,1970, Jobs,[52741],[52741],[52709], [], false,com.liferay.portal.service.ServiceContext@5355c009]可能的解决方案:addUserBackWorkflow(long, long, boolean, java. lang.字符串, java. lang.字符串,布尔,java. lang。字符串, java. lang.字符串,长,java. lang.字符串,java. util.语言环境, java. lang.字符串, java. lang.字符串, java. lang.String, int, int, boolean, int, int, int, java. lang.String,[J,[J,[J, boolean, com. VA. port. service.ServiceContext)在groovy. lang。在groovy. lang的MetaClassInp. invkeStatic Missing方法(MetaClassInp. java: 1357)。在org. codehaus. groovy. runtime. allsite.调用(Static MetaClassSite. java: 50)在org. codehaus. groovy. runtime. call。defaultCall(CallSiteArray. java: 40)在org. codehaus. groovy. runtime.AbstractCallSite. call(AbstractCallSite. java: 116)at Script28. run(Script28. groovy: 44)at com. livay. portal. cript. groovy.GroovyExecutor. ava(GroovyExecutor. java: 58)在(很多省略...)

我尝试用一个等效的beanshell脚本运行,也遇到了源于方法addUserBackWorkflow的问题。

因此,我尝试只使用addUser方法,该方法在脚本执行期间没有异常。但是,它在添加适当的组和联系人以及生成运行时异常方面存在问题。

从liferay论坛的各种帖子中,我发现addUserWithWorkflow是一种更好的方法。然而,我在上面遇到了调用错误。

UserLocalServiceUtil。addUserWithWorkflow API文档

我遵循的脚本提示

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

请让我知道,如果我需要提供更多的细节。

请帮忙!

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

修改了脚本,将所有的长数组定义为long[]userGroupIds=[]......它确实有助于缩小范围,并且以另一种方式阅读Groovy留档来定义数组也有所帮助。

//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()];

共有1个答案

瞿宏儒
2023-03-14

嗯,错误消息说:

没有方法的签名:静态<代码>UserLocalServiceUtil。addUserWithWorkflow()适用于参数类型:[参数类型的长列表]

比较API文档及其接口(一个接一个),确保您使用的是Liferay 6.2(在链接6.2 API函数时)。

一个很好的猜测是,当您链接的API希望看到long[]

 类似资料:
  • 为了创建以下形式的json文件,我制作了如下的Groovy脚本,但出现了一个错误。 怎么了? 我在下一个网站。我认为我正确地编写了Groovy示例代码。https://docs.groovy-lang.org/latest/html/gapi/groovy/json/JsonBuilder.html 示例json 很棒的剧本 詹金斯错误状态 groovy.lang.MisSingProperty

  • 我试图使用groovy脚本更新sling: resourceType和aem中的节点名称。每次当我运行脚本时,我都会得到“脚本执行失败错误”。

  • 我是groovy的新手。我有这样的代码。 串味 从这个客户端映射中,我需要迭代appName和enable的值。为此,我使用了get方法。。。我对此不确定。 使用此get方法时,我遇到以下错误。因为我是groovy新手,所以我不知道这里发生了什么 棒极了。lang.MissingMethodException:没有方法com的签名。康卡斯特。csv。哈克索。SecureFirebaseRestCl

  • 当我运行npm运行json: server时,我得到了这个错误。 npm错误!缺少脚本:json: 当我打开日志文件时,它是这样说的: 0信息,如果它以ok结束1详细cli['C:\Program Files\nodejs\node.exe',1详细cli'C:\用户\IanP\AppData\漫游\npm\node_modules\npm\bin\npm-cli.js',1详细cli'run',

  • 我试图在服务器端运行我的Angular应用程序,但我遇到了以下错误: npm错误!缺少脚本:Build:Universal

  • 问题内容: 在我的jenkins管道文件中,我使用从.json文件读取构建配置。但是,这引入了需要 在进程内“脚本批准” 页面上批准的代码。通过GUI执行此操作时,效果很好。 但是,我还有一个脚本会自动设置我的jenkins机器,该机器将创建不需要任何GUI操作即可使用的现成机器。该脚本已使用jenkins脚本控制台批准从属启动命令。在脚本控制台中执行此操作的常规代码如下所示。 效果很好,但现在我