3

SOAP API を使用してプログラムでユーザーを無効にしたいと考えています。どうやってやるの?Partner API を使用しており、Developer エディションを持っています。ユーザーのアクセス許可を管理しています。私はこのリンクを通過しました。ユーザーを無効化/非アクティブ化するのに役立つコードを探しています。

これは私のコードです:

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

ただし、UI で [My Name] > [Setup] > [Manage Users] > [Users] に移動すると、ユーザー abcd@pqrs.com が選択されている場合は常に [Active] チェック ボックスが表示されます :-(

4

2 に答える 2

8

実際に更新を Salesforce に送り返しているようには見えませんIsActive。ローカルで false に設定しているだけです。PartnerConnection.update(SObject[] sObjects)Salesforce に変更を反映させるには、次のように呼び出しを使用する必要があります。

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();
}
于 2012-09-20T13:13:53.127 に答える
1

ID がわかっている場合は、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);
        }
    }
}
于 2016-03-10T19:26:04.463 に答える