Как отключить / деактивировать пользователя SalesForce с помощью SOAP API?
Я хочу отключить пользователя программно с помощью SOAP API. Как я могу это сделать? Я использую Partner API и у меня есть Developer edition. У меня есть управление пользователями persmissions set. Я прошел через Эту связь. Я ищу код, который может помочь мне отключить / деактивировать пользователя.
Вот мой код:
import com.sforce.soap.partner.Connector;
import com.sforce.soap.partner.PartnerConnection;
import com.sforce.soap.partner.QueryResult;
import com.sforce.soap.partner.sobject.SObject;
import com.sforce.ws.ConnectionException;
import com.sforce.ws.ConnectorConfig;
public class DeactivateUser {
public static void main(String[] args) {
ConnectorConfig config = new ConnectorConfig();
config.setUsername("waprau@waprau.com");
config.setPassword("sjjhggrhgfhgffjdgj");
PartnerConnection connection = null;
try {
connection = Connector.newConnection(config);
QueryResult queryResults = connection.query("SELECT Username, IsActive from User");
if (queryResults.getSize() > 0) {
for (SObject s : queryResults.getRecords()) {
if(s.getField("Username").equals("abcd@pqrs.com")){
System.out.println("Username: " + s.getField("Username"));
s.setField("IsActive", false);
}
System.out.println("Username: " + s.getField("Username") + " IsActive: " + s.getField("IsActive"));
}
}
} catch (ConnectionException ce) {
ce.printStackTrace();
}
}
}
Это вывод:
Username: waprau@waprau.com IsActive: true
Username: jsmith@ymail.net IsActive: false
Username: abcd@pqrs.com
Username: abcd@pqrs.com IsActive: false
Однако в пользовательском интерфейсе, когда я иду к своему имени > настройка > управление пользователями > пользователи, он всегда показывает 'активный' флажок для пользователя abcd@pqrs.com выбрано:- (
2 ответа:
Не похоже, что вы действительно отправляете обновление обратно в Salesforce - вы просто устанавливаете
IsActive
в false локально. Чтобы система Salesforce отразила ваши изменения, вам потребуется использовать вызовPartnerConnection.update(SObject[] sObjects)
, например:try { connection = Connector.newConnection(config); QueryResult queryResults = connection.query("SELECT Id, Username, IsActive from User"); if ( queryResults.getSize() > 0 ) { // keep track of which records you want to update with an ArrayList ArrayList<SObject> updateObjects = new ArrayList<SObject>(); for (SObject s : queryResults.getRecords()) { if ( s.getField("Username").equals("abcd@pqrs.com") ){ System.out.println("Username: " + s.getField("Username")); s.setField("Id", null); s.setField("IsActive", false); } updateObjects.add(s); // if you want to update all records...if not, put this in a conditional statement System.out.println("Username: " + s.getField("Username") + " IsActive: " + s.getField("IsActive")); } // make the update call to Salesforce and then process the SaveResults returned SaveResult[] saveResults = connection.update(updateObjects.toArray(new SObject[updateObjects.size()])); for ( int i = 0; i < saveResults.length; i++ ) { if ( saveResults[i].isSuccess() ) System.out.println("record " + saveResults[i].getId() + " was updated successfully"); else { // There were errors during the update call, so loop through and print them out System.out.println("record " + saveResults[i].getId() + " failed to save"); for ( int j = 0; j < saveResults[i].getErrors().length; j++ ) { Error err = saveResults[i].getErrors()[j]; System.out.println("error code: " + err.getStatusCode().toString()); System.out.println("error message: " + err.getMessage()); } } } } } catch (ConnectionException ce) { ce.printStackTrace(); }
Можно напрямую работать с записью пользователя без запроса SOQL, если вы уже знаете идентификатор.
SalesforceSession session = ...; sObject userSObject = new sObject(); userSObject.Id = "00570000001V9NA"; userSObject.type = "User"; userSObject.Any = new System.Xml.XmlElement[1]; XmlDocument xmlDocument = new XmlDocument(); XmlElement fieldXmlElement = xmlDocument.CreateElement("IsActive"); fieldXmlElement.InnerText = bool.FalseString; userSObject.Any[0] = fieldXmlElement; SaveResult[] result = session.Binding.update(new sObject[] { userSObject }); foreach(SaveResult sr in result) { System.Diagnostics.Debug.WriteLine(sr.success + " " + sr.id); if(!sr.success) { foreach(Error error in sr.errors) { System.Diagnostics.Debug.WriteLine(error.statusCode + " " + error.message); } } }