Предварительное формирование массовых транзакций данных с SalesForce с использованием .Net C # - PullRequest
3 голосов
/ 12 июня 2011

Я новичок в SalesForce (3 месяца).

До сих пор мне удавалось создать приложение на C #, которое я могу использовать для предварительной вставки вставок и обновлений в базу данных SalesForce.Эти транзакции выполняются по одной за раз.

Нет, у меня нет необходимости предварительно обрабатывать крупномасштабные транзакции.Например, обновляя тысячи записей одновременно.Выполнение их один за другим быстро поставит нас над нашими выделенными вызовами API за 24 часа.

Я хочу использовать доступный процесс массовых транзакций, чтобы сократить количество вызовов API.До сих пор мне не очень повезло, что я это написал, и я не нашел такой документации.

Если бы кто-либо мог предоставить некоторые общие примеры или направить меня к надежной документации по этому вопросу, я был бы очень признателен.

К вашему сведению, данные, которые мне нужно использовать для обновления и вставки, поступают из базы данных IBM Unidata, расположенной на компьютере AIX.Так что прямое общение через веб-сервисы невозможно.Получение данных из Unidata было моей головной болью.У меня это получилось.Теперь основная часть API для SalesForce - моя новая головная боль.

Заранее спасибо.

Джефф

Ответы [ 4 ]

1 голос
/ 16 ноября 2011

Пожалуйста, найдите небольшой код, который может помочь вам вставить данные в объекты Salesforce с помощью API-интерфейсов c # и WSDL. Я придерживался много, чтобы написать код на C #. Я назначил с помощью прямого индекса, после того, как вы сплеваете, вы можете использовать ваши пути.

Я разделил столбец, используя | (труба знак). Вы можете изменить это, а также <br>, \n и т. Д. (Разрыв строки и столбца)

Означает, что вы можете ввести N строк, которые есть в вашем HTML / текстовом файле. Я написал программу для добавления заказа моими дизайнерами, которые разместили заказ на другом веб-сайте и извлекли данные с веб-сайта электронной коммерции, и у которого нет интерфейса для отдела продаж для добавления / просмотра записей заказов. Я создал один объект для того же. и добавьте следующие столбцы в объект.

Ваши предложения приветствуются.

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();
                   }
1 голос
/ 12 июня 2011

(хотя это код SOAP, а не «Bulk API» Salesforce; будьте осторожны, чтобы не перепутать их)

/// 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);
    }
}
1 голос
/ 14 июня 2011

Ответы, которые уже даны, являются хорошим началом; Тем не менее, вы уверены, что вам действительно нужно написать собственное приложение, которое использует массовый API? Загрузчик данных salesforce - довольно надежный инструмент, включает интерфейс командной строки и может использовать как «обычный», так и массовый API данных. Если вам не нужна изощренная логика в процессе вставки / обновления или какая-либо дополнительная загрузка в реальном времени / по требованию, загрузчик данных будет лучшим вариантом, чем пользовательское приложение.

1 голос
/ 12 июня 2011

Вы не упоминаете, какой API вы используете в настоящее время, но с помощью мыльного партнера или корпоративных API вы можете записывать записи в salesforce 200 одновременно. (все вызовы create / update / upsert принимают массив объектов SObject).

Используя массовый API, вы можете отправлять данные по тысячам строк одновременно.

Вы можете найти документацию для обоих наборов API здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...