Skip to Content
Product Information

FAQ – B2B Contact-to-Account Relationships in SAP Marketing Cloud

You find questions and answers to the topic B2B Contact-to-Account Relationships and SOAP-based Integration:

How do I switch on B2B Relationship functionality?

You will find the “contact projection” switch in the Set Up Your Marketing Solution app in the scenario Contacts and Profiles under Contact Projections for B2B Relationships.

Can we turn off the B2B Switch again or it is irreversible?

Switching back to the state without contact relationships is only possible in the Q-system. In the P-system you must request this from SAP via a service ticket.

Does the migration of the old ODATA to the new SOAP-based integration impact existing data?

Yes, you must run a migration program after you have switched from the old to the new version of integration.  You need to submit a service ticket to request this migration. The details are described in the migration guide, which is part of the integration and setup guide

What happens with Contacts that have been merged before upgrading to the SOAP-based Integration?

It’s important to understand the design principles of the SOAP-based integration with regard to this point. For each business partner in Sales Cloud, a corresponding local business partner record is created in SAP Marketing Cloud. The subsequent extraction creates separate interaction contacts for the persons and accounts. No merge is performed because the business partner in marketing would prevent this since it is the primary data provider for the interaction contact via the ID Origin SAP_MKT_BUPA.  As a result of the migration program, which is executed for the SOAP-based integration, the ID Origin SAP_C4C_BUPA becomes an additional ID, which provides the reference to interactions loaded from the Sales Cloud.

If you have already merged business partners into one interaction contact with the ODATA-based Integration, it’s difficult to migrate to the SOAP integration. One option could be to delete merged interaction contacts in SAP Marketing Cloud before you start to migrate to SOAP.

However, currently we do not provide a solution that splits merged interaction contacts, because it is simply not possible to provide an adequate solution in the standard.

How do we handle Marketing Permissions regarding Marketing Area assignments?

According to the SetUp Guide you have to activate marketing areas for campaign execution in order to be able to use Contact-to-Account Relationships.

However, it is sufficient to use one single marketing area, e.g. GLOBAL, if, during campaign execution, you use the BAdI CUAN_MKT_EXEC_MARKETING_AREA to set this single Marketing Area to perform a proper permission check.

How can you set the marketing area for permissions and subscriptions?

  • If implicit permissions are used, you are fine, because they are created with marketing area in any case, i.e. if the use of marketing area for campaign execution is switched off.
  • Subscriptions have a marketing area assigned as well.

So, it is critical and tricky for explicit permissions:

  • If you are just starting with your implementation, you must fill the proper Marketing Area, when loading permissions initially for the contacts.
  • If you are already running marketing cloud productively, it’s more difficult. One approach could be to extract the marketing permissions for the relevant contacts and reload them into SAP Marketing Cloud, using the API API_MKT_CONTACT.

Do we have to assign a Marketing Area when loading Interactions?

Yes, when loading interactions, for example from a first-party website or business documents like opportunities from sales cloud, or sales orders from S/4HANA, you must pass on a value for the marketing area, e.g. using the BADI Revise Interaction Data before Data Import, refer to the following documentation.

This is especially important if you want to further use interactions for trigger-based campaigns.

Is there Integration for SAP CRM available that supports B2B relationships?

Currently there is no standard integration for SAP CRM that supports this feature set. However, we plan to provide a CX works best practice article, which will guide you with regard to changing integration towards the SOAP-based Business Partner replication. Stay tuned it will be available soon!

Can B2B contact-to-account relationships be enabled for multiple Marketing Areas?

Yes, the Marketing Area plays an important role in this feature set. For contacts with multiple assignments to marketing areas, every relationship to the related account will be available in the corresponding marketing area. For example, if a contact is related to Marketing Area A and B, and the corresponding account is also available in marketing area A and B, the system provides the cartesian product for the relationships, i.e. in total 4 relationship best records will be created.

Why is the attribute COMPANY_NAME not available anymore in API_MKT_CONTACTS?

Thanks for this valuable feedback. This is a requirement which is still being evaluated. We will look into this issue.

Are relationships between two accounts supported?

Currently only contact-to-account relationships are possible. This is a conscious decision as marketing engagements are primarily executed for contacts.

You can add these relationships by means of a CBO, which captures the relationship records between accounts, e.g. to use this in segmentation.

Is there a new API for Interactions that supports Account and Contacts?

Yes, there is a new sub-node on the interaction, which allows you to assign additional contact or accounts. Note, the interaction does not differentiate between accounts and contacts.

How do we handle existing Custom Fields after Upgrade to SOAP-based Integration?

Existing custom fields can continue to be used after you have migrated integration to SOAP-technology. To do so you have to:

  • Create another custom attribute in the local business partner (business context “master data: business partner”)
  • Use the available BADI to map the values of the new attribute from the business partner to the existing attribute of the interaction contact.
  • Afterwards reload data from C4C as described in the migration guide

Alternatively, you can create a new attribute for the business context “master data: business partner” and apply the scenario-based integration. In this case the new attribute will be created also in the interaction contact. This has the consequence that segmentation content for the new attribute needs to be adjusted and data needs to be loaded from additional data sources as well.


You must be Logged on to comment or reply to a post.
  • Thanks for this FAQ Josef!


    Something that I thought would be useful to add, is concerning mapping of Functions.

    When interfacing Relations, you might get the error like "Function Z006 does not exist".

    Previously, with oData-based integration, configuration for Functions was required in

    Manage your solution -> Configure your solution -> Marketing | Marketing | Contacts and Profiles -> Functions for Contacts.

    But, with migration to SOAP-based integration, configuration is now needed in this location instead:

    Manage your solution -> Configure your solution -> Database and Data Management | Business Partner | Contact Person -> Define functions for Contact Person

    What's more, this new configuration only allows for 2-digit-codes, while the previous configuration (and sales cloud) allowed for 4-digit codes.

    To top off the complexity, in the "code list mapping" in Sales, you must not add mapping from the 4-digit codes of sales cloud to the 2-digit codes of marketing cloud. No, you must add two leading zeroes on the marketing side.

    So if you configured in marketing cloud function code "Z6" then your mapping should be "sales = Z006 to marketing = 00Z6".

    Hope this info can help,



  • Hello Josef,

    the integration with Sales Cloud now works so far that the Origin SAP_C4C_BUPA is saved as additional ID as you mentioned

    the ID Origin SAP_C4C_BUPA becomes an additional ID, which provides the reference to interactions loaded from the Sales Cloud.

    Now we implemented the integration scenario "Request Marketing Permissions and Subscriptions from SAP Marketing" to display the Marketing Permissions in the Sales Cloud.

    The problem is that the scenario calls the API with the Sales Cloud ID of the Contact using SAP_C4C_BUPA. As in Marketing Cloud the Origin ID is now SAP_MKT_BUPA nothing is passed back.

    Maybe you have an idea how we can solve this issue.

    Kind regards,

    • Hi Markus,
      thanks for this feedback. We are not aware of this issue and would like to ask you to raise a service ticket that we can have a deeper look into your situation.
      Best Regards, Josef


    • Thanks for pointing that out Markus, I didn't test that yet.

      You are correct, I also get errors on the Marketing Permissions in Sales Cloud, but even more errors than just nothing found.

      I will also open a ticket, but Josef Ehbauer  my findings are:

      1. The API that is called at first is /sap/opu/odata/sap/API_MKT_INTERACTION_CONTACT_SRV;v=0002/InteractionContactOriginData?$filter=InteractionContactOrigin eq 'SAP_C4C_BUPA' and InteractionContactID eq '0001027547'&$expand=MarketingPermissions&$select=MarketingPermissions&$sap-language=EN
      2. the CPI flow appends a filter to the url which includes "&$sap-language=EN" at the end, which gives the first error "Invalid system query option: '$sap-language'."
      3. When simulating in Postman without the sap-language parameter, it complains about the mandatory "top" parameter not being present
      4. When fixing the top parameter, the API called becomes /sap/opu/odata/sap/API_MKT_INTERACTION_CONTACT_SRV;v=0002/InteractionContactOriginData?$top=10&$filter=InteractionContactOrigin eq 'SAP_C4C_BUPA' and InteractionContactID eq '0001027547'&$expand=MarketingPermissions&$select=MarketingPermissions , which indeed returns no results. The SAP_C4C_BUPA is no longer a Main origin but an additional id, so InteractionContactOriginData cannot return any results (it probably looks through the CUAND_CE_IC_FT_D table which would not have an entry for SAP_C4C_BUPA being an additional origin). If we change the url to /sap/opu/odata/sap/API_MKT_INTERACTION_CONTACT_SRV;v=0002/InteractionContactOriginData?$top=10&$filter=InteractionContactOrigin eq 'SAP_MKT_BUPA' and InteractionContactID eq '1029539'&$expand=MarketingPermissions&$select=MarketingPermissions in postman, then we finally get the expected results.