237 строки
7.0 KiB
Python
237 строки
7.0 KiB
Python
# demonstration of using the BeatBox library to call the sforce API
|
|
|
|
import sys
|
|
import beatbox
|
|
import xmltramp
|
|
import datetime
|
|
|
|
sf = beatbox._tPartnerNS
|
|
svc = beatbox.Client()
|
|
beatbox.gzipRequest=False
|
|
|
|
class BeatBoxDemo:
|
|
def login(self, username, password):
|
|
self.password = password
|
|
loginResult = svc.login(username, password)
|
|
print "sid = " + str(loginResult[sf.sessionId])
|
|
print "welcome " + str(loginResult[sf.userInfo][sf.userFullName])
|
|
|
|
def getServerTimestamp(self):
|
|
print "\ngetServerTimestamp " + svc.getServerTimestamp()
|
|
|
|
def describeGlobal(self):
|
|
print "\ndescribeGlobal"
|
|
dg = svc.describeGlobal()
|
|
for t in dg[sf.sobjects:]:
|
|
print str(t[sf.name]) + " \t " + str(t[sf.label])
|
|
|
|
def describeTabs(self):
|
|
print "\ndescribeTabs"
|
|
dt = svc.describeTabs()
|
|
for t in dt:
|
|
print str(t[sf.label])
|
|
|
|
def describeSearchScopeOrder(self):
|
|
print "\ndescribeSearchScopeOrder"
|
|
types = svc.describeSearchScopeOrder()
|
|
for t in types:
|
|
print "\t" + str(t[sf.name]) + " : " + str(t[sf.keyPrefix])
|
|
|
|
def dumpQueryResult(self, qr):
|
|
print "query size = " + str(qr[sf.size])
|
|
|
|
for rec in qr[sf.records:]:
|
|
print str(rec[0]) + " : " + str(rec[2]) + " : " + str(rec[3])
|
|
|
|
if (str(qr[sf.done]) == 'false'):
|
|
print "\nqueryMore"
|
|
qr = svc.queryMore(str(qr[sf.queryLocator]))
|
|
for rec in qr[sf.records:]:
|
|
print str(rec[0]) + " : " + str(rec[2]) + " : " + str(rec[3])
|
|
|
|
def query(self):
|
|
print "\nquery"
|
|
qr = svc.query("select Id, Name from Account")
|
|
self.dumpQueryResult(qr)
|
|
|
|
def queryAll(self):
|
|
print "\nqueryAll"
|
|
qr = svc.queryAll("select id, isDeleted from Account")
|
|
self.dumpQueryResult(qr)
|
|
|
|
def search(self):
|
|
print "\nsearch"
|
|
sr = svc.search("find {Apple*} in all fields")
|
|
for rec in sr[sf.searchRecords:]:
|
|
r = rec[sf.record]
|
|
print str(r[0]) + "\t: " + str(r[2])
|
|
|
|
def upsert(self):
|
|
print "\nupsert"
|
|
t = { 'type': 'Task',
|
|
'ChandlerId__c': '12345',
|
|
'subject': 'BeatBoxTest updated',
|
|
'ActivityDate' : datetime.date(2006,2,20) }
|
|
|
|
ur = svc.upsert('ChandlerId__c', t)
|
|
print str(ur[sf.success]) + " -> " + str(ur[sf.id])
|
|
|
|
t = { 'type': 'Event',
|
|
'ChandlerId__c': '67890',
|
|
'durationinminutes': 45,
|
|
'subject': 'BeatBoxTest',
|
|
'ActivityDateTime' : datetime.datetime(2006,2,20,13,30,30),
|
|
'IsPrivate': False }
|
|
ur = svc.upsert('ChandlerId__c', t)
|
|
if str(ur[sf.success]) == 'true':
|
|
print "id " + str(ur[sf.id])
|
|
else:
|
|
print "error " + str(ur[sf.errors][sf.statusCode]) + ":" + str(ur[sf.errors][sf.message])
|
|
|
|
def update(self):
|
|
print "\nupdate"
|
|
a = { 'type': 'Account',
|
|
'Id': self.__idToDelete,
|
|
'Name': 'BeatBoxBaby',
|
|
'NumberofLocations__c': 123.456 }
|
|
sr = svc.update(a)
|
|
|
|
if str(sr[sf.success]) == 'true':
|
|
print "id " + str(sr[sf.id])
|
|
else:
|
|
print "error " + str(sr[sf.errors][sf.statusCode]) + ":" + str(sr[sf.errors][sf.message])
|
|
|
|
def create(self):
|
|
print "\ncreate"
|
|
a = { 'type': 'Account',
|
|
'Name': 'New Account',
|
|
'Website': 'http://www.pocketsoap.com/' }
|
|
sr = svc.create([a])
|
|
|
|
if str(sr[sf.success]) == 'true':
|
|
print "id " + str(sr[sf.id])
|
|
self.__idToDelete = str(sr[sf.id])
|
|
else:
|
|
print "error " + str(sr[sf.errors][sf.statusCode]) + ":" + str(sr[sf.errors][sf.message])
|
|
|
|
|
|
def getUpdated(self):
|
|
print "\ngetUpdated"
|
|
updatedIds = svc.getUpdated("Account", datetime.datetime.today()-datetime.timedelta(1), datetime.datetime.today()+datetime.timedelta(1))
|
|
self.__theIds = []
|
|
for id in updatedIds[sf.ids:]:
|
|
print "getUpdated " + str(id)
|
|
self.__theIds.append(str(id))
|
|
|
|
def delete(self):
|
|
print "\ndelete"
|
|
dr = svc.delete(self.__idToDelete)
|
|
if str(dr[sf.success]) == 'true':
|
|
print "deleted id " + str(dr[sf.id])
|
|
else:
|
|
print "error " + str(dr[sf.errors][sf.statusCode]) + ":" + str(dr[sf.errors][sf.message])
|
|
|
|
def undelete(self):
|
|
print "\nundelete"
|
|
dr = svc.undelete(self.__idToDelete)
|
|
if (str(dr[sf.success])) == 'true':
|
|
print "undeleted id " + str(dr[sf.id])
|
|
else:
|
|
print "error " + str(dr[sf.errors][sf.statusCode]) + ":" + str(dr[sf.errors][sf.message])
|
|
|
|
def getDeleted(self):
|
|
print "\ngetDeleted"
|
|
drs = svc.getDeleted("Account", datetime.datetime.today()-datetime.timedelta(1), datetime.datetime.today()+datetime.timedelta(1))
|
|
print "latestDate Covered : " + str(drs[sf.latestDateCovered])
|
|
for dr in drs[sf.deletedRecords:]:
|
|
print "getDeleted " + str(dr[sf.id]) + " on " + str(dr[sf.deletedDate])
|
|
|
|
def retrieve(self):
|
|
print "\nretrieve"
|
|
accounts = svc.retrieve("id, name", "Account", self.__theIds)
|
|
for acc in accounts:
|
|
if len(acc._dir) > 0:
|
|
print str(acc[beatbox._tSObjectNS.Id]) + " : " + str(acc[beatbox._tSObjectNS.Name])
|
|
else:
|
|
print "<null>"
|
|
|
|
|
|
def getUserInfo(self):
|
|
print "\ngetUserInfo"
|
|
ui = svc.getUserInfo()
|
|
print "hello " + str(ui[sf.userFullName]) + " from " + str(ui[sf.organizationName])
|
|
|
|
def resetPassword(self):
|
|
ui = svc.getUserInfo()
|
|
print "\nresetPassword"
|
|
pr = svc.resetPassword(str(ui[sf.userId]))
|
|
print "password reset to " + str(pr[sf.password])
|
|
|
|
print "\nsetPassword"
|
|
svc.setPassword(str(ui[sf.userId]), self.password)
|
|
print "password set back to original password"
|
|
|
|
def convertLead(self):
|
|
print "\nconvertLead"
|
|
lead = { 'type' : 'Lead',
|
|
'LastName' : 'Fell',
|
|
'Company' : '@superfell' }
|
|
leadId = str(svc.create(lead)[sf.id])
|
|
print "created new lead with id " + leadId
|
|
convert = { 'leadId' : leadId,
|
|
'convertedStatus' : 'Closed - Converted',
|
|
'doNotCreateOpportunity' : 'true' }
|
|
res = svc.convertLead(convert)
|
|
print "converted lead to contact with Id " + str(res[sf.contactId])
|
|
|
|
def describeSObjects(self):
|
|
print "\ndescribeSObjects(Account)"
|
|
desc = svc.describeSObjects("Account")
|
|
for f in desc[sf.fields:]:
|
|
print "\t" + str(f[sf.name])
|
|
|
|
print "\ndescribeSObjects(Lead, Contact)"
|
|
desc = svc.describeSObjects(["Lead", "Contact"])
|
|
for d in desc:
|
|
print str(d[sf.name]) + "\n" + ( "-" * len(str(d[sf.name])))
|
|
for f in d[sf.fields:]:
|
|
print "\t" + str(f[sf.name])
|
|
|
|
def describeLayout(self):
|
|
print "\ndescribeLayout(Account)"
|
|
desc = svc.describeLayout("Account")
|
|
for layout in desc[sf.layouts:]:
|
|
print "sections in detail layout " + str(layout[sf.id])
|
|
for s in layout[sf.detailLayoutSections:]:
|
|
print "\t" + str(s[sf.heading])
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
|
if len(sys.argv) != 3:
|
|
print "usage is demo.py <username> <password>"
|
|
else:
|
|
demo = BeatBoxDemo()
|
|
demo.login(sys.argv[1], sys.argv[2])
|
|
demo.getServerTimestamp()
|
|
demo.getUserInfo()
|
|
demo.convertLead()
|
|
#demo.resetPassword()
|
|
demo.describeGlobal()
|
|
demo.describeSearchScopeOrder()
|
|
demo.describeTabs()
|
|
demo.describeSObjects()
|
|
demo.describeLayout()
|
|
demo.query()
|
|
demo.upsert()
|
|
demo.create()
|
|
demo.update()
|
|
demo.getUpdated()
|
|
demo.delete()
|
|
demo.getDeleted()
|
|
demo.queryAll()
|
|
demo.undelete()
|
|
demo.retrieve()
|
|
demo.search()
|
|
|