세일즈포스닷컴에서 제공하는 AJAX Toolkit을 정리한다.


Ajax Toolkit


  • AJAX Toolkit

    
    
    
    var account = new sforce.SObject("Account"); account.type = “Account”; account.Name = "my new account"; var result = sforce.connection.create([account](account.md)); if (result[0](0.md).getBoolean("success")) { } else { } result = sforce.connection.update([account](account.md)); if (result[0](0.md).getBoolean("success")) { } else { } var delResult = sforce.connection.deleteIds([account.Id](account.Id.md)); if (delResult[0](0.md).getBoolean("success")) { } else { }

  • Debug 모드 설정

    sforce.debug.trace = true;
    sforce.debug.log("남길 로그");


Browser - jQuery



Browser - Ext-JS



Apex API


SControl이나 JavaScript에서 사용할 수 있는 Apex API는 다양한 기능이 많이 있지만 여기서는 아주 간단히 조회/등록/수정/삭제 부분만 정리를 한다.

  • 공통 사항 Apex API를 사용하기 위해서는 다음을 반드시 포함하여야 한다.


    ``` ```
  • VisualForce Page에서 사용하기 위해서 다음과 같이 선언 한다.

    
       
    

  • Debug 모드 설정 Apex API를 호출하기 전에 sforce.debug.trace를 true로 설정한다. 이후 Debug 창에 로그가 남으며 사용자 로그를 남기고 싶을 경우에는 sforce.debug.log() 함수를 사용한다.


    ``` sforce.debug.trace = true; sforce.debug.log("남길 로그"); ```
  • 로그인 SControl에서 사용할 경우에는 로그인이 필요 없지만 기타 환경에서는 로그인을 하여 세일즈포스닷컴에 접속한다.


    ``` sforce.connection.init(null, "https://emea.salesforce.com/services/Soap/u/13.0"); sforce.connection.login(아이디, 암호); ```
  • 조회 (동기식)

    var result = sforce.connection.query(“select Id from Account where ~ order by ~ limit ~ ");
    records = result.getArray("records");
    for (var i=0; i< records.length; i++) {
       var record = records[i](i.md);
       window.alert(record.Id);
    }

  • 조회 (비동기식)

    var callback = {
       onSuccess : funcSuccess,
       onFailure : funcFailure,
       source : {}
    };
    sforce.connection.query(“select Id from Account where ~ order by ~ limit ~ “, callback);
    
    function funcSuccess(result, source) {
       //--- 여기에 조회가 성공하였을 때 필요한 코딩을 한다.
    }
    function funcFailure(error, source) {
       //--- 여기에 조회가 실패하였을 때 필요한 코딩을 한다.
    }

  • 등록 (표준 개체)

    var account = new sforce.SObject("Account");
    account.Name = "my new account";
    var result = sforce.connection.create([account](account.md));
    if (result[0](0.md).getBoolean("success")) {
    } else {
    }

  • 등록 (사용자 정의 개체)

    var obj= new sforce.SObject();
    obj.type = “KnowledgeForce__c”;
    obj.Name = "my new Knowledge";
    var result = sforce.connection.create([obj](obj.md));

  • 수정

    var account = new sforce.SObject("Account");
    account.Name = "myName";
    account.Phone = "2837484894";
    result = sforce.connection.create([account](account.md));
    
    account.id = result[0](0.md).id;
    account.Phone = "12398238";
    result = sforce.connection.update([account](account.md));
    if (result[0](0.md).getBoolean("success")) {
       log("account with id " + result[0](0.md).id + " updated");
    } else {
       log("failed to update account " + result[0](0.md));
    }

  • 삭제

    var delResult = sforce.connection.deleteIds([account.Id](account.Id.md));
    if (delResult[0](0.md).getBoolean("success")) {
       log("account with id " + result[0](0.md).id + " deleted");
    } else {
       log("failed to delete account " + result[0](0.md));
    }


AJAX Toolkit Developer's Guide, Ver 9.0 Spring'07


  • Data Types

     Date            : getDate, getDateTime
     Int             : getInt
     Float           : getFloat
     Boolean         : getBoolean
     Array           : getArray
     getBase64Binary

  • Sample AJAX

     
     
    
     try {
         sforce.connection.login("~", "~");
         sforce.debug.open();
         sforce.debug.log("~");
     } catch(error) {
         error.faultcode.indexOf("INVALID_LOGIN")
     }
    
     result = sforce.connection.query("~ limit 30");
     records = result.getArray("records");
    
     sforce.connection.query("~ limit 30", {onSuccess:handleSuccess, onFailure:handleFailure});
     //---   handleSuccess(result), onFailure(error)
    
     var result = sforce.connection.search("find {manoj} in Name fields RETURNING Account (name, id)");
    
     var data = new sforce.QueryResultIterator(result);
     data.hasNext();
     var record = data.next();
    
     account.Name
     account["Name"]("Name".md)
    
     var account = new sforce.SObject("Account");
     var result = sforce.connection.create([account](account.md));
     sforce.connection.update([account.Id](account.Id.md));
     sforce.connection.upsert("Id", [account](account.md));
     sforce.connection.deleteIds([account.Id](account.Id.md));
     sforce.connection.undelete([account.Id](account.Id.md));
     result[0](0.md).getBoolean("success");
    
     var req = new sforce.MergeRequest();
     req.masterRecord = account1;
     req.recordToMergeIds = account2.id;
     result = sforce.connection.merge([req](req.md));
    
     result = sforce.connection.retrive("Name, Phone", "Account", [result[0].id](0].id.md));
    
     var result = sforce.connection.getDeleted("Account", startDate, endDate);
     var result = sforce.connection.getUpdated("Account", startDate, endDate);
    
     var convert = new sforce.LeadConvert();
     convert.accountId = account.Id;
     convert.leadId = lead.Id;
     convert.convertedStatus = "Qualified");
     result = sforce.connection.convertLead([convert](convert.md));
    
     sforce.connection.getServerTimestamp();
     sforce.connection.getUserInfo();
    
     var result sforce.connection.query("~ like '~%~'", {onSuccess:funcSuccess, onFailure:funcFailure, timeout:100});
    
     -   Describe (Page 20 참조)

  • 메일 발송

    var req = new sforce.SingleEmailMessage();
    req.replyTo = "~";
    req.subject = "~";
    req.plainTextBody = "~";
    req.toAddresses = ["~"]("~".md);
    
    var tmpRes = sforce.connection.query("select id form emailtemplate");
    var templateId = tmpRes.getArray("records")[0](0.md).Id;
    var massReq = new sforce.MassEmailMessage();
    massReq.targetObjectIds = [globalContact.id](globalContact.id.md);
    massReq.replyTo = "~";
    massReq.subject = "~";
    massReq.templateId = templateId;
    
    var sendMailRes = sforce.connection.sendEmail([massReq](req,));

  • Debug

    sforce.debug.log(myVar);
    sforce.debug.open();

  • Select

    • query
      result = sforce.connection.query("Select Name, Id from User");
      records = result.getArray("records");
      for (var i=0; i< records.length; i++) {
          var record = records[i](i.md);
          log(record.Name + " -- " + record.Id);
      }

    • queryMore
      var result = sforce.connection.query("select name, id from account");
      var queryMore = true;
      while (queryMore) {
          var records = result.getArray("records");
          var sb = new sforce.StringBuffer();
          for (var i = 0; i < records.length; i++) {
              sb.append(records[i](i.md).Name).append(",");
          }
          log(records.length);
          log(sb.toString());
          if (result.getBoolean("done")) {
              queryMore = false;
          } else {
              result = sforce.connection.queryMore(result.queryLocator);
          }
      }

    • queryAll
      var result = sforce.connection.queryAll("Select Name, Id from Account");
      var records = result.getArray("records");
      for (var i=0; i

    • Relationship Query Example--Child to Parent
      var result = sforce.connection.query("SELECT c.Id, c.firstname, " +
          "c.lastname, c.leadsource, a.Id, a.name, a.industry, c.accountId " +
          "FROM Contact c, c.account a ORDER BY leadsource LIMIT 10");
      var it = new sforce.QueryResultIterator(result);
      while(it.hasNext()) {
          var record = it.next();
          var accountName = record.Account ? record.Account.Name : null;
          log( record.FirstName + " " + record.LastName + " in account " + accountName);
      }  

    • Relationship Query Example--Parent to Child
      var result = sforce.connection.query("select a.Name, a.Industry, " +
          "(select c.LastName, c.LeadSource from a.Contacts c) " +
          "from account a order by industry limit 100");
      var ait = new sforce.QueryResultIterator(result);
      while(ait.hasNext()) {
          var account = ait.next();
          var contacts = [](.md);
          if (account.Contacts) {
              var cit = new sforce.QueryResultIterator(account.Contacts);
              while(cit.hasNext()) {
                  var contact = cit.next();
                  contacts.push(contact.LastName);
              }
          }
          log(account.Name + ": " + contacts.join(","));
      }  

  • Insert

    • create

      var account = new sforce.SObject("Account");
      account.Name = "my new account";
      var result = sforce.connection.create([account](account.md));
      if (result[0](0.md).getBoolean("success")) {
          log("new account created with id " + result[0](0.md).id);
      } else {
          log("failed to create account " + result[0](0.md));
      }

    • Batch create

      var accounts = [](.md);
      for (var i=0; i<10; i++) {
          var account = new sforce.SObject("Account");
          account.Name = "my new account " + i;
          accounts.push(account);
      }
      
      var result = sforce.connection.create(accounts);
      for (var i=0; i

  • Update

      var account = new sforce.SObject("Account");
      account.Name = "myName";
      account.Phone = "2837484894";
      result = sforce.connection.create([account](account.md));
    
      account.id = result[0](0.md).id;
      account.Phone = "12398238";
      result = sforce.connection.update([account](account.md));
      if (result[0](0.md).getBoolean("success")) {
          log("account with id " + result[0](0.md).id + " updated");
      } else {
          log("failed to update account " + result[0](0.md));
      }

  • Delete

      var account = new sforce.SObject("Account");
      account.Name = "my new account";
      var result = sforce.connection.create([account](account.md));
      if (result[0](0.md).getBoolean("success")) {
          log("new account created with id " + result[0](0.md).id);
          account.Id = result[0](0.md).id;
      } else {
          throw ("failed to create account " + result[0](0.md));
      }
    
      //now delete the example account
      var delResult = sforce.connection.deleteIds([account.Id](account.Id.md));
      if (delResult[0](0.md).getBoolean("success")) {
          log("account with id " + result[0](0.md).id + " deleted");
      } else {
          log("failed to delete account " + result[0](0.md));
      }

  • Merge

      var account1 = new sforce.SObject("Account");
      account1.Name = "myName";
      account1.Phone = "2837484894";
      var account2 = new sforce.SObject("Account");
      account2.Name = "anotherName";
      account2.Phone = "938475950";
      var result = sforce.connection.create([account2](account1,));
      if (result.length != 2) throw "create failed";
    
      account1.id = result[0](0.md).id;
      account2.id = result[1](1.md).id;
      //create merge request
      var request = new sforce.MergeRequest();
      request.masterRecord = account1;
      request.recordToMergeIds = account2.id;
      //call merge
      result = sforce.connection.merge([request](request.md));
      if (result[0](0.md).getBoolean("success")) {
          log("merge success " + result[0](0.md));
      } else {
          log("merge failed " + result[0](0.md));
      }


Apex Code JavaScript


  • Setup -> App Setup -> Build -> Code

  • Setup -> App Setup -> Customize -> Accounts -> Buttons and Links -> Custom Buttons and Links

  • AJAX

    
    
       sforce.apex.executeAnonymous(