首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建超出LICENSE_LIMIT_EXCEEDED:License限制的SalesForce用户时出错

创建超出LICENSE_LIMIT_EXCEEDED:License限制的SalesForce用户时出错
EN

Stack Overflow用户
提问于 2012-09-26 21:17:07
回答 2查看 4K关注 0票数 4

我想创建5-6个SalesForce用户在一次通过使用SOAP API编程。我正在使用合作伙伴API,并且我有一个开发版沙箱。我正在从数据库表中检索用户信息,然后通过使用API,我想一次创建这5-6个用户。我可以创建一个用户,但是在创建另一个用户后抛出错误LICENSE_LIMIT_EXCEEDED:License Limit Exceeded

这是我的代码的快照,它从数据库中检索用户信息,然后以编程方式创建用户:

代码语言:javascript
复制
SObject user = new SObject();

user.setType("User");

while (rs.next()) {
    user.setField("Alias", rs.getString("Alias"));
    user.setField("Email", rs.getString("Email"));
    user.setField("EmailEncodingKey", rs.getString("EmailEncodingKey"));
    user.setField("LanguageLocaleKey", "En_US");
    user.setField("LastName", rs.getString("LastName"));
    user.setField("LocaleSidKey", rs.getString("LocaleSidKey"));
    user.setField("TimeZoneSidKey", "America/Los_Angeles");
    user.setField("Username", rs.getString("Username"));
    user.setField("UserPermissionsCallCenterAutoLogin", "false");
    user.setField("UserPermissionsMarketingUser", "false");
    user.setField("UserPermissionsOfflineUser", "false");
    user.setField("ProfileId", connection.getUserInfo().getProfileId());

    SaveResult[] results = connection.create(new SObject[] { user });
    System.out.println("Created user: " + results[0].getId());

    if (results[0].isSuccess())
        out.println("Created user: " + results[0].getId());
    else
        out.println("Error: " + results[0].getErrors()[0].getStatusCode() + 
                           ":" + results[0].getErrors()[0].getMessage());

}

QueryResult queryResults = connection
        .query("SELECT Id, Name from User "
                + "ORDER BY CreatedDate DESC LIMIT 5");

if (queryResults.getSize() > 0) {
    for (SObject s : queryResults.getRecords()) {
        out.println("Id: " + s.getField("Id") + " - Name: "
                + s.getField("Name"));
    }
}

在这里我可以创建一个用户,但是在创建一个用户之后,它抛出了错误LICENSE_LIMIT_EXCEEDED:License Limit Exceeded

以下是可用的许可证数量:

我可以看到SalesForce的剩余许可证是0。但是,我只想创建一些不一定是SalesForce用户的用户。它可以是任何类型的用户,这只是应该能够登录到我的组织。当我试图创建一些不同类型的用户时,比如'Chatter Free‘,它通过使用user.setField("UserType", "CsnOnly")获得了5000个许可证,它给出了错误INVALID_FIELD_FOR_INSERT_UPDATE:Unable to create/update fields: UserType

以下是我的SalesForce中的用户:

如何解决这个问题?我只想创建一些用户从数据库,然后可以登录到SalesForce。他们不一定要是管理员。他们可以拥有最低权限,但他们应该能够登录到SalesForce。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-09-26 22:27:14

在开发者组织中,您不能拥有超过两个具有Salesforce许可证的活动用户。要创建具有Chatter Free许可证的用户,您只需为其分配Chatter Free User的配置文件-它将根据分配给他们的配置文件自动正确设置其许可证( UserType字段不可编辑)。

编辑:要获得Chatter Free用户的配置文件Id而不对其进行硬编码(因为它可能因组织而异),您必须对其进行查询。我修改了您的代码以包含此查询,并对其进行了修改,以便只对PartnerConnection.create进行一个调用(这只是一个建议,因为它将节省SOAP调用的开销):

代码语言:javascript
复制
QueryResult profileQuery = connection.query("select Id from Profile where Name = 'Chatter Free User' limit 1");
SObject chatterFreeProfile;
if ( profileQuery.getSize() > 0 ) {
    chatterFreeProfile = profileQuery.getRecords()[0];
}

ArrayList<SObject> users = new ArrayList<SObject>();
while (rs.next()) {
    SObject user = new SObject();
    user.setType("User");
    user.setField("Alias", rs.getString("Alias"));
    user.setField("Email", rs.getString("Email"));
    user.setField("EmailEncodingKey", rs.getString("EmailEncodingKey"));
    user.setField("LanguageLocaleKey", "En_US");
    user.setField("LastName", rs.getString("LastName"));
    user.setField("LocaleSidKey", rs.getString("LocaleSidKey"));
    user.setField("TimeZoneSidKey", "America/Los_Angeles");
    user.setField("Username", rs.getString("Username"));
    user.setField("UserPermissionsCallCenterAutoLogin", "false");
    user.setField("UserPermissionsMarketingUser", "false");
    user.setField("UserPermissionsOfflineUser", "false");
    if ( chatterFreeProfile != null )
        user.setField("ProfileId", chatterFreeProfile.getField("Id"));
    else
        user.setField("ProfileId", connection.getUserInfo().getProfileId());
    users.add(user);
}

if ( users.size() > 0 ) {
    SaveResult[] results = connection.create(users.toArray(new SObject[users.size()]));
    for ( int i = 0; i < saveResults.length; i++ ) {
        if (results[i].isSuccess())
            out.println("Created user: " + results[i].getId());
        else
            out.println("Error: " + results[i].getErrors()[0].getStatusCode() + ":" + results[i].getErrors()[0].getMessage());
    }
}

QueryResult queryResults = connection.query("SELECT Id, Name from User ORDER BY CreatedDate DESC LIMIT 5");
if ( queryResults.getSize() > 0 ) {
    for ( SObject s : queryResults.getRecords() ) {
        out.println("Id: " + s.getField("Id") + " - Name: " + s.getField("Name"));
    }
}
票数 4
EN

Stack Overflow用户

发布于 2012-09-27 00:33:33

您需要将ProfileId设置为与可用许可证类型关联的配置文件,在您的情况下设置为Chatter Free、Salesforce Platform或其他可用许可证类型上的配置文件。每个配置文件都绑定到一个特定的UserLicense记录,例如:

  • 'SFDC‘:完整版Salesforce license
  • 'CSN_User’:Chatter Free license
  • ‘AUL’:Salesforce Platform license

(要查看更多信息,请对UserLicense对象执行Query All )。

因此,您需要查询可用许可证类型的Profile记录,然后将其与您的新用户关联,例如

代码语言:javascript
复制
QueryResult profileQuery = connection.query(
    "SELECT Id FROM Profile "
    + "WHERE UserLicense.Name = 'Chatter Free' LIMIT 1"
);
SObject chatterFreeProfile;
if ( profileQuery.getSize() > 0 ) {
    chatterFreeProfile = profileQuery.getRecords()[0];
    user.setField("ProfileId", chatterFreeProfile.getField("Id"));
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12602648

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档