#salesforce
#salesforce
Вопрос:
Мы создали классы C # для файла WSDL, предоставленного Salesforce.
Большинство созданных классов являются классами сущностей, но, похоже, у вас нет никаких методов для вызова, таких как createAccount или UpdateAccount.
Это правильно? Используете ли вы запрос для выполнения всех операций с данными напрямую?
Ответ №1:
Вместо того, чтобы использовать отдельные методы create для каждого объекта, Salesforce предоставляет универсальный метод create, который принимает ввод универсального объекта, который может иметь тип account или contact или любого пользовательского объекта.
/// 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);
}
} `
Ответ №2:
Да, это правильно. У вас нет методов в этих объектах, и все операции должны выполняться с использованием их api (веб-служб).
Вот несколько примеров кода на Java и C#
Комментарии:
1. Итак, я был бы прав, если бы сказал, что классы сущностей существуют в виде заглушек, но вам пришлось бы закодировать уровень bll, который компилировал бы эти запросы, например, запрос на обновление, а затем использовать заглушку сущности для объединения ее значений с запросом?
2. как насчет таких методов, как binding.describeSObject?
3. @Jacques: Да, мы создали слой, который компилирует эти запросы для загрузки и сохранения объекта, а также класс collection, который компилирует запросы для загрузки объектов с предложением where.
Ответ №3:
Большинство классов, таких как учетная запись, Контакт и т.д., На самом деле Являются просто структурами данных, которые передаются по сети. SforceService (если вы используете web reference, не уверены, какой класс вызывается с помощью WCF), является отправной точкой для выполнения с ними каких-либо действий, вы можете, например, передать список учетных записей методу create, чтобы они были созданы на стороне salesforce, в документах API веб-служб есть ряд примеров. Запрос доступен только для чтения, вы не можете вносить изменения с помощью вызова запроса.