Как я могу использовать файл Excel в статическом ресурсе и получить доступ к его полям в Salesforce Apex - PullRequest
0 голосов
/ 07 октября 2019

Я хочу получить значения в моем коде из статического файла ресурсов. Я использую файл Excel в статическом ресурсе, я хочу знать, как я могу сопоставить поля в файле Excel с полями salesforce в моем коде. например Account.Name и т. д.

Lead l = new Lead ();l.Company = $ Resource.EMailServicesLead.EmailServiceStaticResourceData.csv;\ Не работает EMailServicesLead - Имя статического ресурса. EmailServiceStaticResourceData - CSV-файл с полями {Имя, Фамилия, Электронная почта, Компания, Статус, LeadSource}

/ ** * @ Имя файла: myHandler.cls * @Description: * @Author: ChangeMeIn@UserSettingsUnder.SFDoc *@Group: * @Last Модифицировано: ChangeMeIn@UserSettingsUnder.SFDoc * @Last Модифицировано: 10/10/2019, 15:54:01 PM * @Modification Log: * Вер. Дата Автор Модификация * 1.0 07.10.2009 ChangeMeIn@ UserSettingsUnder.SFDoc Начальная версия ** / глобальная с общим виртуальным классом myHandler реализует Messaging.InboundEmailHandler {global Messaging.InboundEmailResult handleInboundEmail (Messaging.InboundEmail электронная почта, Messaging.InboundEnvelope envelope) {Messaging.InboundEmailResult result = new Messaging.In);1005 *

  //Lead l= (Lead)ListofLeadsStaticRes[0];
  // List<SObject> ListofLeadsStaticRes = {!URLFOR($Resource.EMailServicesLead, 'EmailServiceStaticResourceData.csv')};
  Integer j=0;
  String myPlainText= '';

   staticResource sr = new staticResource();
   List<sObject> ls = Test.loadData(Lead.sObjectType, 'myResource');
  // {!URLFOR($Resource.EMailServicesLead,EMailServicesLead/EmailServiceStaticResourceData.csv)}

  Lead l = new Lead();
  l.FirstName=email.fromName.substring(0,email.fromName.indexOf(''));
  l.LastName=email.fromName.substring(email.fromName.indexOf(''));
  l.Email = envelope.fromAddress;
  myPlainText = email.plainTextBody;
  l.Company = $Resource.EMailServicesLead.EmailServiceStaticResourceData.csv;
  l.Status = $Resource.EMailServicesLead.EmailServiceStaticResourceData.csv;
  l.LeadSource = $Resource.EMailServicesLead.EmailServiceStaticResourceData.csv;
  l.Description = 'Mr.' + l.FirstName + l.LastName + ' enquired about the product Fin' + ' via' + ' Ëmail' + 'with body '+myPlainText;

  Task[] newTask = new Task[0];
  try { // Add a new Task to the Lead record we just found above.
       List<Lead> vLed = [SELECT Id, Name, Email FROM Lead WHERE Email = :email.fromAddress LIMIT 1];
       if(vLed.size()>0)
        { newTask.add(new Task(Description =  myPlainText,
                                  Priority = 'Normal',
                                  Status = 'Inbound Email',
                                  Subject = email.subject,
                                  IsReminderSet = true,
                                  ReminderDateTime = System.now()+1,
                                  WhoId =  vLed[0].Id));
          insert newTask;
          System.debug('New Task Object: ' + newTask ); 
        }
       else 
        {
          insert l;
          System.debug('Lead Created'+ l.Id);
        }
       }
    catch (QueryException e) {  System.debug('Query Issue: ' + e); }     
    return  result;
 }

}

1 Ответ

0 голосов
/ 13 октября 2019

Вам нужно будет проанализировать CSV, чтобы извлечь из него данные. Чтобы сделать это проще, вы можете использовать этот простой класс синтаксического анализатора CSV, написанный Николасом Галлером . Посмотрите код, чтобы понять, как он работает, но все, что вы будете использовать, - это конструктор и метод readLine(), который возвращает список значений из каждой строки вашего CSV в виде строк. Вам нужно будет скопировать и вставить код из этой ссылки в апекс-класс с именем «SSSCsvReader», чтобы иметь возможность использовать его, тогда в вашем коде вы будете ...

1. получите статический CSV-ресурс в виде строки

StaticResource sr = [SELECT ID, body FROM StaticResource WHERE Name = 'EMailServicesLead' LIMIT 1];
String csvData = sr.body.toString();

2. Создайте экземпляр SSSCsvReader, вызвав конструктор, передающий в качестве аргумента строку CSV (и, необязательно, второй аргумент разделителя, но запятая используется по умолчанию)

SSSCsvReader csvR = new SSSCsvReader(csvData);

3. Используйте readLine() на вашем объекте SSSCsvReader , чтобы получить значения полей CSV в списке строк. (если в вашем файле есть строка заголовка, не забудьте сначала удалить его, один раз вызвав readLine(), прежде чем получить список данных).

csvR.readLine() //Removing header (optional)
String[] line = csvR.readLine();
if(line == null){return null} //No line in the file or there was no header so return

4. Присвойте каждое поле в возвращаемом списке от readLine() соответствующему полю в вашем объекте продаж.

Lead l = new Lead();
l.firstName = line[0]; //If your file is laid out like you said FirstName will be index [0]
l.lastName = line[1]; //LastName will be index [1]
.... //And so on
....
....

И у вас есть объект Lead с полями из файла статических ресурсов CSV. Если у вас больше строк в CSV и вы хотите создать много отведений, чем просто настроить цикл while, который получает каждую строку из CSV с помощью readLine(), создайте новое отведение из этой строки и добавьте его в список.

...