Guten Morgen zusammen,Erstellen eines neuen Lead-in Salesforce Mit TwilioForce APEX Bibliothek
In erster Linie erstellen zu, ist die Force.com IDE und Salesforce ein neues Skillset für mich. Ich versuche, die TwilioForce APEX-Bibliothek zu verwenden: https://www.twilio.com/docs/salesforce/install
, um einen neuen Salesforce-Lead für jeden eingehenden Anruf auf dem Twilio-Konto meines Kunden zu erstellen. Ich bin so weit gekommen, ein neues Force.com-Projekt in Eclipse zu erstellen und die Twilioforce-Komponenten, -Klassen und -Seiten in das Projekt zu kopieren, benötige jedoch eine Anleitung zum Schreiben der Logik zum Erstellen des Leads.
Fragen, die ich habe: 1. Können Sie Links zu Referenzmaterialien bereitstellen, die zeigen, wie Sie in Salesforce programmatisch einen neuen Lead erstellen? 2. Wie teste ich die TwilioForce-Komponenten, insbesondere die, die ich geändert habe, um die Twilio-Telefonnummer und das Token meines Kunden wiederzugeben? Sind diese aus dem Force.com-Projekt in Eclipse abrufbar oder müssen sie von meinem developer.org-Konto aus aufgerufen werden? 3. Sobald ich herausgefunden habe, wie die oben genannte Lead-Erstellung von eingehenden Twilio-Anrufen durchgeführt werden kann, wie stelle ich die von mir erstellte Codebasis auf meinem Client bereit?
Danke, Sid
EDIT: Eyescream, war Ihre Probe eine große Hilfe. Hier ist die TwilioRestResponse Klasse, die mit der TwilioForce Code-Basis kam:
public class TwilioRestResponse {
private String responseText;
private integer httpStatus;
private String url;
private String queryString;
private boolean error;
public TwilioRestResponse(String url, String text, integer status){
Pattern p = Pattern.compile('([^?]+)\\??(.*)');
Matcher m = p.matcher(url);
m.matches();
this.url = m.group(1);
this.queryString = m.group(2);
this.responseText = text;
this.httpStatus=status;
this.error = (status>=400);
}
// getters and setters
public String getResponseText() {
return responseText;
}
public void setResponseText(String responseText) {
this.responseText = responseText;
}
public integer getHttpStatus() {
return httpStatus;
}
public void setHttpStatus(integer httpStatus) {
this.httpStatus = httpStatus;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getQueryString() {
return queryString;
}
public void setQueryString(String queryString) {
this.queryString = queryString;
}
public boolean isError() {
return error;
}
public void setError(boolean error) {
this.error = error;
}
}
Es gibt auch eine CallsXmlParser Klasse wie folgt:
public class CallsXmlParser{
//All Parsed records will be in this list
public List<Call> listRecords = new List<Call>();
//Data Model to store all response elements
public class Call{
public string Sid{get;set;}
public string DateCreated{get;set;}
public string DateUpdated{get;set;}
public string CallSegmentSid{get;set;}
public string AccountSid{get;set;}
public string Called{get;set;}
public string Caller{get;set;}
public string PhoneNumberSid{get;set;}
public string Status{get;set;}
public string StartTime{get;set;}
public string EndTime{get;set;}
public string Duration{get;set;}
public string Price{get;set;}
public string Flags{get;set;}
public string Annotation{get;set;}
}
public CallsXmlParser(){
}
public CallsXmlParser(string data){
XmlStreamReader xsr = new XmlStreamReader(data);
listRecords = parse(xsr);
}
public Call[] parse(XmlStreamReader reader) {
Call[] members = new Call[0];
while(reader.hasNext()) {
if (reader.getEventType() == XmlTag.START_ELEMENT) {
if ('Call' == reader.getLocalName()) {
Call member = parseMember(reader);
members.add(member);
}
}
reader.next();
}
return members;
}
//Parsing Each Call Tag and its nested tags
public Call parseMember(XmlStreamReader reader){
Call callObject = new Call();
while(reader.hasNext()) {
if ('Call' == reader.getLocalName() && reader.getEventType() == XmlTag.END_ELEMENT) {
break;
}
else if('Sid' == reader.getLocalName() && reader.getEventType() == XmlTag.START_ELEMENT){
reader.next();
if(reader.getEventType() == XmlTag.CHARACTERS) {
callObject.Sid = reader.getText();
}
}else if('DateCreated' == reader.getLocalName() && reader.getEventType() == XmlTag.START_ELEMENT){
reader.next();
if(reader.getEventType() == XmlTag.CHARACTERS) {
callObject.DateCreated= reader.getText();
}
}else if('DateUpdated' == reader.getLocalName() && reader.getEventType() == XmlTag.START_ELEMENT){
reader.next();
if(reader.getEventType() == XmlTag.CHARACTERS) {
callObject.DateUpdated= reader.getText();
}
}else if('CallSegmentSid' == reader.getLocalName() && reader.getEventType() == XmlTag.START_ELEMENT){
reader.next();
if(reader.getEventType() == XmlTag.CHARACTERS) {
callObject.CallSegmentSid= reader.getText();
}
}else if('AccountSid' == reader.getLocalName() && reader.getEventType() == XmlTag.START_ELEMENT){
reader.next();
if(reader.getEventType() == XmlTag.CHARACTERS) {
callObject.AccountSid= reader.getText();
}
}else if('Called' == reader.getLocalName() && reader.getEventType() == XmlTag.START_ELEMENT){
reader.next();
if(reader.getEventType() == XmlTag.CHARACTERS) {
callObject.Called= reader.getText();
}
}else if('Caller' == reader.getLocalName() && reader.getEventType() == XmlTag.START_ELEMENT){
reader.next();
if(reader.getEventType() == XmlTag.CHARACTERS) {
callObject.Caller= reader.getText();
}
}else if('PhoneNumberSid' == reader.getLocalName() && reader.getEventType() == XmlTag.START_ELEMENT){
reader.next();
if(reader.getEventType() == XmlTag.CHARACTERS) {
callObject.PhoneNumberSid= reader.getText();
}
}else if('Status' == reader.getLocalName() && reader.getEventType() == XmlTag.START_ELEMENT){
reader.next();
if(reader.getEventType() == XmlTag.CHARACTERS) {
callObject.Status = reader.getText();
}
}else if('StartTime' == reader.getLocalName() && reader.getEventType() == XmlTag.START_ELEMENT){
reader.next();
if(reader.getEventType() == XmlTag.CHARACTERS) {
callObject.StartTime = reader.getText();
}
}else if('EndTime' == reader.getLocalName() && reader.getEventType() == XmlTag.START_ELEMENT){
reader.next();
if(reader.getEventType() == XmlTag.CHARACTERS) {
callObject.EndTime = reader.getText();
}
}else if('Duration' == reader.getLocalName() && reader.getEventType() == XmlTag.START_ELEMENT){
reader.next();
if(reader.getEventType() == XmlTag.CHARACTERS) {
callObject.Duration = reader.getText();
}
}else if('Price' == reader.getLocalName() && reader.getEventType() == XmlTag.START_ELEMENT){
reader.next();
if(reader.getEventType() == XmlTag.CHARACTERS) {
callObject.Price = reader.getText();
}
}else if('Flags' == reader.getLocalName() && reader.getEventType() == XmlTag.START_ELEMENT){
reader.next();
if(reader.getEventType() == XmlTag.CHARACTERS) {
callObject.Flags = reader.getText();
}
}else if('Annotation' == reader.getLocalName() && reader.getEventType() == XmlTag.START_ELEMENT){
reader.next();
if(reader.getEventType() == XmlTag.CHARACTERS) {
callObject.Annotation = reader.getText();
}
}
reader.next();
}
return callObject;
}
}
Meine sehr grundlegende insertLead Klasse ist wie folgt:
public with sharing class insertLead {
Lead1 = new Lead(Phone='TwilioRestResponse.GetResponseText');
}
I Sie müssen die Telefonnummer und den CallerID-Namen aus der TwilioRestResponse- oder CallXmlParser-Klasse einlesen und in die entsprechenden Felder eines neuen Leads einfügen. Was ist die geeignete Syntax für die Referenzierung der CallObject.PhoneNumberSid in meinem neuen Lead? Alternativ ist es besser, die TwilioRestResponse zu analysieren? Wenn ja, wie würde ich nur die Telefonnummer und den CallerID-Namen aus dem GetResponseText auswählen?
Thanks again, Sid
Leider bekomme ich einen Compiler-Fehler auf der Linie für (CallsXmlParser.Call c: callxml1.ListRecords) { erwartete Angabe geschweifte Klammer – SidC
Ich habe gerade in meinem org 2 Klassen von Twilio Bibliothek erstellt: TestCallsXmlParser und CallsXmlParser. Beide in den neuesten Versionen von Trunk und es läuft ohne Probleme ... Vielleicht haben Sie einen Tippfehler in Klassennamen gemacht? Ist die innere Klasse eine öffentliche? Vielleicht ist deine Version von eclipse/force.com plugin alt? Ich bin in der Plugin-Version Sommer '10 (19.0.0) und meine vollständige Codebasis ist hier als Referenz: http://dl.dropbox.com/u/709568/stackoverflow/Sid%20-%20my%20Dev%20Edition. zip – eyescream
Mein schlechtes :) Ich hatte eine rechte geschweifte Klammer am Ende der Datei fehlt. Nun, da dies erstellt wurde, wie gehe ich vor, es auf meinem Entwicklerforce-Konto auszuführen? Vielen Dank!! – SidC