diff --git a/gatsby-config.js b/gatsby-config.js
index efce9dd634..d6ffb080fd 100644
--- a/gatsby-config.js
+++ b/gatsby-config.js
@@ -125,6 +125,16 @@ module.exports = {
title: "Validation",
path: "/edge/edge-network/validation"
},
+ {
+ title: "Tutorials",
+ path: "/edge/edge-network/tutorials",
+ pages: [
+ {
+ title: "Datastream config overrides using rules",
+ path: "/edge/edge-network/tutorials/datastream-config-override-rules"
+ }
+ ]
+ },
{
title: "Release notes",
path: "/edge/edge-network/release-notes"
@@ -739,4 +749,4 @@ module.exports = {
},
plugins: [`@adobe/gatsby-theme-aio`],
pathPrefix: process.env.PATH_PREFIX || '/client-sdks/'
-};
\ No newline at end of file
+};
diff --git a/src/pages/edge/edge-network/api-reference.md b/src/pages/edge/edge-network/api-reference.md
index 86d8764278..757ddec042 100644
--- a/src/pages/edge/edge-network/api-reference.md
+++ b/src/pages/edge/edge-network/api-reference.md
@@ -60,6 +60,15 @@ See [MobileCore.resetIdentities](../../home/base/mobile-core/api-reference.md#re
Sends an Experience event to Adobe Experience Platform Edge Network.
+
+
+Starting with `Edge` extension version **2.4.0** (Android) and **4.3.0** (iOS), the `sendEvent` API supports optional datastream overrides. This allows you to adjust your datastreams without the need for new ones or modifications to existing settings.
+
+The process involves two steps:
+
+1. Define your Datastream configuration overrides on the [datastream configuration page](https://experienceleague.adobe.com/docs/experience-platform/datastreams/configure.html).
+2. Send these overrides to the Edge Network using the `sendEvent` API.
+
Android
diff --git a/src/pages/edge/edge-network/assets/tutorial/configOverrides/datastream-config-override-payload.png b/src/pages/edge/edge-network/assets/tutorial/configOverrides/datastream-config-override-payload.png
new file mode 100644
index 0000000000..dcbbec523e
Binary files /dev/null and b/src/pages/edge/edge-network/assets/tutorial/configOverrides/datastream-config-override-payload.png differ
diff --git a/src/pages/edge/edge-network/assets/tutorial/configOverrides/datastream-id-override-payload.png b/src/pages/edge/edge-network/assets/tutorial/configOverrides/datastream-id-override-payload.png
new file mode 100644
index 0000000000..80e3b8749a
Binary files /dev/null and b/src/pages/edge/edge-network/assets/tutorial/configOverrides/datastream-id-override-payload.png differ
diff --git a/src/pages/edge/edge-network/assets/tutorial/configOverrides/final-rule-configoverrides.png b/src/pages/edge/edge-network/assets/tutorial/configOverrides/final-rule-configoverrides.png
new file mode 100644
index 0000000000..aa568d5b6e
Binary files /dev/null and b/src/pages/edge/edge-network/assets/tutorial/configOverrides/final-rule-configoverrides.png differ
diff --git a/src/pages/edge/edge-network/assets/tutorial/configOverrides/if-event-application-close.png b/src/pages/edge/edge-network/assets/tutorial/configOverrides/if-event-application-close.png
new file mode 100644
index 0000000000..155b205f34
Binary files /dev/null and b/src/pages/edge/edge-network/assets/tutorial/configOverrides/if-event-application-close.png differ
diff --git a/src/pages/edge/edge-network/assets/tutorial/configOverrides/if-event-application-launch.png b/src/pages/edge/edge-network/assets/tutorial/configOverrides/if-event-application-launch.png
new file mode 100644
index 0000000000..6ff57bbe79
Binary files /dev/null and b/src/pages/edge/edge-network/assets/tutorial/configOverrides/if-event-application-launch.png differ
diff --git a/src/pages/edge/edge-network/tabs/api-reference.md b/src/pages/edge/edge-network/tabs/api-reference.md
index 73bedf924d..79e85ba986 100644
--- a/src/pages/edge/edge-network/tabs/api-reference.md
+++ b/src/pages/edge/edge-network/tabs/api-reference.md
@@ -134,7 +134,7 @@ Edge.getLocationHint { (hint, error) in
**Example**
```objectivec
-[AEPMobileEdge getLocationHint:^(NSString *hint, NSError *error) {
+[AEPMobileEdge getLocationHint:^(NSString *hint, NSError *error) {
// handle the error and the hint here
}];
```
@@ -186,7 +186,7 @@ Use the AEPMobileCore API to register the Edge extension.
**Syntax**
```objectivec
-+ (void) registerExtensions: (NSArray* _Nonnull) extensions
++ (void) registerExtensions: (NSArray* _Nonnull) extensions
completion: (void (^ _Nullable)(void)) completion;
```
@@ -199,14 +199,15 @@ Use the AEPMobileCore API to register the Edge extension.
```
-
+
#### Java
**Syntax**
```java
-public static void sendEvent(final ExperienceEvent experienceEvent, final EdgeCallback callback);
+public static void sendEvent(final ExperienceEvent experienceEvent,
+ final EdgeCallback callback);
```
* _experienceEvent_ - the XDM [Experience Event](#experienceevent) to be sent to Adobe Experience Platform Edge Network
@@ -219,7 +220,7 @@ public static void sendEvent(final ExperienceEvent experienceEvent, final EdgeCa
Map xdmData = new HashMap<>();
xdmData.put("eventType", "SampleXDMEvent");
xdmData.put("sample", "data");
-
+
ExperienceEvent experienceEvent = new ExperienceEvent.Builder()
.setXdmSchema(xdmData)
.build();
@@ -235,7 +236,84 @@ Edge.sendEvent(experienceEvent, null);
Edge.sendEvent(experienceEvent, new EdgeCallback() {
@Override
public void onComplete(final List handles) {
- // Handle the Edge Network response
+ // Handle the Edge Network response
+ }
+});
+```
+
+##### Example with Datastream ID override
+
+```java
+// Create experience event from Map
+Map xdmData = new HashMap<>();
+xdmData.put("eventType", "SampleXDMEvent");
+xdmData.put("sample", "data");
+
+ExperienceEvent experienceEvent = new ExperienceEvent.Builder()
+ .setXdmSchema(xdmData)
+ .setDatastreamIdOverride("SampleDatastreamId")
+ .build();
+
+Edge.sendEvent(experienceEvent, new EdgeCallback() {
+ @Override
+ public void onComplete(final List handles) {
+ // Handle the Edge Network response
+ }
+});
+```
+
+##### Example with Datastream config override
+
+```java
+// ----------------- Datastream config overrides map start -----------------
+Map configOverrides = new HashMap<>();
+
+// com_adobe_experience_platform
+Map experiencePlatform = new HashMap<>();
+Map datasets = new HashMap<>();
+
+Map eventDataset = new HashMap<>();
+eventDataset.put("datasetId", "SampleEventDatasetIdOverride");
+
+Map profileDataset = new HashMap<>();
+profileDataset.put("datasetId", "SampleProfileDatasetIdOverride");
+
+datasets.put("event", eventDataset);
+datasets.put("profile", profileDataset);
+
+experiencePlatform.put("datasets", datasets);
+configOverrides.put("com_adobe_experience_platform", experiencePlatform);
+
+// com_adobe_analytics
+Map analytics = new HashMap<>();
+analytics.put("reportSuites", new String[]{"rsid1", "rsid2", "rsid3"});
+configOverrides.put("com_adobe_analytics", analytics);
+
+// com_adobe_identity
+Map identity = new HashMap<>();
+identity.put("idSyncContainerId", "1234567");
+configOverrides.put("com_adobe_identity", identity);
+
+// com_adobe_target
+Map target = new HashMap<>();
+target.put("propertyToken", "SamplePropertyToken");
+configOverrides.put("com_adobe_target", target);
+// ----------------- Datastream config overrides map end -----------------
+
+// Create experience event from Map
+Map xdmData = new HashMap<>();
+xdmData.put("eventType", "SampleXDMEvent");
+xdmData.put("sample", "data");
+
+ExperienceEvent experienceEvent = new ExperienceEvent.Builder()
+ .setXdmSchema(xdmData)
+ .setDatastreamConfigOverride(configOverrides)
+ .build();
+
+Edge.sendEvent(experienceEvent, new EdgeCallback() {
+ @Override
+ public void onComplete(final List handles) {
+ // Handle the Edge Network response
}
});
```
@@ -244,7 +322,7 @@ Edge.sendEvent(experienceEvent, new EdgeCallback() {
**Example**
-```java
+```kotlin
// Create Experience Event from map
val xdmData = mutableMapOf()
xdmData["eventType"] = "SampleXDMEvent"
@@ -255,19 +333,73 @@ val experienceEvent = ExperienceEvent.Builder()
.build()
```
-```java
+```kotlin
// Example 1 - send the Experience Event without handling the Edge Network response
Edge.sendEvent(experienceEvent, null)
```
-```java
+```kotlin
// Example 2 - send the Experience Event and handle the Edge Network response onComplete
Edge.sendEvent(experienceEvent) {
- // Handle the Edge Network response
+ // Handle the Edge Network response
}
```
-
+##### Example with Datastream ID override
+
+```kotlin
+// Create experience event from Map
+val xdmData = mutableMapOf()
+xdmData["eventType"] = "SampleXDMEvent"
+xdmData["sample"] = "data"
+
+val experienceEvent = ExperienceEvent.Builder()
+ .setXdmSchema(xdmData)
+ .setDatastreamIdOverride("SampleDatastreamId")
+ .build()
+
+Edge.sendEvent(experienceEvent) {
+ // Handle the Edge Network response
+}
+```
+
+##### Example with Datastream config override
+
+```kotlin
+// Create experience event from Map
+val xdmData = mutableMapOf()
+xdmData["eventType"] = "SampleXDMEvent"
+xdmData["sample"] = "data"
+
+val configOverrides = mapOf(
+ "com_adobe_experience_platform" to mapOf(
+ "datasets" to mapOf(
+ "event" to mapOf("datasetId" to "SampleEventDatasetIdOverride"),
+ "profile" to mapOf("datasetId" to "SampleProfileDatasetIdOverride")
+ )
+ ),
+ "com_adobe_analytics" to mapOf(
+ "reportSuites" to listOf("rsid1", "rsid2", "rsid3")
+ ),
+ "com_adobe_identity" to mapOf(
+ "idSyncContainerId" to "1234567"
+ ),
+ "com_adobe_target" to mapOf(
+ "propertyToken" to "SamplePropertyToken"
+ )
+ )
+
+val experienceEvent = ExperienceEvent.Builder()
+ .setXdmSchema(xdmData)
+ .setDatastreamConfigOverride(configOverrides)
+ .build()
+
+Edge.sendEvent(experienceEvent) {
+ // Handle the Edge Network response
+}
+```
+
+
#### Swift
@@ -297,8 +429,61 @@ Edge.sendEvent(experienceEvent: experienceEvent)
```swift
// Example 2 - send the Experience Event and handle the Edge Network response onComplete
Edge.sendEvent(experienceEvent: experienceEvent) { (handles: [EdgeEventHandle]) in
- // Handle the Edge Network response
- }
+ // Handle the Edge Network response
+}
+```
+
+##### Example with Datastream ID override
+
+```swift
+// Create Experience event from dictionary
+var xdmData : [String: Any] = ["eventType" : "SampleXDMEvent",
+ "sample": "data"]
+let experienceEvent = ExperienceEvent(xdm: xdmData, datastreamIdOverride: "SampleDatastreamId")
+
+Edge.sendEvent(experienceEvent: experienceEvent) { (handles: [EdgeEventHandle]) in
+ // Handle the Edge Network response
+}
+```
+
+##### Example with Datastream config override
+
+```swift
+// Create Experience event from dictionary
+var xdmData : [String: Any] = ["eventType" : "SampleXDMEvent",
+ "sample": "data"]
+
+let configOverrides: [String: Any] = [
+ "com_adobe_experience_platform": [
+ "datasets": [
+ "event": [
+ "datasetId": "SampleEventDatasetIdOverride"
+ ],
+ "profile": [
+ "datasetId": "SampleProfileDatasetIdOverride"
+ ]
+ ]
+ ],
+ "com_adobe_analytics": [
+ "reportSuites": [
+ "rsid1",
+ "rsid2",
+ "rsid3"
+ ]
+ ],
+ "com_adobe_identity": [
+ "idSyncContainerId": "1234567"
+ ],
+ "com_adobe_target": [
+ "propertyToken": "SamplePropertyToken"
+ ]
+ ]
+
+let experienceEvent = ExperienceEvent(xdm: xdmData, datastreamConfigOverride: configOverrides)
+
+Edge.sendEvent(experienceEvent: experienceEvent) { (handles: [EdgeEventHandle]) in
+ // Handle the Edge Network response
+}
```
#### Objective-C
@@ -329,6 +514,57 @@ NSDictionary *data = @{ @"sample" : @"data"};
}];
```
+##### Example with Datastream ID override
+
+```objectivec
+// Create Experience event from dictionary:
+NSDictionary *xdmData = @{ @"eventType" : @"SampleXDMEvent"};
+NSDictionary *data = @{ @"sample" : @"data"};
+AEPExperienceEvent* event = [[AEPExperienceEvent alloc]initWithXdm:xdmData data:data datastreamIdOverride: @"SampleDatastreamIdOverride"];
+
+[AEPMobileEdge sendExperienceEvent:event completion:^(NSArray * _Nonnull handles) {
+ // Handle the Edge Network response
+}];
+```
+
+##### Example with Datastream config override
+
+```objectivec
+// Create Experience event from dictionary:
+NSDictionary *xdmData = @{ @"eventType" : @"SampleXDMEvent"};
+NSDictionary *data = @{ @"sample" : @"data"};
+NSDictionary *configOverrides = @{ @"com_adobe_experience_platform" : @{
+ @"datasets" : @{
+ @"event" : @{
+ @"datasetId": @"SampleEventDatasetIdOverride"
+ },
+ @"profile" : @{
+ @"datasetId": @"SampleProfileDatasetIdOverride"
+ }
+ }
+ },
+ @"com_adobe_analytics" : @{
+ @"reportSuites" : @[
+ @"rsid1",
+ @"rsid2",
+ @"rsid3",
+ ]
+ },
+ @"com_adobe_identity" : @{
+ @"idSyncContainerId": @"1234567"
+ },
+ @"com_adobe_target" : @{
+ @"propertyToken": @"SamplePropertyToken"
+ }
+ }
+
+AEPExperienceEvent* event = [[AEPExperienceEvent alloc]initWithXdm:xdmData data:data datastreamConfigOverride: configOverrides];
+
+[AEPMobileEdge sendExperienceEvent:event completion:^(NSArray * _Nonnull handles) {
+ // Handle the Edge Network response
+}];
+```
+
#### Java
@@ -475,13 +711,13 @@ public protocol XDMSchema: Encodable {
*/
public class EdgeEventHandle {
/**
- * @return the payload type or null if not found in the {@link JSONObject} response
- */
+ * @return the payload type or null if not found in the {@link JSONObject} response
+ */
public String getType() {...}
/**
- * @return the event payload values for this {@link EdgeEventHandle} or null if not found in the {@link JSONObject} response
- */
+ * @return the event payload values for this {@link EdgeEventHandle} or null if not found in the {@link JSONObject} response
+ */
public List