我是新来的 SalesForce(3 个月)。
到目前为止,我已经能够在 C # 中创建一个应用程序,我可以用它来预成型插入和更新到 SalesForce 数据库。
不,我需要进行大规模交易。例如一次更新数千个记录。一个接一个地做会很快使我们在每 24 小时内分配的 API 调用。
我想利用可用的批量交易过程来减少 API 调用的数量。到目前为止,我还没有太多的运气编码,也没有找到任何这样的文档。
如果任何人都可以提供一些通用的例子或引导我对这个问题的可靠的文档,我将不胜感激。
FYI,我需要用来进行更新和插入的数据来自位于 AIX 机器上的 IBM Unidata 数据库。所以直接的 Web 服务通信是不可能的。从 Unidata 获取数据一直是我的头痛。我已经解决了。现在 SalesForce 的批量 api 是我的新头痛。
提前谢谢。
杰夫
您没有提到您当前使用的 API,但是使用 soap 合作伙伴或企业 API,您可以一次将记录写入 salesforce 200。(创建 / 更新 / upsert 调用都采用一组 SObjects)。
使用批量 API,您可以一次发送数千行的数据块。
您可以找到这两组 API 的文档here
已经给出的答案是一个好的开始;但是,您确定您需要实际编写使用批量 API 的自定义应用程序吗?salesforce 数据加载器是一个非常强大的工具,包括命令行界面,并且可以使用“正常”或批量数据 API。除非您需要在插入 / 更新时执行花哨的逻辑,或者某种更实时 / 按需加载,否则加载器数据将是比自定义应用程序更好的选择。
(这是 SOAP 代码,而不是 Salesforce 的“批量 API”;小心不要混淆两者)
下面的代码提供了关于如何进行批量插入的清晰见解。
/// Demonstrates how to create one or more Account records via the API
public void CreateAccountSample()
{
Account account1 = new Account();
Account account2 = new Account();
// Set some fields on the account1 object. Name field is not set
// so this record should fail as it is a required field.
account1.BillingCity = "Wichita";
account1.BillingCountry = "US";
account1.BillingState = "KA";
account1.BillingStreet = "4322 Haystack Boulevard";
account1.BillingPostalCode = "87901";
// Set some fields on the account2 object
account2.Name = "Golden Straw";
account2.BillingCity = "Oakland";
account2.BillingCountry = "US";
account2.BillingState = "CA";
account2.BillingStreet = "666 Raiders Boulevard";
account2.BillingPostalCode = "97502";
// Create an array of SObjects to hold the accounts
sObject[] accounts = new sObject[2];
// Add the accounts to the SObject array
accounts[0] = account1;
accounts[1] = account2;
// Invoke the create() call
try
{
SaveResult[] saveResults = binding.create(accounts);
// Handle the results
for (int i = 0; i < saveResults.Length; i++)
{
// Determine whether create() succeeded or had errors
if (saveResults[i].success)
{
// No errors, so retrieve the Id created for this record
Console.WriteLine("An Account was created with Id: {0}",
saveResults[i].id);
}
else
{
Console.WriteLine("Item {0} had an error updating", i);
// Handle the errors
foreach (Error error in saveResults[i].errors)
{
Console.WriteLine("Error code is: {0}",
error.statusCode.ToString());
Console.WriteLine("Error message: {0}", error.message);
}
}
}
}
catch (SoapException e)
{
Console.WriteLine(e.Code);
Console.WriteLine(e.Message);
}
}
请找到小代码,它可以帮助您使用 c # 和 WSDL API 将数据插入到 salesforce 对象中。我坚持在 c # 中编写代码。我分配使用直接索引后吐痰你可以使用你的方式。
我使用 |(管道符号)拆分列。您可以更改此内容,也可以更改<br>
,\n
等(行和列中断)
意味着您可以在 HTML / 文本文件中输入 N 行。我编写了程序,由我的设计师添加订单,他们将订单放在其他网站上并从电子商务网站获取数据,并且没有销售人员添加 / 查看订单记录的界面。我创建了一个对象。并在对象中添加以下列。
欢迎您的建议。
private SforceService binding; // declare the salesforce servive using your access credential
try
{
string stroppid = "111111111111111111";
System.Net.HttpWebRequest fr;
Uri targetUri = new Uri("http://abc.xyz.com/test.html");
fr = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(targetUri);
if ((fr.GetResponse().ContentLength > 0))
{
System.IO.StreamReader str = new System.IO.StreamReader(fr.GetResponse().GetResponseStream());
string allrow = str.ReadToEnd();
string stringSeparators = "<br>";
string[] row1 = Regex.Split(allrow, stringSeparators);
CDI_Order_Data__c[] cord = new CDI_Order_Data__c[row1.Length - 1];
for (int i = 1; i < row1.Length-1; i++)
{
string colstr = row1[i].ToString();
string[] allcols = Regex.Split(colstr, "\\|");
cord[i] = new CDI_Order_Data__c(); // Very important to create object
cord[i].Opportunity_Job_Order__c = stroppid;
cord[i].jobid__c = stroppid;
cord[i].order__c = allcols[0].ToString();
cord[i].firstname__c = allcols[1].ToString();
cord[i].name__c = allcols[2].ToString();
DateTime dtDate = Convert.ToDateTime(allcols[3]);
cord[i].Date__c = new DateTime(Convert.ToInt32(dtDate.Year), Convert.ToInt32(dtDate.Month), Convert.ToInt32(dtDate.Day), 0, 0, 0); //sforcedate(allcols[3]); //XMLstringToDate(allcols[3]);
cord[i].clientpo__c = allcols[4].ToString();
cord[i].billaddr1__c = allcols[5].ToString();
cord[i].billaddr2__c = allcols[6].ToString();
cord[i].billcity__c = allcols[7].ToString();
cord[i].billstate__c = allcols[8].ToString();
cord[i].billzip__c = allcols[9].ToString();
cord[i].phone__c = allcols[10].ToString();
cord[i].fax__c = allcols[11].ToString();
cord[i].email__c = allcols[12].ToString();
cord[i].contact__c = allcols[13].ToString();
cord[i].lastname__c = allcols[15].ToString();
cord[i].Rep__c = allcols[16].ToString();
cord[i].sidemark__c = allcols[17].ToString();
cord[i].account__c = allcols[18].ToString();
cord[i].item__c = allcols[19].ToString();
cord[i].kmatid__c = allcols[20].ToString();
cord[i].qty__c = Convert.ToDouble(allcols[21]);
cord[i].Description__c = allcols[22].ToString();
cord[i].price__c = Convert.ToDouble(allcols[23]);
cord[i].installation__c = allcols[24].ToString();
cord[i].freight__c = allcols[25].ToString();
cord[i].discount__c = Convert.ToDouble(allcols[26]);
cord[i].salestax__c = Convert.ToDouble(allcols[27]);
cord[i].taxcode__c = allcols[28].ToString();
}
try {
SaveResult[] saveResults = binding.create(cord);
}
catch (Exception ce)
{
Response.Write("Buld order update errror" +ce.Message.ToString());
Response.End();
}
if (str != null) str.Close();
}
本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处
评论列表(16条)