我想创建5-6个SalesForce用户在一次通过使用SOAP API编程。我正在使用合作伙伴API,并且我有一个开发版沙箱。我正在从数据库表中检索用户信息,然后通过使用API,我想一次创建这5-6个用户。我可以创建一个用户,但是在创建另一个用户后抛出错误LICENSE_LIMIT_EXCEEDED:License Limit Exceeded。
这是我的代码的快照,它从数据库中检索用户信息,然后以编程方式创建用户:
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。
发布于 2012-09-26 22:27:14
在开发者组织中,您不能拥有超过两个具有Salesforce许可证的活动用户。要创建具有Chatter Free许可证的用户,您只需为其分配Chatter Free User的配置文件-它将根据分配给他们的配置文件自动正确设置其许可证( UserType字段不可编辑)。
编辑:要获得Chatter Free用户的配置文件Id而不对其进行硬编码(因为它可能因组织而异),您必须对其进行查询。我修改了您的代码以包含此查询,并对其进行了修改,以便只对PartnerConnection.create进行一个调用(这只是一个建议,因为它将节省SOAP调用的开销):
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"));
}
}发布于 2012-09-27 00:33:33
您需要将ProfileId设置为与可用许可证类型关联的配置文件,在您的情况下设置为Chatter Free、Salesforce Platform或其他可用许可证类型上的配置文件。每个配置文件都绑定到一个特定的UserLicense记录,例如:
(要查看更多信息,请对UserLicense对象执行Query All )。
因此,您需要查询可用许可证类型的Profile记录,然后将其与您的新用户关联,例如
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"));
}https://stackoverflow.com/questions/12602648
复制相似问题