Показать сообщение отдельно
Старый 08.10.2012, 08:58   #1  
pitersky is offline
pitersky
северный Будда
Аватар для pitersky
Ex AND Project
Соотечественники
 
1,486 / 408 (16) +++++++
Регистрация: 26.09.2007
Адрес: Солнечная система
Post Импорт потенциальных клиентов
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, но у меня к нему устойчивая антипатия со времён заливки продуктового справочника. Да и не считаю я правильным делать такое для регулярных операций
__________________
С уважением,
Вячеслав