We are excited to announce that Topliners is moving to Cloud Customer Connect! The migration will be complete in July, at which time you can access Oracle Marketing discussions, knowledge and events via Cloud Customer Connect. There will be no changes to your login/profile, content you've authored, nor bookmarks in your followed categories. Redirect links will ensure you quickly and easily find your way to product categories you follow. In addition, you will have access to other Oracle CX-related content.

Please note Topliners will be read only beginning July 25, 2 PM PDT to July 27 9 AM PDT.

Discussions

Export definition for CDO, how to I pass 10k/20k records using "filter": "STATUS('{{ActionInstance..

Indira S
Indira S Posts: 4 Green Ribbon

Hi All,

I want to create an export definition for CDO objects to export CDO data from a campaign where I have my app. My record definition looks as below, passing the records using the "status" filter, API endpoint /api/bulk/2.0/customobjects/id/exports

{ "name": "Hot Air Balloon Export", 

"fields": { "address1": "{{CustomObject[13].Field[296]}}",

 "city": "{{CustomObject[13].Field[289]}}" }, 

"filter": "STATUS('{{ActionInstance(6b304cfb372449c4b56e859ec9c70586).Execution[4860]}}') = 'pending'" }

The status filter works for contact entity but not CDO entity.

My questions:

1.Are there any other filters I can use (I do not have any set pattern of the segment I am passing)

2.Am I using this Status filter in wrong syntax or can I not use status filter for retrieving CDO objects?

3.Any other suggestions to export bulk CDO data at once ?

Thanks for the help in advance,

Indira

Answers

  • Lou Patrick
    Lou Patrick Posts: 169 Bronze Trophy

    The canvas type must match the object, e.g. if it's a Campaign canvas you can only export Contacts. If it's a Custom Object Program canvas you can export custom objects. Note, the Custom Object Id selected for the Custom Object Program canvas must match the Custom Object Id used in the Bulk API export.

    As to your question on volume, if you include the Execution Id you can only export the max Execution batch size of 5000. If you remove the Execution Id you can export all pending records in the step. Here is how the filter would look without Execution Id:

    "filter": "STATUS('{{ActionInstance(6b304cfb372449c4b56e859ec9c70586)}}') = 'pending'"

  • Indira S
    Indira S Posts: 4 Green Ribbon

    Dear Lou,

    Thank you for your answer.

    I wanted to export Contact+Account+CDO data from campaign for an app, from a campaign. Your answer suggests that it cant be done.

    On the export part, I wanted to use this filter to export CDO data from a campaign. Again unfortunately, I cant use app status as filter to export CDO data using Bulk/Rest API.

    The confirmation was helpful.

    Thank you,

    Indira

  • Syed R
    Syed R Posts: 36 Red Ribbon

    Hi Lou,

    I believe we are running into the same issue here. We are building an app on Decision Services and would like to fetch custom object data for contacts. The app is being designed for both Campaign Canvas and Program Canvas. The Program Canvas only allows a single CDO, so we are hoping to build configuration for all CDO's. Here is how the app looks.


    When we attempt to do that, we get a 400 error with the following response.

    {

    "failures":[{"field":"__CustomObject_25__Field_231___","stackTrace":[{"field":"fields"}],"value":"{{CustomObject[25].Field[231]}}","constraint":"ML Statements must have a Contact root (see http://docs.oracle.com/cloud/latest/marketingcs_gs/OMCAB/index.html#CSHID=MarkupLanguageV3 for details)."}]}

    Additionally, when we try to run a CDO export, we run into limitations with the "Filter" expression which requires creating significantly more CDO exports and of course take a performance hit.

    Also, can you tell us what API's does the following app uses? This one seems to work fine. Is it hitting the domain directly?

    I was hoping if you can offer some guidance around accommodating CDO's in our app. Please let me know if you require any additional information.

    Thank you,

    Syed

  • Lou Patrick
    Lou Patrick Posts: 169 Bronze Trophy

    You are correct, the same limitation applies to Decision Services. The canvas type must match the object, e.g. if it's a Campaign canvas or a Contact Program canvas you can only export Contacts. If it's a Custom Object Program canvas you can export custom objects. Note, the Custom Object Id selected for the Custom Object Program canvas must match the Custom Object Id used in the Bulk API export.

    One option that is commonly used for this requirement is to cache the whole Custom Object, and retrieve only updated records periodically or when needed.

    Another option would be to filter on a range instead of individual contacts. For example you could take the lowest and largest contact id in a batch and build a filter. For example, say the lowest contact id is 2 and the highest 70, you could build the filter like this:

    "'{{CustomObject[<id>].Contact.Id}}' >= '2' AND '{{CustomObject[<id>].Contact.Id}}' <= '70'"

    An additional option if you are working with low volumes, e.g. there are only a small number of contacts flowing through at any given time, you could look at using the Application API endpoint along with the search URL parameter.

    The "Compare Custom Object Fields" step is not an app, that is a native Canvas step.

  • Syed R
    Syed R Posts: 36 Red Ribbon
    edited Feb 4, 2023 2:39AM

    Thanks, Lou. Appreciate the prompt response. I remember going through this cycle when we built our app on Action service in 2015. It appears that the API's haven't changed much since then.

    I will evaluate your suggestions internally with our dev. team, and will reach out if we have any additional questions. Thanks again!