Не получается получить правильную информацию (HZ_PARTIES против HZ_PARTY_SITES) - PullRequest
0 голосов
/ 18 марта 2019

ПРИМЕЧАНИЕ: Эта тема для тех, кто знает Oracle EBS (разработчики или программисты)

Я пытался получить контактную информацию, которая хранится в HZ_PARTIES, НО по какой-то причине он показывает NULL электронные письма и это не правильно (мой запрос работает нормально, если я вместо HZ_PARTIES поставил HZ_PARTY_SITES, но он не показывает информацию что я хочу)

Каждый раз, когда создается клиент, выполняется эта ПРОЦЕДУРА:

https://www.codepile.net/pile/9nzMKy4D

Основываясь на информации, показанной выше, я сделал этот запрос:

SELECT
    hp.party_name                              
  , hca.account_number                                           
  , hcp.phone_number
  , hcp.email_address                              
FROM apps.hz_cust_accounts hca
INNER JOIN apps.hz_cust_acct_sites_all hcas ON hca.cust_account_id = hcas.cust_account_id
INNER JOIN apps.hz_party_site hps ON hcas.party_site_id = hps.party_site_id
INNER JOIN apps.hz_locations hl ON hps.location_id = hl.location_id
INNER JOIN apps.hz_parties hp ON hps.party_id = hp.party_id
LEFT JOIN (
        SELECT
            owner_table_id
          , max(case when contact_point_type = 'PHONE' then phone_number end) phone_number
          , max(case when contact_point_type = 'EMAIL' then email_address end) email_address
        FROM hz_contact_points
        WHERE status = 'A'
        AND primary_flag = 'Y'
        AND owner_table_name = 'HZ_PARTIES'
        AND contact_point_type IN ('EMAIL','PHONE')
        GROUP BY 
            owner_table_id
    ) hcp ON hcas.party_site_id = hcp.owner_table_id 
WHERE hcas.status = 'A'
AND hps.status = 'A'
AND hca.status = 'A'
--AND hca.account_number = 'account_number'
;

Посмотрите на это изображение (я пока не могу загрузить изображения):

изображение

Не могли бы вы помочь мне решить эту проблему?

РЕДАКТИРОВАТЬ: я подключаюсь к базе данных Oracle (11g)

Ответы [ 2 ]

0 голосов
/ 10 апреля 2019

Список контактных точек на уровне партии и сайта партии с типом электронной почты и номером телефона.

SELECT DISTINCT hp.party_id, 
                   hp.party_name,
                   hca.cust_account_id,
                   hca.account_number,
                   party_site_id,
                   party_site_number,
                   hcp.phone_number,
                   NVL (hcp.email_address, hcp.url) email_or_url,
                   hcp.contact_point_type communication_type,
                   hcp.status active,
                   hcp.contact_point_purpose purpose
     FROM apps.hz_contact_points hcp,
          apps.hz_party_sites hps,
          apps.hz_cust_accounts hca,
          apps.hz_parties hp
    WHERE     hps.party_id = hca.party_id
          AND hp.party_id = hca.party_id
          AND hcp.contact_point_type IN ('PHONE','EMAIL') 
          AND hcp.owner_table_name = 'HZ_PARTIES'
          AND hcp.owner_table_id = hps.party_id
          AND hcp.status = 'A'
          AND hps.status = 'A'
          AND hca.status = 'A'
          AND hp.status = 'A'
   UNION
   SELECT DISTINCT hp.party_id, 
                   hp.party_name,
                   hca.cust_account_id,
                   hca.account_number,
                   party_site_id,
                   party_site_number,
                   hcp.phone_number,
                   NVL (hcp.email_address, hcp.url) email_or_url,
                   hcp.contact_point_type communication_type,
                   hcp.status active,
                   hcp.contact_point_purpose purpose
     FROM apps.hz_contact_points hcp,
          apps.hz_party_sites hps,
          apps.hz_cust_accounts hca,
          apps.hz_parties hp
    WHERE     hps.party_id = hca.party_id
          AND hp.party_id = hca.party_id
          AND hcp.contact_point_type IN ('PHONE','EMAIL') 
          AND hcp.owner_table_name = 'HZ_PARTY_SITES'
          AND hcp.owner_table_id = hps.party_site_id
          AND hcp.status = 'A'
          AND hps.status = 'A'
          AND hp.status = 'A'
          AND hca.status = 'A';
0 голосов
/ 18 марта 2019

Это все о работе с архитектурой торгового сообщества

Посмотрите, как таблица hz_relationships используется для передачи этой информации. Следующий запрос работает для среды EBS R12.2 (12.1), где контакты создаются на уровне учетной записи (EBS R12 допускает как на уровне учетной записи, так и на уровне сайта, Форма клиента, Контакты / Связь: Устранение неполадок, Как, Известные проблемы и исправления (Doc ID 1456319.1 ).

SELECT
    hca.account_number   cust_account_number,
    obj.party_name       customer_name,
    sub.party_name       contact_name,
    hps.party_site_number,
    hcp.contact_point_type,
    hcp.phone_number,
    hcp.email_address
FROM
    apps.hz_cust_accounts         hca
    JOIN apps.hz_cust_acct_sites_all   hcas ON hca.cust_account_id = hcas.cust_account_id
    JOIN apps.hz_parties               obj ON hca.party_id = obj.party_id
                                      AND obj.party_type = 'ORGANIZATION'
    JOIN apps.hz_relationships         rel ON hca.party_id = rel.object_id
                                      AND rel.relationship_type = 'CONTACT'
                                      AND rel.directional_flag = 'F'
    JOIN apps.hz_parties               sub ON rel.subject_id = sub.party_id
                                       AND sub.party_type = 'PERSON'
    JOIN apps.hz_contact_points        hcp ON rel.party_id = hcp.owner_table_id
                                       AND hcp.owner_table_name = 'HZ_PARTIES'
    JOIN apps.hz_party_sites           hps ON hcas.party_site_id = hps.party_site_id
    JOIN apps.hz_locations             hl ON hps.location_id = hl.location_id
WHERE
    hcas.status = 'A'
    AND hps.status = 'A'
    AND hca.status = 'A'
    AND hcp.contact_point_type IN (
        'PHONE',
        'EMAIL'
    )
ORDER BY
    2,
    3
 ;

В этом запросе рассматриваются контакты, настроенные на уровне сайта (контакты клиентов):

SELECT
    hca.account_number   cust_account_number,
    obj.party_name       customer_name,
    sub.party_name       contact_name,
    hps.party_site_number,
    hcp.contact_point_type,
    hcp.phone_number,
    hcp.email_address
FROM
    apps.hz_cust_accounts         hca
    JOIN apps.hz_cust_acct_sites_all   hcas ON hca.cust_account_id = hcas.cust_account_id
    JOIN apps.hz_party_sites           hps ON hcas.party_site_id = hps.party_site_id
    JOIN apps.hz_locations             hl ON hps.location_id = hl.location_id
    JOIN apps.hz_parties               obj ON hps.party_id = obj.party_id
                                AND obj.party_type = 'ORGANIZATION'
    JOIN apps.hz_relationships         rel ON rel.object_id = obj.party_id
                                      AND rel.relationship_type = 'CONTACT'
                                      AND rel.directional_flag = 'F'
    JOIN apps.hz_parties               sub ON rel.subject_id = sub.party_id
                                AND sub.party_type = 'PERSON'
    JOIN apps.hz_contact_points        hcp ON rel.party_id = hcp.owner_table_id
                                       AND hcp.owner_table_name = 'HZ_PARTIES'
WHERE
    hcas.status = 'A'
    AND hps.status = 'A'
    AND hca.status = 'A'
    AND hcp.contact_point_type IN (
        'PHONE',
        'EMAIL'
    )
ORDER BY
    2,

Сведение вниззапросите немного дальше, можно просто сосредоточиться на контактной информации, не обращая внимания на тип контакта:

 SELECT
        obj.party_name,
        sub.party_name   contact_name,
        hcp.contact_point_type,
        hcp.phone_number,
        hcp.email_address
    FROM
        apps.hz_parties          obj
        JOIN apps.hz_relationships    rel ON rel.object_id = obj.party_id
                                          AND rel.relationship_type = 'CONTACT'
                                          AND rel.directional_flag = 'F'

        JOIN apps.hz_parties          sub ON rel.subject_id = sub.party_id
        JOIN apps.hz_contact_points   hcp ON rel.party_id = hcp.owner_table_id
                                           AND hcp.owner_table_name = 'HZ_PARTIES'
    WHERE
        1 = 1
        AND hcp.contact_point_type IN (
            'PHONE',
            'EMAIL'
        )
    ORDER BY
        2,
        3;
...