DAX 2012 kernel 6.0.947.0
Дано: Сейлы участвуют в различных мероприятиях, с которых приносят талмудические списки потенциальных клиентов и их контактов, которые потом прозваниваются.
В 2012 (в модуле Sales and marketing) есть достаточно удобный инструмент для этого (call-листы), но предварительно переносить туда информацию из талмудов руками муторно, чревато ошибками, да и просто жаль на это время тратить.
Решили сделать импорт этих данных в Аксапту автоматическим, по установленному шаблону.
Алгоритм - создаём руками call-лист в 2012, нажимаем в нём кнопку импорта, система генерит для каждого потенциального клиента лид (lead, возможный customer) и DirParty, для каждого контакта - Contact и свой DirParty, а потом связывает их.
Пользовательской информации о том, как сделать такое с клиентами в Сети оказалось достаточно много. А вот про лиды там почему-то ничего не нашлось - то ли функционал непопулярный, то ли я не так искал...
В общем, я решил выложить то, что у меня получилось. Возможно, кому-то это облегчит жизнь в будущем. Очевидные вещи вроде приёма данных из файла я опустил.
Так можно создать лиды:
X++:
smmLeadsService leadsService;
smmLeads leads;
smmLeads_smmLeadTable leadTable;
smmLeads_DirParty_DirOrganization leadDirOrg;
DirParty party;
DirPartyName custName;
DirPartyPostalAddressView partyPostalAddress;
DirPartyContactInfoView partyContactInfo;
;
custName = "Customer name"; // берём из Экселя
leadsService = smmLeadsService::construct();
leads = new smmLeads();
leadTable = leads.createsmmLeadTable().addNew();
leadTable.parmSubject(custName);
leadTable.parmStatus(smmLeadStatus::Open);
leadDirOrg = new smmLeads_DirParty_DirOrganization();
leadDirOrg.parmName(custName);
leadDirOrg.parmNameAlias(custName);
leadDirOrg.parmLanguageId(languageId); // системный язык
leadTable.createDirParty().add(leadDirOrg);
leadsService.create(leads);
ret = DirPartyTable::findByName(custName, DirPartyType::Organization);
if (!ret)
{
throw error ("Лид не был создан");
}
party = new dirParty(ret);
partyPostalAddress.CountryRegionId = "RUS"; // код страны
partyPostalAddress.Street = "Адрес"; // берём из Excel
partyPostalAddress.ZipCode = "123456"; // берём из Excel
partyPostalAddress.IsPrimary = true;
party.createOrUpdatePostalAddress(partyPostalAddress);
partyContactInfo.Type = LogisticsElectronicAddressMethodType::Phone;
partyContactInfo.Locator = "+79019000000"; // берём из Excel
partyContactInfo.IsPrimary = true;
party.createOrUpdateContactInfo(partyContactInfo);
// ну и т.д. для всех контактов лида в целом
так - контакты для них
X++:
DirPartyContactInfoView contactInfo;
ContactPerson contactPerson;
ContactPersonEntity contactPersonEntity;
DirOrgPersonRelations dirOrgPersonRelations;
;
contactPersonEntity = ContactPersonEntity::construct(contactPerson);
contactPersonEntity.parmFirstName("Иван"); // берём из Excel
contactPersonEntity.parmLastName("Тёркин"); // берём из Excel
contactPersonEntity.parmProfession("Директор"); // берём из Excel
contactPersonEntity.parmContactForParty(_custPartyRecId); // Party лида
contactPersonEntity.parmSensitivity(smmSensitivity::Personal);
contactPersonEntity.write();
contactInfo.Type = LogisticsElectronicAddressMethodType::Phone;
contactInfo.Locator = "1234455"; // берём из Excel
contactInfo.LocatorExtension = "678"; // берём из Excxel
contactInfo.IsPrimary = true;
contactPersonEntity.createOrUpdateContactInfo(contactInfo);
// ну и т.д. для всех персональных контактов
если вместо лида нужен полноценный клиент - то
X++:
CustCustomerService custService;
CustCustomer cust;
CustCustomer_CustTable custTable;
CustCustomer_DirParty_DirOrganization dirOrg;
CustCustomer_OrganizationName orgName;
DirPartyName custName;
;
custName = "Customer name"; // берём из Экселя
custService = CustCustomerService::construct();
cust = new CustCustomer();
custTable = cust.createCustTable().addNew();
dirOrg = new CustCustomer_DirParty_DirOrganization();
dirOrg.parmName(custName);
dirOrg.parmNameAlias(custName);
dirOrg.parmLanguageId(languageId); // системный язык
orgName = dirOrg.createOrganizationName().addNew();
orgName.parmName(custName);
custTable.createDirParty().add(dirOrg);
custService.create(cust);
, но на мой взгляд это не совсем правильно. Всё же не каждый лид - готовый клиент.
P.S. Наверное, можно сделать то же самое посредством механизма импорта из Excel через аксаптовский add-in, но у меня к нему устойчивая антипатия со времён заливки продуктового справочника. Да и не считаю я правильным делать такое для регулярных операций