+>
+>
+>
+> invalid_key_rule
+>
+>
+> invalid-key-message
+> 1
+>
+> (fault.name = "FailedToResolveAPIKey")
+>
+>
+>
+>
+>
+>
+>
+> over_quota
+>
+>
+> developer-over-quota-fault
+> (ratelimit.developer-quota-policy.exceed.count GreaterThan "0")
+> 1
+>
+>
+> global-over-quota-fault
+> (ratelimit.global-quota-policy.exceed.count GreaterThan "0")
+> 1
+>
+>
+> log-error-message
+> 1
+>
+> (fault.name = "QuotaViolation")
+>
+>
+>
+>
+>
+>
+>
+> random-error-message
+>
+>
+> Random-fault
+> 1
+>
+>
+>
+>
+>
+>
+>
+>
+> default-fault
+> true
+>
+>
+> Default-message
+> 1
+>
+>
+>
+>
+> ```
+
+
+
+
+
+## Fault rule order
+
+As you can see in the previous example, the order in which you place your FaultRules is important, depending on whether the error occurs in the ProxyEndpoint versus the TargetEndpoint.
+
+
+
+
+
+
+ProxyEndpoint order
+
+ |
+
+
+TargetEndpoint order
+
+ |
+
+
+
+
+In the following example, since evaluation is performed from bottom to top, FaultRule 3 is executed, which means FaultRules 2 and 1 are not evaluated:
+
+5. FaultRule 1: FALSE
+
+4. FaultRule 2: TRUE
+
+3. FaultRule 3: TRUE
+
+2. FaultRule 4: FALSE
+
+1. FaultRule: 5 FALSE
+
+ |
+
+
+In the following example, since evaluation is performed from top to bottom, FaultRule 2 is executed, which means FaultRules 3, 4, and 5 are not evaluated:
+
+1. FaultRule 1: FALSE
+
+2. FaultRule 2: TRUE
+
+3. FaultRule 3: TRUE
+
+4. FaultRule 4: FALSE
+
+5. FaultRule: 5 FALSE
+
+ |
+
+
+
diff --git a/docs/ISuite/50-Development/header-properties-8951a9f.md b/docs/ISuite/50-Development/header-properties-8951a9f.md
new file mode 100644
index 00000000..829dd8ad
--- /dev/null
+++ b/docs/ISuite/50-Development/header-properties-8951a9f.md
@@ -0,0 +1,193 @@
+
+
+# Header Properties
+
+A list of header properties that can be found in project definition files.
+
+
+
+
+
+## `label`
+
+A short description of the custom entity that is used in metadata documentation.
+
+
+
+
+
+## `entity`
+
+The full name of the custom entity. For example:
+
+```
+"entity": "bestrun.financials.Receipt"
+```
+
+In this example,`bestrun.financials` is the namespace, and `Receipt` is the entity name.
+
+
+
+
+
+## `version`
+
+The current semantic version of the custom entity, using a [semver](https://semver.org/) convention. Using this convention, the format of this property value is `major.minor.patch`. The major version number is incremented to indicate an incompatible change. The minor version is incremented for new backwards-compatible functionality, and the patch number is incremented to indicate a bug fix, documentation change, or other small improvement.
+
+A data graph can only contain one version of a custom entity, but different data graphs can use different versions of the custom entity.
+
+```
+"version": "1.0.5" // major version 1, patch 5
+```
+
+
+
+
+
+## `sourceEntities`
+
+Custom entities are constructed from attributes, which are mapped to mirrored data source entity attributes. The `sourceEntities` array property lists the mirrored entities whose attributes are used in these mappings.
+
+> ### Note:
+> Only mirrored projection entities can be specified as data source entities. It is not possible to recursively define a custom entity as a mapping of another custom or unified entity.
+
+Most custom entities only require one source entity. Complex, composed custom entities can have two or more source entities. The first or only source entity is referred to as the *main source* entity, and is the default one if none is specified in an attribute mapping. The subsequent source entities are defined via a join property of the corresponding source attributes that have matching instance values.
+
+Each source entity is described as an object with the following structure:
+
+
+
+
+
+
+Property
+
+ |
+
+
+Type
+
+ |
+
+
+Mandatory
+
+ |
+
+
+Description
+
+ |
+
+
+
+
+`name`
+
+ |
+
+
+String
+
+ |
+
+
+Yes
+
+ |
+
+
+The full name of the source entity. Like the custom entity, the source entity name must be fully qualified, including the namespace.
+
+The first `sourceEntity` in the array is the default.
+
+ |
+
+
+
+
+`join`
+
+ |
+
+
+Array
+
+ |
+
+
+Yes
+
+ |
+
+
+This property doesn't apply to the first, default source entity, but must be present in all nondefault source entity objects. It consists of one or more pairs of primary key attributes, which indicate how the instances of the source entity match the main source entity. The first item in the pair is the name of a source key attribute in the main source entity and the second is the corresponding key attribute name in the current source entity. For example:
+
+```
+"join": [["BusinessPartner", "Customer"]]
+```
+
+indicates that the `Customer` key in this source entity corresponds to the `BusinessPartner` key in the main source entity. If more than one pair is specified, they must both match:
+
+```
+"sourceEntities": [
+ { "name": "my.course" },
+ { "name": "my.classRoom", "join": [["subject", "Subject"], ["teacher", "Teacher"]] }
+]
+
+```
+
+This is interpreted as:`my.course.subject = my.classRoom.Subject AND my.course.teacher = my.classRoom.Teacher`
+
+ |
+
+
+
+Here's an example of a complex `sourceEntities` property:
+
+```
+"sourceEntities": [
+ { "name": "sap.s4.A_BusinessPartnerRole" },
+ { "name": "sap.s4.A_BusinessPartner", "join": [["BusinessPartner", "BusinessPartner"]] },
+ { "name": "sap.s4.A_BusinessPartnerContact", "join": [["BusinessPartner", "BusinessPartnerPerson"]] }
+ ],
+
+```
+
+> ### Note:
+> Custom entities based on multiple data sources can't be written atomically, since data changes involve multiple systems, which can't guarantee an atomic transaction. The approach Graph takes is to allow developers to change \(write, update\) only the non read-only attributes of the main data source \(the first one in the list\). Attributes from the source entity, that is not a main source entity, cannot be written and are always read-only, whether explicitly declared so in an annotation, or not. Deleting a custom entity instance only deletes the corresponding underlying main source entity, but not the other source entities.
+
+
+
+
+
+## `dicts`
+
+The dicts objects contain dictionary objects. Each dictionary object is a simple value mapping. For example, a certain data source attribute is defined as a single digit, 1, 2, … 5 representing five enumeration values, from poor to excellent. Modelers can replace the numeric values by defining them as follows:
+
+```
+"dicts": {
+ "qualityDict": { "poor": "1", … "excellent": "5", "not rated": "0" }
+}
+
+```
+
+The last entry in the dictionary is the default value, when no other value matches. For more information, see the dict transform in [Transform Functions](transform-functions-cec1e73.md).
+
+
+
+
+
+## `annotations`
+
+A list \(object\) of annotation properties. You can use the following optional properties:
+
+- `description` \(String\)
+
+ A comprehensive description of the entity, used in metadata documentation.
+
+- `readonly` \(boolean, default is false\)
+
+ True if the custom entity is treated as read-only.
+
+
diff --git a/docs/ISuite/50-Development/id-mapping-with-multicast-55f2d4a.md b/docs/ISuite/50-Development/id-mapping-with-multicast-55f2d4a.md
index 04a056c6..4d7050aa 100644
--- a/docs/ISuite/50-Development/id-mapping-with-multicast-55f2d4a.md
+++ b/docs/ISuite/50-Development/id-mapping-with-multicast-55f2d4a.md
@@ -149,7 +149,7 @@ Value
-`${property.SplitMessageID}`
+`${header.SapMessageIdEx}`
|
@@ -229,7 +229,7 @@ Value
-`${property.SplitMessageID}`
+`${header.SapMessageIdEx}`
|
diff --git a/docs/ISuite/50-Development/images/Application_Architypes_f65da8e.png b/docs/ISuite/50-Development/images/Application_Architypes_f65da8e.png
new file mode 100644
index 00000000..fc8a4620
Binary files /dev/null and b/docs/ISuite/50-Development/images/Application_Architypes_f65da8e.png differ
diff --git a/docs/ISuite/50-Development/images/CPI_ODataAPI_a325b4e.png b/docs/ISuite/50-Development/images/CPI_ODataAPI_a325b4e.png
new file mode 100644
index 00000000..95231626
Binary files /dev/null and b/docs/ISuite/50-Development/images/CPI_ODataAPI_a325b4e.png differ
diff --git a/docs/ISuite/50-Development/images/CPI_OData_Authentication_2fc6272.png b/docs/ISuite/50-Development/images/CPI_OData_Authentication_2fc6272.png
new file mode 100644
index 00000000..b5bcfc50
Binary files /dev/null and b/docs/ISuite/50-Development/images/CPI_OData_Authentication_2fc6272.png differ
diff --git a/docs/ISuite/50-Development/images/CPI_OData_Query2_6dae5cb.png b/docs/ISuite/50-Development/images/CPI_OData_Query2_6dae5cb.png
new file mode 100644
index 00000000..5afb1356
Binary files /dev/null and b/docs/ISuite/50-Development/images/CPI_OData_Query2_6dae5cb.png differ
diff --git a/docs/ISuite/50-Development/images/Coupa_Receiver_Adapter_dccbe44.png b/docs/ISuite/50-Development/images/Coupa_Receiver_Adapter_dccbe44.png
new file mode 100644
index 00000000..1b9d90b1
Binary files /dev/null and b/docs/ISuite/50-Development/images/Coupa_Receiver_Adapter_dccbe44.png differ
diff --git a/docs/ISuite/50-Development/images/Elements_of_Modeling_4eb2b4b.png b/docs/ISuite/50-Development/images/Elements_of_Modeling_4eb2b4b.png
new file mode 100644
index 00000000..44e4c696
Binary files /dev/null and b/docs/ISuite/50-Development/images/Elements_of_Modeling_4eb2b4b.png differ
diff --git a/docs/ISuite/50-Development/images/Flow_Chart_for_Developers_16e4fd5.png b/docs/ISuite/50-Development/images/Flow_Chart_for_Developers_16e4fd5.png
new file mode 100644
index 00000000..5ffb0c79
Binary files /dev/null and b/docs/ISuite/50-Development/images/Flow_Chart_for_Developers_16e4fd5.png differ
diff --git a/docs/ISuite/50-Development/images/Graph_Concept_Key_5b01c09.png b/docs/ISuite/50-Development/images/Graph_Concept_Key_5b01c09.png
new file mode 100644
index 00000000..a02b5250
Binary files /dev/null and b/docs/ISuite/50-Development/images/Graph_Concept_Key_5b01c09.png differ
diff --git a/docs/ISuite/50-Development/images/Graph_Landscape_62258b9.png b/docs/ISuite/50-Development/images/Graph_Landscape_62258b9.png
new file mode 100644
index 00000000..fa78a855
Binary files /dev/null and b/docs/ISuite/50-Development/images/Graph_Landscape_62258b9.png differ
diff --git a/docs/ISuite/50-Development/images/Graph_URL_Syntax_55a4f49.png b/docs/ISuite/50-Development/images/Graph_URL_Syntax_55a4f49.png
new file mode 100644
index 00000000..4b83fb19
Binary files /dev/null and b/docs/ISuite/50-Development/images/Graph_URL_Syntax_55a4f49.png differ
diff --git a/docs/ISuite/50-Development/images/Landscape_Partitioned_Data_d6ce31e.png b/docs/ISuite/50-Development/images/Landscape_Partitioned_Data_d6ce31e.png
new file mode 100644
index 00000000..3cc9eb73
Binary files /dev/null and b/docs/ISuite/50-Development/images/Landscape_Partitioned_Data_d6ce31e.png differ
diff --git a/docs/ISuite/50-Development/images/Modeling_Example_1_683b7f3.png b/docs/ISuite/50-Development/images/Modeling_Example_1_683b7f3.png
new file mode 100644
index 00000000..4f4e2a2a
Binary files /dev/null and b/docs/ISuite/50-Development/images/Modeling_Example_1_683b7f3.png differ
diff --git a/docs/ISuite/50-Development/images/Modeling_Example_2_e3aad43.png b/docs/ISuite/50-Development/images/Modeling_Example_2_e3aad43.png
new file mode 100644
index 00000000..974e4f16
Binary files /dev/null and b/docs/ISuite/50-Development/images/Modeling_Example_2_e3aad43.png differ
diff --git a/docs/ISuite/50-Development/images/Modeling_Example_3_213d452.png b/docs/ISuite/50-Development/images/Modeling_Example_3_213d452.png
new file mode 100644
index 00000000..4eac870a
Binary files /dev/null and b/docs/ISuite/50-Development/images/Modeling_Example_3_213d452.png differ
diff --git a/docs/ISuite/50-Development/images/Modeling_Example_4_bd6d332.png b/docs/ISuite/50-Development/images/Modeling_Example_4_bd6d332.png
new file mode 100644
index 00000000..fe0e7900
Binary files /dev/null and b/docs/ISuite/50-Development/images/Modeling_Example_4_bd6d332.png differ
diff --git a/docs/ISuite/50-Development/images/Modeling_Intro_2b906e7.png b/docs/ISuite/50-Development/images/Modeling_Intro_2b906e7.png
new file mode 100644
index 00000000..0d36cf00
Binary files /dev/null and b/docs/ISuite/50-Development/images/Modeling_Intro_2b906e7.png differ
diff --git a/docs/ISuite/50-Development/images/Modeling_Reference_44dd2ab.png b/docs/ISuite/50-Development/images/Modeling_Reference_44dd2ab.png
new file mode 100644
index 00000000..14f835aa
Binary files /dev/null and b/docs/ISuite/50-Development/images/Modeling_Reference_44dd2ab.png differ
diff --git a/docs/ISuite/50-Development/images/NetSuite_Adapter_0cae5fe.png b/docs/ISuite/50-Development/images/NetSuite_Adapter_0cae5fe.png
new file mode 100644
index 00000000..f1b9bd81
Binary files /dev/null and b/docs/ISuite/50-Development/images/NetSuite_Adapter_0cae5fe.png differ
diff --git a/docs/ISuite/50-Development/images/OData_URL_Syntax_3fb43c5.png b/docs/ISuite/50-Development/images/OData_URL_Syntax_3fb43c5.png
new file mode 100644
index 00000000..19818db4
Binary files /dev/null and b/docs/ISuite/50-Development/images/OData_URL_Syntax_3fb43c5.png differ
diff --git a/docs/ISuite/50-Development/images/SalesQuote_Business_Data_Graph_ede046e.png b/docs/ISuite/50-Development/images/SalesQuote_Business_Data_Graph_ede046e.png
new file mode 100644
index 00000000..0788d160
Binary files /dev/null and b/docs/ISuite/50-Development/images/SalesQuote_Business_Data_Graph_ede046e.png differ
diff --git a/docs/ISuite/50-Development/images/Token-Based_Authentication_6207efc.png b/docs/ISuite/50-Development/images/Token-Based_Authentication_6207efc.png
new file mode 100644
index 00000000..b1f40b67
Binary files /dev/null and b/docs/ISuite/50-Development/images/Token-Based_Authentication_6207efc.png differ
diff --git a/docs/ISuite/50-Development/import-and-export-agreements-09400a2.md b/docs/ISuite/50-Development/import-and-export-agreements-09400a2.md
index 5c5d448a..ac2360db 100644
--- a/docs/ISuite/50-Development/import-and-export-agreements-09400a2.md
+++ b/docs/ISuite/50-Development/import-and-export-agreements-09400a2.md
@@ -65,6 +65,11 @@ If you chose *Export Agreement*,
- *Skip* to skip the export of all parameters.
+ - *Security*: Choose
+ - *Export All* to export all security configurations except the certificate aliases.
+
+ - *Skip* to skip the export of all security information.
+
Choose *Next* after maintaining the field values.
@@ -96,19 +101,31 @@ If you chose *Import Agreement*,
> The maximum number of agreements allowed per import is 300.
5. Under the *Configure Import Options*, maintain the following fields:
- - *Identifiers*: Choose
+ - *Single Identifiers*: Choose
- *Create Only* if you want to create the identifiers in the system.
- *Create or Overwrite* if you want to import the values or, overwrite them in the system if the alias matches. To know more about aliases, see [Understanding the Basic Concepts](understanding-the-basic-concepts-74c068d.md).
- *Skip* if you want to skip the import of the identifiers.
- - Similary, set the values for the field *System Communication Channels*.
- - For the fields *Parameters* and *Activity Paramaters*, choose:
+ - Similary, set the values for the field *Identifier Groups*.
+ - For the field *Identifiers in Groups*, select:
+ - *Import Empty Groups*: If you want to import just the identifier groups without the identifiers within them, choose this option.
+
+ - *Import Identifiers in Groups \(exclude conflicting Identifiers\)*: If you want to import the groups and the identifers within them, choose this option. This will however exclude the identifiers than conflict with identifiers already existing in the system.
+ - *Import Identifiers in Groups \(include conflicting Identifiers\)*: If you want to import the groups and the identifiers within them, including even the ones that conflict with the identifiers existing already in the system, choose this option.
+
+ - Set the values for the field *System Communication Channels* similar to the identifiers field.
+ - For the fields *Parameters*, *Activity Paramaters* and *Security*, choose:
- *Create or Overwrite* if you want to import the values or, overwrite them in the system if the alias matches. To know more about aliases, see [Understanding the Basic Concepts](understanding-the-basic-concepts-74c068d.md).
- *Skip* if you want to skip the import of the identifiers.
- - Select if you want to import or skip the *MIG References* and *MAG References* using the radio button. The *Import* button is selected by default. The *Remove* button removes all MIG and MAG references from the agreements. You need to reassign the MIGs and MAGs to the imported agreements.
+ - For the fields *MIG References* and *MAG References*, choose:
+
+ - *Import* if you want to import all MIG/MAG references. This will work only if the exact version of the referenced MIG/MAG exists in the importing system. If not, the import will throw an error.
+
+ - *Update to the latest version* when there is a higher version of the MIG/MAG in the importing system and you want to update your MIG/MAG references to that version. However, if there is no corresponding MIG/MAG available in the system, an error will be thrown.
+ - *Skip* to skip importing MIG/MAG references of your agreements.
To know how to export and import MIGs/MAGs seperately, see [Import and Export](https://help.sap.com/docs/cloud-integration/sap-cloud-integration/import-and-export?version=Cloud).
diff --git a/docs/ISuite/50-Development/import-function-library-from-es-repository-d6e7585.md b/docs/ISuite/50-Development/import-function-library-from-es-repository-d6e7585.md
index ddfd11f8..e6936ede 100644
--- a/docs/ISuite/50-Development/import-function-library-from-es-repository-d6e7585.md
+++ b/docs/ISuite/50-Development/import-function-library-from-es-repository-d6e7585.md
@@ -21,13 +21,11 @@
There are certain limitations while importing and consuming the function library object:
-- Function library object with user-defined functions of ExecutionType**ALL\_VALUES\_OF\_QUEUE** is not supported.
-
-- Function library object that has references to imported archives is not supported.
-
- The combination of the attributes `category` and `title` in a function library's method must be unique. No two methods within a function library class can have the same combination.
-- An imported function library object can be consumed in integration flows via message mapping flow steps and message mapping artifacts. For other artifacts like REST API or OData service, you can consume only via message mapping artifacts; not via message mapping flow steps.
+- An imported function library object can be consumed in integration flows via message-mapping flow steps and message mapping artifacts. For other artifacts like REST API or OData service, you can consume only via message mapping artifacts; not via message-mapping flow steps.
+
+- You must maintain a function library object that contains custom Java code for any underlying Java version changes or platform dependencies changes.
@@ -48,7 +46,7 @@ There are certain limitations while importing and consuming the function library
5. Choose a function library object of your choice and choose *Select*.
- The selected function library object gets imported to resource pane.
+ The selected function library object gets imported to the resource pane.
6. Choose the imported object.
@@ -56,4 +54,8 @@ There are certain limitations while importing and consuming the function library
7. Make necessary changes to the java class as per your requirement and choose *Save*.
+ For example, if you want to change the execution type, find the `executionType` key and change its value. The supported values for execution type are: `SINGLE_VALUE`, `ALL_VALUES_OF_QUEUE`, and `ALL_VALUES_OF_CONTEXT`.
+
+8. Deploy the Function Libraries artifact before consumption.
+
diff --git a/docs/ISuite/50-Development/initial-setup-12ad448.md b/docs/ISuite/50-Development/initial-setup-12ad448.md
new file mode 100644
index 00000000..caa14ffe
--- /dev/null
+++ b/docs/ISuite/50-Development/initial-setup-12ad448.md
@@ -0,0 +1,142 @@
+
+
+# Initial Setup
+
+As a Subaccount or Tenant Administrator, you need to add Graph as a capability of API Management within SAP Integration Suite.
+
+
+
+
+
+## Prerequisites
+
+1. Your SAP BTP Global Account administrator has already created a subaccount. For more information, see [Create a Subaccount.](https://help.sap.com/docs/BTP/65de2977205c403bbc107264b8eccf4b/05280a123d3044ae97457a25b3013918.html)
+
+2. An SAP Integration Suite entitlement has been created for your subaccount. For more information, see [Configure Entitlements](https://help.sap.com/docs/BTP/65de2977205c403bbc107264b8eccf4b/37f8871865114f44aebee3db6ac64b72.html).
+
+3. You have subscribed to the SAP Integration Suite and assigned the *Integration\_Provisioner* role collection to yourself. You must assign this role to add capabilities, such as API Management and Graph, on the Integration Suite home page.
+
+ For more information, see [Set Up API Management from Integration Suite](https://developers.sap.com/tutorials/api-mgmt-isuite-initial-setup.html#0bc64de0-ed01-4d11-a675-6dd6942f909e)\(Steps 1–3\).
+
+4. You have activated Graph on the Integration Suite home page and assigned yourself to the following Graph role collection:
+
+ - *Graph.KeyUser*
+
+ When you assign yourself to this role collection, you are automatically assigned to the following roles:
+
+ - *Graph\_Key\_User*
+
+ - *Graph\_Navigator\_Viewer*
+
+
+
+
+
+
+
+
+## 1. Configure Entitlement for Graph
+
+Your global account administrator is responsible for configuring the Graph entitlement as follows:
+
+1. Go to *Entitlements* in the SAP BTP cockpit.
+
+2. Choose *Configure Entitlements* \> *Add Service Plans*.
+
+3. Search for and choose *SAP Graph* and do the following:
+
+ 1. Choose one or more of the following plans:
+
+ - *api* for business data graph consumption
+
+ - *configuration* to configure business data graphs using the Graph Configuration API.
+
+
+ 2. Choose *Add Service Plan*.
+
+ 3. Choose *Save*.
+
+
+
+
+
+
+
+## 2. Configure Graph
+
+1. Go to the *Integration Suite* home page, and under *Capabilities*, choose *Add Capabilities*.
+2. On the *Activate Capabilities* dialog, under *Select Capabilities*, choose *Design, Develop, and Manage APIs* and choose *Next*.
+3. To activate *Graph*, select the following, and choose *Next*:
+
+ 1. *Enable SAP API Business Hub Enterprise*
+
+ 2. *Graph*
+
+ > ### Note:
+ > If you have already set up API Management, choose *Edit*, and select *Graph*. You must select *SAP API Business Hub Enterprise* to activate *Graph*.
+
+4. Choose *Activate* and once the status on the *Summary* changes from *In Progress* to *Active*, choose *OK*.
+
+
+
+
+
+## 3. Define Users for Graph
+
+Graph doesn't manage user identities and it can't directly authenticate clients. Instead, it relies on XSUAA, the SAP Authorization and Trust Management Service.
+
+There are two ways to define users:
+
+- Add users, one-by-one, for the purpose of bootstraps, demos, and proofs of concepts \(PoCs\) to the SAP BTP subaccount \(for example, via the SAP BTP cockpit\).
+
+- Use your own user base and Identity Provider \(IdP\). For this, you must establish a trust relationship with a SAML 2.0 IdP in your subaccount.
+
+ For more information, see [Trust and Federation with Identity Providers](https://help.sap.com/products/BTP/65de2977205c403bbc107264b8eccf4b/cb1bc8f1bd5c482e891063960d7acd78.html).
+
+
+Once you enable Graph, you see both Graph role collections in your list.
+
+
+
+### Enable Graph Users
+
+- Graph Key User
+
+ The creation and activation of business data graphs is managed by a user with a special role, the *Graph\_Key\_User* authorization role. You must assign this role to one or more users so that they can create and activate business data graphs for a landscape.
+
+ To assign the *Graph.KeyUser* role collection to a user, do the following:
+
+ 1. In the SAP BTP cockpit, go to *Security* \> *Users*.
+
+ 2. Select the relevant user. Under *Role Collections*, choose *Assign Role Collection*.
+
+ 3. Search for *Graph.KeyUser*, select the role collection, and choose *Assign Role Collection*.
+
+ 4. To apply the role, go back to the Integration Suite home page.
+
+
+- Graph Navigator Viewer
+
+ Graph Navigator is a tool in SAP API business hub enterprise that developers use to inspect business data graphs. For more information, see [Graph Navigator in SAP API Business Hub Enterprise](graph-navigator-in-sap-api-business-hub-enterprise-8e75d31.md).
+
+ To assign the *GraphNavigator.Viewer* role collection to a user with the *Graph\_Navigator\_Viewer* role, do the following:
+
+ 1. In the SAP BTP cockpit, go to *Security* \> *Users*.
+
+ 2. Select the relevant user. Under *Role Collections*, choose *Assign Role Collection*.
+
+ 3. Search for *GraphNavigator.Viewer*, select the role collection, and choose *Assign Role Collection*.
+
+ 4. To apply the role, go back to the Integration Suite home page.
+
+
+
+> ### Note:
+> Reselect your subaccount to access *Users* after assigning the role collection.
+
+For more information, see:
+
+- [Define a Role Collection](https://help.sap.com/viewer/65de2977205c403bbc107264b8eccf4b/Cloud/en-US/4b20383efab341f181becf0a947a5498.html)
+- [Add Roles to a Role Collection](https://help.sap.com/viewer/65de2977205c403bbc107264b8eccf4b/Cloud/en-US/e3130fb95aa64970b07d4dc65b24df1a.html)
+- [Assign Users to Role Collections](https://help.sap.com/viewer/65de2977205c403bbc107264b8eccf4b/Cloud/en-US/c5766765bda74ad59fe656977c8fa4d6.html)
+
diff --git a/docs/ISuite/50-Development/inject-mapping-artifacts-to-sap-cloud-integration-47ad97e.md b/docs/ISuite/50-Development/inject-mapping-artifacts-to-sap-cloud-integration-47ad97e.md
index 53044a40..c090e9a4 100644
--- a/docs/ISuite/50-Development/inject-mapping-artifacts-to-sap-cloud-integration-47ad97e.md
+++ b/docs/ISuite/50-Development/inject-mapping-artifacts-to-sap-cloud-integration-47ad97e.md
@@ -129,7 +129,7 @@ You need to maintain the SAP Cloud Integration tenant details into which you nee
>
> For information on creating OAuuth client credentials for Neo environment, see: [Creating OAuth Client Credentials for Neo Environment](https://help.sap.com/viewer/368c481cd6954bdfa5d0435479fd4eaf/Cloud/en-US/040d8110293d44b1bfaa75674530d395.html "The API is protected by basic authentication and OAuth.") :arrow_upper_right:
>
- > For information on creating OAuth client credentials for Cloud Foundry, see: [Creating OAuth Client Credentials for Cloud Foundry Environment](https://help.sap.com/viewer/368c481cd6954bdfa5d0435479fd4eaf/Cloud/en-US/50b63c69028643b18016d6795003392d.html "You can create OAuth client credentials to access your SAP Cloud Integration tenant hosted on the Cloud Foundry environment.") :arrow_upper_right:.
+ > For information on creating OAuth client credentials for Cloud Foundry, see: [Creating OAuth Client Credentials for Cloud Foundry Environment](creating-oauth-client-credentials-for-cloud-foundry-environment-50b63c6.md).
diff --git a/docs/ISuite/50-Development/inspect-data-store-usage-fcc08f6.md b/docs/ISuite/50-Development/inspect-data-store-usage-fcc08f6.md
index f6b8a299..c478f14c 100644
--- a/docs/ISuite/50-Development/inspect-data-store-usage-fcc08f6.md
+++ b/docs/ISuite/50-Development/inspect-data-store-usage-fcc08f6.md
@@ -23,7 +23,7 @@ The database usage is plotted in a bar graph against time.
> ### Note:
> The *Time* filter element allows you to select the time interval \(options: *Past Day*, *Past Week*, *Past Month*, or *Custom*\).
>
-> When you've selected the option *Custom* for the *Time* filter, you can select date and time with a graphical element with two components: a calendar element and a circular watch element. To select the date, interact with the calendar element and choose a specific day. To select the time, manipulate two separate circles on the watch element to set the desired hour ante meridiem \(am\) and post meridiem \(pm\), respectively. You can select valid dates only; selection of dates in the future is disabled.
+> When you've selected the option *Custom* for the *Time* filter, you can select date and time with a graphical element with two components. You can select valid dates only; selection of dates in the future is disabled.
>
> You can select dates up to 30 days in the past.
diff --git a/docs/ISuite/50-Development/inspect-database-connection-usage-567eb42.md b/docs/ISuite/50-Development/inspect-database-connection-usage-567eb42.md
index dc6fbcb3..8a3ba177 100644
--- a/docs/ISuite/50-Development/inspect-database-connection-usage-567eb42.md
+++ b/docs/ISuite/50-Development/inspect-database-connection-usage-567eb42.md
@@ -16,7 +16,7 @@ You can change the displayed time period be selecting a different option in the
> ### Note:
> The *Time* filter element allows you to select the time interval \(options: *Past Day*, *Past Week*, *Past Month*, or *Custom*\).
>
-> When you've selected the option *Custom* for the *Time* filter, you can select date and time with a graphical element with two components: a calendar element and a circular watch element. To select the date, interact with the calendar element and choose a specific day. To select the time, manipulate two separate circles on the watch element to set the desired hour ante meridiem \(am\) and post meridiem \(pm\), respectively. You can select valid dates only; selection of dates in the future is disabled.
+> When you've selected the option *Custom* for the *Time* filter, you can select date and time with a graphical element with two components. You can select valid dates only; selection of dates in the future is disabled.
>
> You can select dates up to 30 days in the past.
diff --git a/docs/ISuite/50-Development/inspect-database-transaction-usage-6736a37.md b/docs/ISuite/50-Development/inspect-database-transaction-usage-6736a37.md
index 89704b77..87581124 100644
--- a/docs/ISuite/50-Development/inspect-database-transaction-usage-6736a37.md
+++ b/docs/ISuite/50-Development/inspect-database-transaction-usage-6736a37.md
@@ -9,7 +9,7 @@ There are no hard limits for the number and duration of database transactions. H
> ### Note:
> The *Time* filter element allows you to select the time interval \(options: *Past Day*, *Past Week*, *Past Month*, or *Custom*\).
>
-> When you've selected the option *Custom* for the *Time* filter, you can select date and time with a graphical element with two components: a calendar element and a circular watch element. To select the date, interact with the calendar element and choose a specific day. To select the time, manipulate two separate circles on the watch element to set the desired hour ante meridiem \(am\) and post meridiem \(pm\), respectively. You can select valid dates only; selection of dates in the future is disabled.
+> When you've selected the option *Custom* for the *Time* filter, you can select date and time with a graphical element with two components. You can select valid dates only; selection of dates in the future is disabled.
>
> You can select dates up to 30 days in the past.
diff --git a/docs/ISuite/50-Development/inspect-monitoring-storage-usage-216dc43.md b/docs/ISuite/50-Development/inspect-monitoring-storage-usage-216dc43.md
index 517fc965..68383d58 100644
--- a/docs/ISuite/50-Development/inspect-monitoring-storage-usage-216dc43.md
+++ b/docs/ISuite/50-Development/inspect-monitoring-storage-usage-216dc43.md
@@ -9,7 +9,7 @@ At runtime, monitoring data is written to a database. For each integration flow
> ### Note:
> The *Time* filter element allows you to select the time interval \(options: *Past Day*, *Past Week*, *Past Month*, or *Custom*\).
>
-> When you've selected the option *Custom* for the *Time* filter, you can select date and time with a graphical element with two components: a calendar element and a circular watch element. To select the date, interact with the calendar element and choose a specific day. To select the time, manipulate two separate circles on the watch element to set the desired hour ante meridiem \(am\) and post meridiem \(pm\), respectively. You can select valid dates only; selection of dates in the future is disabled.
+> When you've selected the option *Custom* for the *Time* filter, you can select date and time with a graphical element with two components. You can select valid dates only; selection of dates in the future is disabled.
>
> You can select dates up to 30 days in the past.
diff --git a/docs/ISuite/50-Development/inspect-system-memory-usage-e9617dd.md b/docs/ISuite/50-Development/inspect-system-memory-usage-e9617dd.md
index 73e68aee..4b4e4334 100644
--- a/docs/ISuite/50-Development/inspect-system-memory-usage-e9617dd.md
+++ b/docs/ISuite/50-Development/inspect-system-memory-usage-e9617dd.md
@@ -20,7 +20,7 @@ Messages processed by integration flows at runtime consume system memory.
> ### Note:
> The *Time* filter element allows you to select the time interval \(options: *Past Day*, *Past Week*, *Past Month*, or *Custom*\).
>
-> When you've selected the option *Custom* for the *Time* filter, you can select date and time with a graphical element with two components: a calendar element and a circular watch element. To select the date, interact with the calendar element and choose a specific day. To select the time, manipulate two separate circles on the watch element to set the desired hour ante meridiem \(am\) and post meridiem \(pm\), respectively. You can select valid dates only; selection of dates in the future is disabled.
+> When you've selected the option *Custom* for the *Time* filter, you can select date and time with a graphical element with two components. You can select valid dates only; selection of dates in the future is disabled.
>
> You can select dates up to 30 days in the past.
diff --git a/docs/ISuite/50-Development/interchange-processing-flow-v2-cd26ea5.md b/docs/ISuite/50-Development/interchange-processing-flow-v2-cd26ea5.md
index 005b918b..8966c185 100644
--- a/docs/ISuite/50-Development/interchange-processing-flow-v2-cd26ea5.md
+++ b/docs/ISuite/50-Development/interchange-processing-flow-v2-cd26ea5.md
@@ -122,7 +122,11 @@ Follow the procedure below to configure the integration flow:
-
+ JMS-Receiver-Q
+
+ If you want to use dead letter queue to collect messages that failed after retries, select the drop-down button in this field and choose *Step2-DeadLetterQueue*.
+
+ To enable the dead letter queue for this integration flow, you need to make changes to the retry configuration. To know more, see [Configuration Manager](configuration-manager-7daf06c.md) .
|
@@ -156,7 +160,9 @@ Follow the procedure below to configure the integration flow:
|
- OUTBOUND\_Q
+ *OUTBOUND\_Q* is the standard value.
+
+ The value **COM\_PROCESSING\_OUTBOUND\_DEAD\_LETTER\_Q** is displayed if you chose dead letter queue for the *Receiver* field.
|
diff --git a/docs/ISuite/50-Development/json-threat-protection-c4991a6.md b/docs/ISuite/50-Development/json-threat-protection-c4991a6.md
index deb0f41d..eb20a210 100644
--- a/docs/ISuite/50-Development/json-threat-protection-c4991a6.md
+++ b/docs/ISuite/50-Development/json-threat-protection-c4991a6.md
@@ -130,3 +130,5 @@ Maximum size allowed for a JSON payload in KB. The maximum value is 10 MB.
[Authorization](authorization-6658409.md "This policy evaluates whether a user should be permitted to access a protected API.")
+[API Validation](api-validation-02ff41b.md "The API validation policy enables you to validate incoming request messages against an OpenAPI 3.0 Specification.")
+
diff --git a/docs/ISuite/50-Development/key-components-of-an-api-19c0654.md b/docs/ISuite/50-Development/key-components-of-an-api-19c0654.md
index ba9934e1..a23f09f7 100644
--- a/docs/ISuite/50-Development/key-components-of-an-api-19c0654.md
+++ b/docs/ISuite/50-Development/key-components-of-an-api-19c0654.md
@@ -111,5 +111,7 @@ Describes each API resource in a simple and concise manner.
[Different Methods of Creating an API Proxy](different-methods-of-creating-an-api-proxy-4ac0431.md "An API proxy is the data object that contains all the functionality to be executed when an external user wants to access the backend service.")
+[Edit an API Proxy](edit-an-api-proxy-a64b952.md "Once you’ve created an API proxy you can further change the proxy, either on the Integration Suite, or by using the embedded API designer.")
+
[Additional Configurations](additional-configurations-de7285c.md " ")
diff --git a/docs/ISuite/50-Development/manage-business-data-graphs-using-graph-configuration-api-655bf12.md b/docs/ISuite/50-Development/manage-business-data-graphs-using-graph-configuration-api-655bf12.md
new file mode 100644
index 00000000..f0093f49
--- /dev/null
+++ b/docs/ISuite/50-Development/manage-business-data-graphs-using-graph-configuration-api-655bf12.md
@@ -0,0 +1,11 @@
+
+
+# Manage Business Data Graphs using Graph Configuration API
+
+As a Graph Key User, you can create a new business data graph using the Graph Configuration API.
+
+The Graph Configuration API simplifies the process of managing your business data graphs automatically. Whether you need to create, update, or delete business data graphs, this API provides an automated option to achieve these tasks.
+
+> ### Note:
+> The Graph Configuration API is currently limited to managing business data graphs. Managing extensions is not supported. Its primary focus is to enable a seamless integration of business data graph management with your existing CI/CD pipelines.
+
diff --git a/docs/ISuite/50-Development/message-locks-bce9ae0.md b/docs/ISuite/50-Development/message-locks-bce9ae0.md
index e00b38b2..9281f6c5 100644
--- a/docs/ISuite/50-Development/message-locks-bce9ae0.md
+++ b/docs/ISuite/50-Development/message-locks-bce9ae0.md
@@ -13,7 +13,7 @@ This section allows you to display and manage lock entries that are created \(in
>
> To prevent double processing, a lock entry is written to the in-progress repository each time a file is processed by a runtime node. As long as this lock entry exists, no other component can access the file. After message processing, the lock is removed by the runtime.
-In certain situations \(for example, a runtime node crashes because of an out-of-memory error\), the message is retried after the node is restarted until the expiration time is reached. In this case, lock entries could remain in the in-progress repository and block subsequent message processing. You can't use the *Manage Locks* view to analyze the situation and manually delete lock entries, if necessary, to reprocess the message.
+In certain situations \(for example, a runtime node crashes because of an out-of-memory error\), the message is retried after the node is restarted until the expiration time is reached. In this case, lock entries could remain in the in-progress repository and block subsequent message processing. You can use the *Manage Locks* view to analyze the situation and manually delete lock entries, if necessary, to reprocess the message.
If you choose the *Message Locks* tile under *Manage Locks* tile in the *Monitor* application, a list of locks is displayed. Be aware that only the most recent 500 lock entries are displayed.
diff --git a/docs/ISuite/50-Development/metadata-c90a80c.md b/docs/ISuite/50-Development/metadata-c90a80c.md
new file mode 100644
index 00000000..ba74209b
--- /dev/null
+++ b/docs/ISuite/50-Development/metadata-c90a80c.md
@@ -0,0 +1,156 @@
+
+
+# Metadata
+
+Due to the OData protocol being self-documented, developers can ensure that their application is compatible with the specific business data graphs that they are accessing.
+
+This is possible by programmatically reviewing the detailed metadata available to them at runtime as follows:
+
+
+
+
+
+
+Metadata API
+
+ |
+
+
+URL to Use
+
+ |
+
+
+
+
+The list of business data graphs in the landscape
+
+ |
+
+
+`https://.a.integration.cloud.sap/graph/api`
+
+Example: `https:// is-demo-kjsbzgso-57c46d694dff43deabe46431e745b4ef.a.integration.cloud.sap/graph/api`
+
+ |
+
+
+
+
+The list of all services \(namespaces\)
+
+ |
+
+
+`https://.a.integration.cloud.sap/graph/api/`
+
+Example: `https://is-demo-kjsbzgso-57c46d694dff43deabe46431e745b4ef.a.integration.cloud.sap/graph/api/v1`
+
+ |
+
+
+
+
+The list of entities in a specific business data graph
+
+ |
+
+
+`https://.a.integration.cloud.sap/graph/api//`
+
+Example: `https://is-demo-kjsbzgso-57c46d694dff43deabe46431e745b4ef.a.integration.cloud.sap/graph/api/v1/sap.s4`
+
+ |
+
+
+
+
+The OData EDMX metadata of a service \(namespace\)
+
+ |
+
+
+`https://.a.integration.cloud.sap/graph/api///$metadata`
+
+Example: `https://is-demo-kjsbzgso-57c46d694dff43deabe46431e745b4ef.a.integration.cloud.sap/graph/api/v1/sap.s4/$metadata`
+
+ |
+
+
+
+
+
+
+
+
+Catalog API
+
+ |
+
+
+URL to use
+
+ |
+
+
+
+
+The list of business data graphs in the landscape
+
+ |
+
+
+`https://.a.integration.cloud.sap/graph/catalog`
+
+``
+
+Example:`https://is-demo-kjsbzgso-57c46d694dff43deabe46431e745b4ef.a.integration.cloud.sap/graph/catalog`
+
+ |
+
+
+
+
+The list of all services \(namespaces\)
+
+ |
+
+
+`https://.a.integration.cloud.sap/graph/catalog/`
+
+``
+
+Example: `https://is-demo-kjsbzgso-57c46d694dff43deabe46431e745b4ef.a.integration.cloud.sap/graph/catalog/v1`
+
+ |
+
+
+
+
+The list of entities in a specific business data graph
+
+ |
+
+
+`https://.a.integration.cloud.sap/graph/catalog//`
+
+Example: `https://is-demo-kjsbzgso-57c46d694dff43deabe46431e745b4ef.a.integration.cloud.sap/graph/catalog/v1/sap.s4`
+
+ |
+
+
+
+
+The OpenAPI metadata of one entity
+
+ |
+
+
+`https://.a.integration.cloud.sap/graph/catalog///`
+
+Example: `https://is-demo-kjsbzgso-57c46d694dff43deabe46431e745b4ef.a.integration.cloud.sap/graph/catalog/v1/sap.s4/A_BusinessPartner`
+
+ |
+
+
+
diff --git a/docs/ISuite/50-Development/migrate-templates-agreements-ad58414.md b/docs/ISuite/50-Development/migrate-templates-agreements-ad58414.md
new file mode 100644
index 00000000..b00b58de
--- /dev/null
+++ b/docs/ISuite/50-Development/migrate-templates-agreements-ad58414.md
@@ -0,0 +1,31 @@
+
+
+# Migrate Templates/Agreements
+
+Migrate a group of outdated agreements and templates.
+
+
+
+## Context
+
+If you want to update a group of agreements or templates together, follow the procedure below.
+
+
+
+## Procedure
+
+1. Login to your application.
+
+2. Navigate to *Design* \> *B2B Scenarios* from the left pane.
+
+3. Choose the *Cross Actions* tab and select *Migrate Agreements/Templates*.
+
+4. In the resulting dialog, enter a name for the action in the *Action Name* field.
+
+5. Provide a description for the action in the *Description* field.
+
+6. The section *Select Outdated Objects* display the list of agreements and templates that are outdated. The checkbox next to the number of agreements and templates are selected by default.
+
+7. Choose *Migrate*.
+
+
diff --git a/docs/ISuite/50-Development/mirrored-entities-720a1d8.md b/docs/ISuite/50-Development/mirrored-entities-720a1d8.md
new file mode 100644
index 00000000..d429636b
--- /dev/null
+++ b/docs/ISuite/50-Development/mirrored-entities-720a1d8.md
@@ -0,0 +1,86 @@
+
+
+# Mirrored Entities
+
+Developers familiar with existing SAP product data models can continue to consume the resources of these models with Graph. Rather than accessing them separately via different system APIs, they’re accessed from the business data graph, using the Graph API. The mirrored entities of supported SAP data sources are added to the data graph under a reserved SAP namespace. Entities from unsupported data sources are mirrored under custom namespaces.
+
+The following SAP system-specific namespaces are supported:
+
+
+
+
+
+
+Namespace
+
+ |
+
+
+Description
+
+ |
+
+
+
+
+`sap.s4`
+
+ |
+
+
+Mirrored entities from the data model of SAP S/4HANA.
+
+ |
+
+
+
+
+`sap.c4c`
+
+ |
+
+
+Mirrored entities from the data model of SAP Sales Cloud, which is part of SAP CX's suite of products.
+
+ |
+
+
+
+
+`sap.hcm`
+
+ |
+
+
+Mirrored entities from the data model of SAP Human Capital Management \(HCM, also known as SAP SuccessFactors\).
+
+ |
+
+
+
+When referencing a mirrored entity, the namespace is simply prepended. For example: `sap.s4/A_SalesOrder` references sales order information from an SAP S/4HANA data source, and `sap.hcm/PerPerson` references person information from an SAP SuccessFactors data source.
+
+![](../images/Mirrored_Entities_9bba72e.png)
+
+Developers can easily combine all these resources in one application, focusing on the data, without having to know where the specific data sources are located or how to connect to them.
+
+
+
+
+
+## Additional Connections
+
+In addition to consolidating the different system models, Graph introduces hundreds of additional connections between related entities in the business data graph, in the form of associations that are recognized by OData or GraphQL. A common example is the relation from an order item to an ordered product:
+
+![](../images/Additional_Connections_4f17ccb.png)
+
+The additional connections are usually named by prefixing an underscore to the name of an attribute of type `String`, which represents the reference value. In the illustrated example, the original attribute `Material` is a string that represents a foreign key, and `_Material` is a relation.
+
+Such relationships improve the semantic intent of the business data graph and lead to simpler, more intuitive, and more efficient navigational queries. For example, a developer could follow the illustrated relationships to access `sap.s4/A_SalesOrder(15)/to_Item(10)/_Material/Brand` in a single OData query, answering the question: *show the brand of the product ordered in item 10 of the sales order with key 15*.
+
+Similarly, the business data graph represents hierarchical entities as compositions, which clearly expose the structural boundaries of the model, simplifying the interaction and reducing developer errors. An example of a composition is a book with chapters – you need to access the book to read the chapters. In the diagram, the relationship between `A_SalesOrder` and `A_SalesOrderItem` is modeled as a composition via `to_Item`, ensuring that developers always access a sales order item by going through the root of the composition \(the root entity\).
+
+To complete the consolidation of the system models, Graph introduces hundreds of additional connections between related root entities in the business data graph, in the form of associations that are recognized by OData or GraphQL. A common example is the relationship from an order item to an ordered product.
+
+Using a more traditional API, this small example would have required at least three different round-trip API calls, plus the necessary expertise to develop the business logic to extract the keys to match the requirements of the different entity instances.
+
diff --git a/docs/ISuite/50-Development/model-31f8c54.md b/docs/ISuite/50-Development/model-31f8c54.md
new file mode 100644
index 00000000..b0f0b0d7
--- /dev/null
+++ b/docs/ISuite/50-Development/model-31f8c54.md
@@ -0,0 +1,24 @@
+
+
+# Model
+
+It is common knowledge that data-driven software should be modeled on its underlying business processes.
+
+Methodologies such as Domain-Driven Design are particularly relevant for complex data sets from diverse data sources. Data is arranged as related entities \(representing real-life business objects\) in data domains and connected through relationships \(called associations\) into logical data graphs. It is the ability to describe highly interconnected relationships that make data graphs the basis for modeling high-quality linked and coherent data that structurally represents business processes. In turn, graph-based APIs and protocols represent a growing trend in modern application development.
+
+![](images/Modeling_Intro_2b906e7.png)
+
+New business projects start with capturing the essential objects of a business domain in the form of a modeled data graph. The model serves both as the basis for persistence deployed as tables to databases and for the automatic service \(API\) definitions. [SAP Cloud Application Programming Model \(CAP\)](https://cap.cloud.sap/docs/guides/domain-models) and associated methodologies are an excellent starting point for the development of complex systems, "side-car" extensions, microservices, and other data sources.
+
+But not everything can be modeled from scratch. Companies already use a variety of existing, multivendor business solutions services, on premise and cloud, each with their own data model and APIs. Landscapes are often a diverse collection of loosely coupled applications, systems, microservices, and other data sources, with different and inconsistent dialects, data concepts, APIs, and protocols. Developers have a hard time dealing with this complex diversity. Enterprise IT must track the dependency of client applications on the different APIs, widening the challenge to maintain and manage the lifecycle of the incongruent data models and APIs.
+
+Traditional API management and API mediation solutions try to address some of these challenges, providing a developer portal and supporting relatively simple syntactic transformations, such as modifying HTTP headers, converting an XML payload to JSON, renaming APIs, or providing traffic management and abuse protection. But they do not address the more fundamental, semantic challenges faced by developers.
+
+Graph, as a capability of SAP Integration Suite and API Management, is a next generation, semantic API mediation solution.
+
+Out of the box, Graph provides a complete, semantic data graph spanning all major SAP systems, representing these systems as one single curated and connected data model, with a single API, a single authentication and access method, and a single protocol endpoint.
+
+This SAP data graph is the foundation of an even broader semantic data graph of a customer's entire business landscape. Graph offers customers the methods, practices, and tools to expand the out-of-box data graph with additional custom entities and compositions, which can be seamlessly connect to the data graph, and consumed by developers in the same way.
+
+Enterprises can use Graph to create and access their own, unique, enterprise data graph: a connected graph of all their business data.
+
diff --git a/docs/ISuite/50-Development/modeling-example-b8ab0c4.md b/docs/ISuite/50-Development/modeling-example-b8ab0c4.md
new file mode 100644
index 00000000..b51b4884
--- /dev/null
+++ b/docs/ISuite/50-Development/modeling-example-b8ab0c4.md
@@ -0,0 +1,117 @@
+
+
+# Modeling Example
+
+An example of a custom entity.
+
+Custom entities are designed as a projection on the attributes of one or more existing entities, achieving benefits of simplification and consistency. This example illustrates the following: A data model of a school, with subjects, teachers, and classrooms. The example model has one API with three entities, describing the syllabus of the school, with the concept of a class: a combination of a subject and a teacher, taking place in a classroom. A second API, developed as a separate sidecar microservice, provides location information about the different classrooms. Both APIs are implemented with an underlying database persistence:
+
+![](images/Modeling_Example_1_683b7f3.png)
+
+You can see how the two data sources are highly normalized, reflecting how the data is physically stored in two databases. But, while a highly normalized representation is usually the most efficient in storage, it's an inconvenient design for consumers of this data.
+
+Imagine, as an app developer, you're asked to develop an application that lists the locations, teacher, and subject names of all classes, or perhaps prints a schedule of all of the classes taught by Joan Miller. You would have to access two different APIs, each with a different authentication. Then, write a loop for each class to perform as many as four different cross-API queries, with different protocol dialects, in order to collect all the required information for your app.
+
+
+
+
+
+## Creating New Custom Entities
+
+Our goal is to simplify the model by creating two custom entities, based on the *mirrored data sources* under their custom namespace. Custom namespaces are established when configuring the business data graphs that reference these data sources:
+
+![](images/Modeling_Example_2_e3aad43.png)
+
+Even before we introduce custom entities, the inclusion of the data sources in the business data graph already allows the data to be accessed from one uniform API. For instance, to get a list of teachers called *Joan*, the following query could be called:
+
+```
+GET https://.a.integration.cloud.sap/graph/api/v1/school/teacher?$filter=startswith(name,'Joan')
+```
+
+As a data modeler or data architect, you want to redesign the model to make it much simpler for developers to query the data, and to avoid loops and multiple roundtrips. You can achieve this by *denormalizing* the class and classroom data \(`subject`, `teacher`, `location`\), and then by connecting the entities of the new model. You want to end up with a design that looks like this:
+
+![](images/Modeling_Example_3_213d452.png)
+
+The entity `my.new.Class` is now self-contained, and includes all of the information that is relevant to most queries. There are also links to and from `my.new.Teacher`, allowing developers to easily navigate the model. Creating a list of all classes or listing Joan's classes is now done easily using single queries.
+
+Setting up the new model requires the creation of two custom entities:
+
+
+
+### `Class`
+
+```
+1 {
+2 "label": "Class information",
+3 "entity": "my.new.class",
+4 "version": "1.0.0",
+5
+6 "sourceEntities": [
+7 { "name": "school.class" },
+8 { "name": "school.subject", "join": ["subjectID", "subjectID"] },
+9 { "name": "school.Room", "join": ["room", "RoomNR"] }
+10 ],
+11
+12 "attributes": [
+13 { "name": "id", "type": "String","key": true, "transform": "keyConcat", "source": ["subjectID", "teacher"] },
+14 { "name": "subject", "sourceEntity": "school.subject", "annotations": { "description": "what they teach" } },
+15 { "name": "teacher", "source": ["tname"], "sourceEntity": "school.teacher" },
+16 { "name": "location.room", "type": "String", "source": "RoomName", "sourceEntity": "school.Room" },
+17 { "name": "location.building", "source": ["Building"], "sourceEntity": "school.Room" },
+18 { "name": "location.floor", "type": "String", "source": ["Floor"], "sourceEntity": "school.Room" },
+19 { "name": "_teacher", "type": "Association", "associationTarget": "my.new.Teacher" },
+20 { "name": "_teacher.id", "source": ["teacher"] }
+21 ]
+22 }
+```
+
+
+
+### `Teacher`
+
+```
+23 {
+24 "label": "Teacher information",
+25 "entity": "my.new.Teacher",
+26 "version": "1.0.1", // patch level 1
+27 "annotations": { "description": "An example of how to create a nice-to-use model of a \"teacher\"" }
+28
+29 "sourceEntities": [
+30 { "name": "school.teacher" }
+31 ],
+32
+33 "attributes": [
+34 { "name": "id", "type": "String", "key": true, "source": ["teacherID"], "annotations": {"readonly": true} },
+35 { "name": "displayId", "type": "String", "source": "teacherID" },
+36 { "name": "name", "type": "String", "source": ["tname"] },
+37 { "name": "_classes[]", "type": "Assocation", "associatonTarget": "my.new.Class", "on": "_teacher" }
+38 ]
+39 }
+
+
+```
+
+There's a lot going on here. Let's start from the second custom entity, `Teacher`.
+
+Lines 23 and 39 enclose the custom projection object, whose full name is `my.new.Teacher`, the entity `Teacher` in the namespace `my.new` \(line 25\). By convention, entity names are singular and capitalized, while namespace names are all lower-case.
+
+Line 26 defines the version of this custom entity. By convention, the first version is `1.0.0`. Here, we've upgraded to the first patch, so the version is `1.0.1`.
+
+![](images/Modeling_Example_4_bd6d332.png)
+
+Lines 29–31 define the list of data sources that are used to define this new custom entity. Most custom entities are a projection on just one source entity. The source entity name is that of one of the mirrored entities. Here, the mirrored source entity is `school.teacher`, the teacher entity within the school namespace.
+
+Lines 34–37 define the four attributes of our new `Teacher`. The first and second attributes are common attributes, both based on the same source attribute, `teacherID`. Observe that the default `integer` type is overwritten with the `String` type. And since the same source attribute is used to populate two different attributes, the `id` is defined as `readonly`. The `id`, `displayID`, and `name` are of the type `String`, without a maximal length. This overrides the default of inheriting the type of the attribute in the source system \(Integer and String\(70\) respectively\).
+
+Pay special attention to line 37, where an association-to-many is defined, by listing the backlink, `_teacher in my.new.Class`.
+
+Now, to the `Class` entity. This entity is composed of attributes coming from three different source entities. The relationship between these source entities is described in lines 6–9.
+
+There are three data source entities, and `Class` is a composed projection, hiding the data sources from the consumer of the Graph API. The first and default source entity is `school.class`. Other source entities are defined in relation to its source attributes: `subjectID` and `room`, respectively.
+
+The `school.class` entity has a composite key, in which only the combination of its two key attributes creates a unique value. Line 13 shows the use of the `keyConcat` transform to turn these into a single key, called `id`. Observe how most of the other attributes \(lines 14–18\) use source attributes from the other source entities, and they have to declare the source entity explicitly, using the `sourceEntity` property.
+
+Line 14 is an example of an attribute whose name is the same as the source attribute \(subject\). It also shows how to provide a description for the attribute.
+
+Finally, line 19 shows an association-to-many, with a single key reference, on line 20.
+
diff --git a/docs/ISuite/50-Development/modeling-guide-5e0bb49.md b/docs/ISuite/50-Development/modeling-guide-5e0bb49.md
new file mode 100644
index 00000000..02830b8e
--- /dev/null
+++ b/docs/ISuite/50-Development/modeling-guide-5e0bb49.md
@@ -0,0 +1,178 @@
+
+
+# Modeling Guide
+
+SAP employs a set of best-practice modeling guidelines, known as the SAP One Domain Model guidelines. These guidelines are for the data models of new SAP applications, and are used in this guide as recommendations for creating custom entities.
+
+
+
+
+
+## Modeling Principles and Design Guidelines
+
+
+
+
+
+## Elements of a Model
+
+
+
+### Terminology
+
+
+
+
+
+
+Term
+
+ |
+
+
+Definition
+
+ |
+
+
+
+
+Entity
+
+ |
+
+
+The structural design of the entity, the entity type.
+
+It also refers to the data values, the entity instances.
+
+ |
+
+
+
+
+Attribute
+
+ |
+
+
+The design of the attribute or the value of a specific attribute instance.
+
+ |
+
+
+
+A data model consists of connected entities, which represent the business objects of the real world.
+
+The detailed properties \(fields\) of an entity are called *attributes*. Entity instances must be uniquely addressable, via the use of key attributes. As a best practice, new custom entities only have one key attribute. Existing \(mirrored\) entities may have a composite key, consisting of several separate attributes.
+
+Structurally, most attributes are simple \(primitive\) types, but can also be:
+
+- A nested array of primitive types
+
+- A structured type or a nested array of a structured type
+
+
+A nested array of structured type is called a *Composition* \(a composition of many\) if the items can be uniquely identified within the array via the use of key attributes. Compositions represent a relationship of whole parts. They are composed of one root-entity and one or more subentities. The top-level entity containing a composition is the root-entity, and contained entity-arrays are called *subentities* or *component entities*. For example, a `Book` entity has a title \(a primitive attribute of type `String`\) and chapters, a nested subentity with its own title, description, page count, and so forth. Subentities can have further nested subentity compositions.
+
+Semantically related attributes can be grouped together under a single name. For example, a book's ISBN and CIP codes are part of `publisher` data. This grouping is called *structured type*, rather than a *composition of one*.
+
+The structure of an entity is easily represented as a pseudo JSON structure, for example:
+
+![](images/Elements_of_Modeling_4eb2b4b.png)
+
+
+
+
+
+
+Entity Type Structure
+
+ |
+
+
+Entity Instance
+
+ |
+
+
+
+
+```
+Book: {
+ key id: String,
+ title: String,
+ publisher: { // structured type
+ ISDN: String,
+ CIP: String
+ }
+ chapters: [ // Composition
+ {
+ key id: String,
+ title: String,
+ pageCount: Integer
+ }
+ ]
+}
+
+```
+
+
+
+ |
+
+
+```
+Book:
+{
+ id: "5",
+ title: "Harry Potter",
+ publisher: {
+ ISDN: "123abc",
+ CIP: "aGh2"
+ }
+ chapters: [
+ { id: "01", title: "chapter 1", pageCount: 12 }
+ { id: "02", title: "chapter 2", pageCount: 14 }
+ ]
+}
+
+```
+
+
+
+ |
+
+
+
+Entities are connected to each other through attributes known as *Associations*. An association is a reference to another entity, known as the target of the association. Unlike compositions, associations always target another independent entity. There are two types of associations:
+
+- Association to one: a link to one specific target entity instance
+
+- Association to many: a link to an array \(zero or more\) of target entities
+
+
+Developers use associations to naturally navigate the data graph.
+
+
+
+
+
+## Custom Entities
+
+Custom entities are designed as a projection on the attributes of one or more existing entities. The following example describes a database model of a school, with subjects, teachers, and classrooms. The example model has one API with three entities, describing the syllabus of the school, with the concept of a class: a combination of subject and teacher, taking place in a classroom. A second API, that is developed as a separate sidecar microservice, provides location information about the different classrooms. Both APIs are implemented with an underlying data persistence:
+
+![](images/Modeling_Example_1_683b7f3.png)
+
+You can see how the two data sources are highly normalized, reflecting how the data is physically stored in two databases. But, while a highly normalized representation is usually the most efficient in storage, it's a deeply inconvenient design for consumers of this data.
+
+Imagine that, as an app developer, you're asked to develop an application that provides a list of the locations, teacher, and subject names of all classes, or, perhaps, print a schedule of all classes taught by Joan Miller. You would have to access two different APIs, each with a different authentication, and then write a loop for each class to perform as many as four different cross-API queries \(with different protocol dialects\), in order to collect all the required information into your app.
+
+While this example looks simplistic, it is representative of many bottom-up designed REST APIs.
+
+As data modelers or data architects, you want to redesign the model to make it easier for developers to query the data, and to avoid loops and multiple round trips. You can achieve this by denormalizing the class and classroom data \(subject, teacher, location\), and then by connecting the entities of the new model. You might end up with an easier design that looks more like the following:
+
+![](images/Modeling_Example_3_213d452.png)
+
+The `my.new.Class` entity is now self-contained and includes all information that is relevant to most queries. Using the links to and from the `my.new.Teacher` entity, developers can easily navigate this simple model. Creating a list of all of the classes or listing Joan Miller's classes are now easy, single-step queries.
+
diff --git a/docs/ISuite/50-Development/modeling-reference-8790d64.md b/docs/ISuite/50-Development/modeling-reference-8790d64.md
new file mode 100644
index 00000000..fe17bcbd
--- /dev/null
+++ b/docs/ISuite/50-Development/modeling-reference-8790d64.md
@@ -0,0 +1,6 @@
+
+
+# Modeling Reference
+
+This reference provides information that data modelers need to create a model for their applications.
+
diff --git a/docs/ISuite/50-Development/modify-your-business-data-graph-0084c4d.md b/docs/ISuite/50-Development/modify-your-business-data-graph-0084c4d.md
new file mode 100644
index 00000000..a75977ed
--- /dev/null
+++ b/docs/ISuite/50-Development/modify-your-business-data-graph-0084c4d.md
@@ -0,0 +1,30 @@
+
+
+# Modify Your Business Data Graph
+
+When you edit your business data graph configuration, it overwrites the existing configuration.
+
+
+
+
+
+## Procedure
+
+1. Go to Integration Suite, *Design* \> *Graph* \> *Business Data Graphs*.
+
+2. Select the business data graph you want to modify and choose *Edit*.
+
+3. After you have modified the business data graph, choose *Apply Changes* to update the configuration file assigned to your business data graph.
+
+
+
+
+
+
+## Results
+
+After applying your changes, the business data graph will be reprocessed. Choose *Show Logs* to check that the status of your business data graph is set from *Updating* to *Available* after successful reprocessing.
+
+> ### Note:
+> If an error occurs, the log shows the status *Available \(Update failed\)*. This status indicates that your new changes are not applied, and Graph kept your previous business data graph configuration.
+
diff --git a/docs/ISuite/50-Development/monitor-650995c.md b/docs/ISuite/50-Development/monitor-650995c.md
index 0b4f84b7..f0988dcf 100644
--- a/docs/ISuite/50-Development/monitor-650995c.md
+++ b/docs/ISuite/50-Development/monitor-650995c.md
@@ -6,8 +6,6 @@ Analyze the usage and performance of the artifacts available on the SAP Integrat
The following tabs are available for each capability:
-****
-
@@ -23,7 +21,7 @@ Tab
-Document Link
+Help Link
|
@@ -35,7 +33,7 @@ Cloud Integration
-Integrations
+*Monitor* \> *Integrations and APIs*
|
@@ -52,12 +50,29 @@ API Management
|
-APIs
+*Monitor* \> *Integrations and APIs*
+
+ |
+
+
+[Monitor APIs](monitor-apis-399b6c6.md)
+
+ |
+
+
+
+
+Event Mesh
+
+ |
+
+
+*Monitor* \> *Event Mesh*
|
-[Analyze APIs](analyze-apis-7712c61.md)
+[Monitor Event Mesh](monitor-event-mesh-d975934.md)
|
@@ -69,7 +84,7 @@ Trading Partner Management
-B2B Messages
+*Monitor* \> *B2B Scenarios*
|
diff --git a/docs/ISuite/50-Development/monitor-event-mesh-d975934.md b/docs/ISuite/50-Development/monitor-event-mesh-d975934.md
index 41dfea82..2eca8b56 100644
--- a/docs/ISuite/50-Development/monitor-event-mesh-d975934.md
+++ b/docs/ISuite/50-Development/monitor-event-mesh-d975934.md
@@ -2,3 +2,23 @@
# Monitor Event Mesh
+Observe the usage of Event Mesh resources.
+
+The monitoring page gives an overview of the Event Mesh resources like spool size, queues, connection, and consumers. You also see the number of messages that are handled by the broker.
+
+Navigate to *Monitor* \> *Event Mesh*.
+
+
+
+
+
+### Message Rate
+
+The chart show the number of messages that were handled by the message broker over a period of time. Published messages \(ingress\) and consumed messages \(egress\) are differentiated using different colours. You can change the time of measure to understand the volume of messages handled by the message broker.
+
+
+
+### Resource Usage
+
+Observe the usage of the resources like spool size, queues, connection, and consumers with the help of easy-to-use cards.
+
diff --git a/docs/ISuite/50-Development/mutations-499950b.md b/docs/ISuite/50-Development/mutations-499950b.md
new file mode 100644
index 00000000..f1854dd9
--- /dev/null
+++ b/docs/ISuite/50-Development/mutations-499950b.md
@@ -0,0 +1,146 @@
+
+
+# Mutations
+
+While queries focus on reading data from the API, mutations allow data to be modified by creating, updating, or deleting it.
+
+The schema for mutations looks like this:
+
+```
+mutation {
+ {
+ {
+ create (
+ input: {
+
+ ...
+ }
+ ) {
+
+ ...
+ }
+
+ delete (
+ filter: [
+ {
+ : {
+ : []
+ }
+ },
+ ...
+ ]
+ )
+
+ update (
+ input: {
+
+ ...
+ },
+ filter: [
+ {
+ : {
+ : []
+ }
+ },
+ ...
+ ]
+ ) {
+
+ ...
+ }
+ }
+ }
+}
+```
+
+`Create` mutations specify the entity body as the input argument of the create field. Additionally, the fields that are queried from the created entity are specified in the body of the create field.
+
+`Delete` mutations specify a filter for selecting the entities to be deleted. All entities matching the specified filters are deleted. It returns the count of deleted entities.
+
+`Update` mutations specify the entity body to be updated as the input argument of the update field. Additionally, the filter field specifies one or more multiple filter expressions to select the entities to be updated. Finally, the fields that are queried from the updated entities are specified in the body of the update field.
+
+
+
+
+
+## Examples
+
+
+
+### Example 1
+
+Create `A_Product` in the `sap.s4` namespace.
+
+```
+mutation {
+ sap_s4 {
+ A_Product {
+ create (
+ input: {
+ Brand: "...",
+ CountryOfOrigin: "...",
+ ...
+ }
+ ) {
+ Product
+ Brand
+ CountryOfOrigin
+ ...
+ }
+ }
+ }
+}
+```
+
+
+
+### Example 2
+
+Delete `A_Product` entities filtering on the `Product` field to be equal to `1` in the `sap.s4` namespace.
+
+```
+mutation {
+ sap_s4 {
+ A_Product {
+ delete (
+ filter: [
+ {
+ Product: { eq: "1" }
+ }
+ ]
+ )
+ }
+ }
+}
+```
+
+
+
+### Example 3
+
+Update `A_Product` entities on the `Brand` and `CountryOfOrigin` fields filtering on the `Product` field to start with 10 and querying the `Product`, `Brand`, and `CountryOfOrigin` fields.
+
+```
+mutation {
+ sap_s4 {
+ A_Product {
+ update (
+ input: {
+ Brand: "...",
+ CountryOfOrigin: "..."
+ },
+ filter: [
+ {
+ Product: { startswith: "10" }
+ }
+ ]
+ ) {
+ Product
+ Brand
+ CountryOfOrigin
+ }
+ }
+ }
+}
+```
+
diff --git a/docs/ISuite/50-Development/navigation-b4378a0.md b/docs/ISuite/50-Development/navigation-b4378a0.md
new file mode 100644
index 00000000..4a322187
--- /dev/null
+++ b/docs/ISuite/50-Development/navigation-b4378a0.md
@@ -0,0 +1,83 @@
+
+
+# Navigation
+
+Unlike the data models found in SAP's business systems, the data model of Graph is highly interconnected. This ensures that developers develop highly efficient code for navigating across the systems, without being concerned about where the data originated.
+
+Graph reference attributes enable navigation through SAP-managed data. For example, a sales order contains references to the customer, and to the products ordered. A purchase order includes references to the requisition owner and organization, to materials ordered, recommended vendors, includes and more.
+
+The following describes the metadata of a `SalesOrder`:
+
+```json
+{
+ id: key string(70)
+ displayId: string(10)
+ orderType: string(4)
+ soldToParty: string(10)
+ _soldToParty: sap.graph/Customer
+ paymentTerms: string(4)
+ items: array
+}
+```
+
+A `SalesOrder` has a key, called `id`, and a variety of attributes. Note the `_soldToParty` attribute. This is a reference, or association to a `Customer`. It's used to navigate across the business data graph, for example, obtain the name of the customer for this `SalesOrder` in a single efficient request.
+
+```json
+GET https://.a.integration.cloud.sap/graph/api/v1/SalesOrder/14/_soldToParty/name
+```
+
+Without these navigation attributes, this would have required two OData calls, plus some logic to extract the value of `_soldToParty` from the first response and interpret it as a key in the second call.
+
+
+
+
+
+## Cross-system Navigation
+
+Enterprises commonly have the same data in more than one data source. They're referred to as *multi-source entities*. They can occur for a number of reasons:
+
+- Overlapping data models \(for example, multiple data sources have product catalogs or concepts of person\).
+
+- Intentional replication from one system to another, to optimize and simplify local access and references.
+
+- Partitioning of the same type of data over multiple systems \(of the same type\) based on data-specific criteria.
+
+- Traversal of data from one system to another because of lifetime workflows.
+
+
+Within a single data source, such references are local references: they refer to unique identifiers \(keys\) of the referenced objects. However, navigating across systems, there's the problem that the same data object has one local key in one system and another in a second system. A reference is to a local or external key.
+
+As a developer, you use Graph to navigate and access SAP-managed data, regardless of where this data resides. Graph accesses the data on your behalf, so you don't have to deal with these complexities.
+
+Graph must solve the following data-locating challenges on behalf of client applications:
+
+1. Which data source can provide the data that the application wants to access? If the data is in more than one data source, which one is accessed?
+
+2. Is the reference to the data applicable for a cross-system reference?
+
+
+These problems are particularly challenging, because Graph makes no assumptions about:
+
+- The customer's landscape
+
+- How keys are allocated or defined, uniquely, immutable or not.
+
+- How data is replicated or distributed, consistently or not.
+
+
+Graph is configured with a locating policy, and makes references to globally unique entities by adding a source-specific prefix to local key references. For example, the key `14` of an entity in a certain data source, and all its references, appear as `s4hq~14`. In most cases, this is opaque to client application developers.
+
+
+
+### Cues
+
+Locating data under such conditions isn't always a simple decision: client apps sometimes need the data from one system, and sometimes from another, based on application-specific considerations.
+
+*Cues* are used to overwrite the default data source in the landscape, by adding them as OData query options. A common use case is when the same type of data, for example sales orders, is managed in two different systems, because different sales territories: European sales in oneSAP S/4HANA instance, and North American sales in another. To address this, the key user who configured the landscape policy, may have added a differentiating cue to the appropriate rules for locating sales data, allowing applications to issue a request like:
+
+```json
+GET https://.a.integration.cloud.sap/graph/api/v1/SalesOrder/14/items?cue=NA
+```
+
+This request overrides the default of European sales. The use of cues, a type of landscape-specific convention, must of course be communicated to the developers of client applications. Technically, a cue is just an alphanumeric string, or in the form of string=string \(alphanumeric\). Only a single cue can be provided for any query. This cue only applies to the root entity of the query.
+
diff --git a/docs/ISuite/50-Development/netsuite-receiver-adapter-618127a.md b/docs/ISuite/50-Development/netsuite-receiver-adapter-618127a.md
new file mode 100644
index 00000000..2a64c08c
--- /dev/null
+++ b/docs/ISuite/50-Development/netsuite-receiver-adapter-618127a.md
@@ -0,0 +1,419 @@
+
+
+# NetSuite Receiver Adapter
+
+The NetSuite receiver adapter connects SAP Integration Suite to NetSuite.
+
+> ### Note:
+> This adapter is available on SAP Business Accelerator Hub.
+>
+> For more information, see [Consuming Integration Adapters from SAP Business Accelerator Hub](consuming-integration-adapters-from-sap-business-accelerator-hub-b9250fb.md).
+>
+> The availability of the adapter is dependent on your SAP Integration Suite service plan. For more information about different service plans and their supported feature set, see SAP Notes [2903776](https://launchpad.support.sap.com/#/notes/2903776) and [3188446](https://launchpad.support.sap.com/#/notes/3188446).
+
+> ### Note:
+> This adapter exchanges data with a remote component that might be outside the scope of SAP. Make sure that the data exchange complies with your company’s policies.
+
+NetSuite is an integrated cloud business software suite, including business accounting, ERP, CRM, and e-commerce software. The NetSuite receiver adapter helps you exchange data between the two systems.
+
+
+
+
+
+## How the NetSuite Receiver Adapter Works
+
+If you have configured a NetSuite receiver adapter, the data exchange is performed as follows at runtime: SAP sends the request to NetSuite \(this is a receiver system\) through SAP Integration Suite. NetSuite works on the request and sends back the data to SAP.
+
+For Example, SAP S4/HANA generates and pushes the list of Business Partners to be copied to NetSuite. SAP Integration Suite receives the request and transforms it to the required NetSuite format. SAP Integration Suite then queries the existing Customers in NetSuite, updates data for existing customers, or creates a new entry for non-existent customers.
+
+![](images/NetSuite_Adapter_0cae5fe.png)
+
+
+
+
+
+## Configuring the NetSuite Receiver Adapter
+
+Once you have created a receiver channel and selected the NetSuite receiver adapter, you can configure the attributes in the *Connection* and *Processing* tabs.
+
+Select the *Connection* tab.
+
+The *Connection* tab contains the connection and the authentication parameters for connecting to NetSuite. The adapter employs a based Authentication \(TBA\) mechanism.
+
+**Connection**
+
+
+
+
+
+
+Parameter
+
+ |
+
+
+Description
+
+ |
+
+
+
+
+*Address*
+
+ |
+
+
+Specify the address of the NetSuite tenant to be used for the connection. This address typically includes your NetSuite Account ID. NetSuite URLs often follow the pattern: `https://.suitetalk.api.netsuite.com`.
+
+Example: `https://12345-sb1.suitetalk.api.netsuite.com`
+
+ |
+
+
+
+
+*Account ID*
+
+ |
+
+
+Specify the Account ID to be used for the connection.
+
+Example: `1112711_SB1`
+
+ |
+
+
+
+
+*Authentication*
+
+ |
+
+
+Select the Authentication Mechanism. Currently, only the Token-Based Authentication \(TBA\) is supported.
+
+ |
+
+
+
+
+*Consumer Credentials Alias*
+
+ |
+
+
+Specify the name of the *User Credentials* artifact \(to be deployed in the *Monitor* \> *Integrations and APIs* section under *Security Material*\). The *User Credentials* artifact includes both Consumer Key \(as username\) and Consumer Secret \(as password\).
+
+ |
+
+
+
+
+*Token Credentials Alias*
+
+ |
+
+
+Specify the name of the *User Credentials* artifact \(to be deployed in the *Monitor* \> *Integrations and APIs* section under *Security Material*\). The *User Credentials* artifact includes both Token ID \(as username\) and Token Secret \(as password\).
+
+ |
+
+
+
+
+*Timeout \(in ms\)*
+
+ |
+
+
+Specify the response timeout in milliseconds. This timeout allows you to configure the maximum waiting time for SAP until a response is received from NetSuite.
+
+Example: `6000`
+
+ |
+
+
+
+Select the *Processing* tab.
+
+The *Processing* tab contains all operational-related configurations for the NetSuite adapter.
+
+**Processing**
+
+
+
+
+
+
+Parameter
+
+ |
+
+
+Description
+
+ |
+
+
+
+
+*Version*
+
+ |
+
+
+Specify the version of the API to be used for this interaction with NetSuite.
+
+ |
+
+
+
+
+*Operation*
+
+ |
+
+
+To access and exchange data with NetSuite, you can choose one of the available operations to specify the type of action you want to run in NetSuite.
+
+ |
+
+
+
+
+*Record*
+
+ |
+
+
+Specify the NetSuite Object/Entity on which to perform the selected operation. It can be any of the NetSuite-defined records like Accounting records, Employee records, or any Custom records. This is an editable dropdown field; the user can manually add any other records that are not listed in the dropdown.
+
+> ### Note:
+> Since the dropdown is editable, ensure you do not leave the operation field blank.
+
+
+
+ |
+
+
+
+
+*Handle Multiple Record Types*
+
+ |
+
+
+Enable if the request intends to perform a list operation on multiple record types in a single call. For example: In addList operation, you can add both `Contact` and `Customer` records within a single request.
+
+ |
+
+
+
+
+*Create Request From Properties*
+
+ |
+
+
+Enable this property to create the body from the properties.
+
+ |
+
+
+
+
+*Id Type*
+
+ |
+
+
+Select the desired ID type of the record from the dropdown.
+
+Example: *InternalID*
+
+ |
+
+
+
+
+*Id Value*
+
+ |
+
+
+Specify the required ID value of the record.
+
+Example: `1091144`
+
+ |
+
+
+
+
+*Treat Functional Error as Exception*
+
+ |
+
+
+Enable to treat a functional error returned by NetSuite as an exception.
+
+ |
+
+
+
+
+*Enable Request Level Preferences*
+
+ |
+
+
+Enable to specify various request-Level preferences \(additional parameters below\).
+
+ |
+
+
+
+
+*Disable Mandatory CustomField Validation*
+
+\(Only available if parameter *Enable Request Level Preferences* is selected\)
+
+ |
+
+
+Enable to change the handling of custom fields that are configured in the UI to be mandatory. When enabled, these fields won't be required during SOAP web services requests. If the property is disabled, it will be mandatory.
+
+ |
+
+
+
+
+*Disable System Notes For CustomFields*
+
+\(Only available if parameter *Enable Request Level Preferences* is selected\)
+
+ |
+
+
+Enable to prevent the creation of system notes for modifications to custom fields. System notes are automatically generated entries that track changes to a record, including changes to specific field values. Depending on your integration, utilizing this preference could enhance performance.
+
+ |
+
+
+
+
+*Ignore ReadOnly Fields*
+
+\(Only available if parameter *Enable Request Level Preferences* is selected\)
+
+ |
+
+
+Enable to modify the system's behavior if you mistakenly send a value for a read-only field in your request. If this property is selected, the system ignores these read-only in your request payload.
+
+ |
+
+
+
+
+*Warning As Error*
+
+\(Only available if parameter *Enable Request Level Preferences* is selected\)
+
+ |
+
+
+Enable to process all NetSuite warning messages as errors. This parameter changes the handling of custom fields that are configured on the user interface to be mandatory. When enabled, these fields won't be required in requests. If the property is disabled, it will be mandatory. If disabled and the required fields aren't provided, the system returns a `USER_ERROR`, prompting for the missing field value.
+
+ |
+
+
+
+
+*Body Fields Only*
+
+\(Only available if parameter *Enable Request Level Preferences* is selected\)
+
+ |
+
+
+Enable to determine if sublist values should be included in search results. When enabled, only body fields are returned. If disabled, sublist values are also included. Selecting this property can significantly improve performance.
+
+ |
+
+
+
+
+*Page Size*
+
+\(Only available if parameter *Enable Request Level Preferences* is selected\)
+
+ |
+
+
+Specify the number of records to be returned on a single page for the Search operation.
+
+Example: When you set a value for page size, the following limits apply: for Synchronous operations, a minimum of 5 and a maximum of 1000, and for Asynchronous operations, a minimum of 5 and a maximum of *2000*.
+
+ |
+
+
+
+
+*Return Search Columns*
+
+\(Only available if parameter *Enable Request Level Preferences* is selected\)
+
+ |
+
+
+Enable to return full records, as opposed to columns. The default value for the preference is true. If this property is enabled, it is also required to specify search return columns, otherwise, the system returns an error.
+
+ |
+
+
+
+
+*Run Server SuiteScript And Workflow Triggers*
+
+\(Only available if parameter *Enable Request Level Preferences* is selected\)
+
+ |
+
+
+Enable to control SuiteScript and trigger workflows per request. If not selected, the company preference set on the SOAP Web Services Preferences page is used. If selected, it overrides the company preference set in the UI.
+
+ |
+
+
+
+
+*Request Headers*
+
+\(Only available if parameter *Enable Request Level Preferences* is selected\)
+
+ |
+
+
+Enter a list of custom headers, separated by a pipe `|`, to send to the target system. By default, no custom headers are sent. Use an asterisk `*` to send all custom headers to the target system. Alternatively, you can dynamically pass on the values by defining a property that includes a list of headers.
+
+ |
+
+
+
+
+*Response Headers*
+
+\(Only available if parameter *Enable Request Level Preferences* is selected\)
+
+ |
+
+
+Enter a list of headers coming from the target system's response, separated by a pipe `|`, to be received in the message. Use an asterisk `*` to receive all the headers from the target system, which is also the default value.
+
+ |
+
+
+
diff --git a/docs/ISuite/50-Development/odata-37e592e.md b/docs/ISuite/50-Development/odata-37e592e.md
new file mode 100644
index 00000000..9ef8124e
--- /dev/null
+++ b/docs/ISuite/50-Development/odata-37e592e.md
@@ -0,0 +1,762 @@
+
+
+# OData
+
+The Graph API follows the OData protocol; all payloads are JSON documents.
+
+OData \(Open Data Protocol\) is an ISO/IEC-approved standard that defines a set of best practices for building and consuming RESTful APIs. OData helps you focus on your business logic while building RESTful APIs without having to worry about the various approaches to define request and response headers, status codes, HTTP methods, URL conventions, media types, payload formats, query options, and so forth. OData also provides guidance for tracking changes, defining functions/actions for reusable procedures, and sending asynchronous/batch requests.
+
+OData RESTful APIs are easy to consume. What follows is a short introduction; see also our multipart tutorial series for an introduction to the Graph data protocol, and the reference material at [https://www.odata.org/](https://www.odata.org/).
+
+
+
+## OData Resources
+
+In OData, every request refers to a *resource*. A resource can be an entity, such as a sales order, a customer, or a bank account, or a subset of its attributes. For example, `GET https://is-demo-kjsbzgso-57c46d694dff43deabe46431e745b4ef.a.integration.cloud.sap/graph/api/v2/sap.graph/Product` returns the entire list of `Product` entities.
+
+In many cases, you don't require a list, but a specific instance of an entity, for example the `Product` with the key \(identifier\) of 345, which can be accomplished by:
+
+`GET https://is-demo-kjsbzgso-57c46d694dff43deabe46431e745b4ef.a.integration.cloud.sap/graph/api/v2/sap.graph/Product/345`
+
+or
+
+`GET https://is-demo-kjsbzgso-57c46d694dff43deabe46431e745b4ef.a.integration.cloud.sap/graph/api/v2/sap.graph/Product('345')`
+
+Both requests are the same, and they retrieve the matching instance only. And `GET https://is-demo-kjsbzgso-57c46d694dff43deabe46431e745b4ef.a.integration.cloud.sap/graph/api/v2/sap.graph/Product/345/displayId` returns the single `displayId` attribute.
+
+Using navigations, you can view additional connected resources or their attributes. For example, `GET https://is-demo-kjsbzgso-57c46d694dff43deabe46431e745b4ef.a.integration.cloud.sap/graph/api/v2/sap.graph/Product('345')/_division` results in the `Division` entity relevant to this `Product` entity instance.
+
+
+
+
+
+## Query Parameters
+
+Where OData becomes interesting is through its usage of query parameters. The following is a brief introduction to the topic.
+
+
+
+### Filtering: $filter
+
+Graph API filtering follows the[OData filtering specifications](https://docs.oasis-open.org/odata/odata/v4.01/csprd06/part1-protocol/odata-v4.01-csprd06-part1-protocol.html#_Toc21423805). The initial step in retrieving data is to perform a `GET` request to a collection of resources, which can be a list of customers, a list of customer orders, or a list of customer quotes. In many cases, these lists can have extensive amounts of data, and filtering them means that you can get only the data that matches certain criteria.
+
+To filter the result set of a query, the `$filter` URL parameter needs to be added with the filter string. Within this filter string, operators are used to construct the conditions. Depending on the entity type, there are specific fields and operators that can be used for filtering.
+
+> ### Note:
+> This query parameter is only supported for top-level properties and not for a property of a contained \(nested\) entity.
+
+For example, if the result set should only contain customer orders with a net amount below the value of 30,000 \(netAmount < 30000\), the following filter needs to be applied:
+
+`netAmount lt 30000`
+
+
+
+### Supported Comparison Operators
+
+Graph supports the following comparison operators:
+
+
+
+
+
+
+Operator
+
+ |
+
+
+Sign
+
+ |
+
+
+`$filter` Operator
+
+ |
+
+
+
+
+Equals
+
+ |
+
+
+=
+
+ |
+
+
+`eq`
+
+ |
+
+
+
+
+Not equals
+
+ |
+
+
+!=
+
+ |
+
+
+`ne`
+
+ |
+
+
+
+
+Greater than
+
+ |
+
+
+\>
+
+ |
+
+
+`g`t
+
+ |
+
+
+
+
+Greater than or equals
+
+ |
+
+
+\>=
+
+ |
+
+
+`ge`
+
+ |
+
+
+
+
+Less than
+
+ |
+
+
+<
+
+ |
+
+
+`lt`
+
+ |
+
+
+
+
+Less than or equals
+
+ |
+
+
+<=
+
+ |
+
+
+`le`
+
+ |
+
+
+
+Example:
+
+```json
+GET https://is-demo-kjsbzgso-57c46d694dff43deabe46431e745b4ef.a.integration.cloud.sap/graph/api/v1/sap.graph/SalesQuote?$filter=netAmount le 8400
+```
+
+This example filters for customer quotes that have a `netAmount` less than or equal to 8400.
+
+
+
+### Using Logical Operators
+
+Multiple statements can be combined into a larger filter condition, by applying one of the following logical operators:
+
+
+
+
+
+
+Logical Operator
+
+ |
+
+
+`$filter` Operator
+
+ |
+
+
+
+
+AND \(both need to be true\)
+
+ |
+
+
+`and`
+
+ |
+
+
+
+
+OR \(at least one needs to be true\)
+
+ |
+
+
+`or`
+
+ |
+
+
+
+
+NOT \(negate the following statement\)
+
+ |
+
+
+`not`
+
+ |
+
+
+
+Example:
+
+```json
+GET https://is-demo-kjsbzgso-57c46d694dff43deabe46431e745b4ef.a.integration.cloud.sap/graph/api/v1/sap.graph/SalesOrder?$filter=netAmount lt 15000 and orderDate lt 2017-01-01
+```
+
+> ### Note:
+> String values need to be escaped with single quotes.
+
+Find more information about the logical operators in the official OData documentation [here](https://docs.oasis-open.org/odata/odata/v4.01/csprd06/part1-protocol/odata-v4.01-csprd06-part1-protocol.html#_Toc21423805).
+
+
+
+### Projection of Results: `$select`
+
+You can tell the Graph API to return only a subset of properties you need.
+
+The projection of results is a standard OData query modifier and selected properties are specified via the `$select` query parameter.
+
+To select only the properties that you need, use the `$select` query parameter in combination with one or more top-level properties of an entity.
+
+> ### Note:
+> This query parameter is only supported for top-level properties and not for nested properties.
+
+Example:
+
+To return only the `id` and `lastName` properties of Employee entities, specify the following in the `$select` query parameter:
+
+```json
+GET https://is-demo-kjsbzgso-57c46d694dff43deabe46431e745b4ef.a.integration.cloud.sap/graph/api/v1/sap.graph/Employee?$select=id,lastName
+```
+
+Response:
+
+```json
+{
+ "@odata.context": "$metadata#Employee(id,lastName)",
+ "value": [
+ { "id": "1018",
+ "lastName": "Lou"
+ },
+ { "id": "1000031",
+ "lastName": "Sprengel"
+ },
+ { "id": "1000032",
+ "lastName": "Rupieper"
+ },
+...
+}
+```
+
+> ### Note:
+> **The resulting `Employee` entities are only represented by the two specified properties.**
+
+
+
+### Advanced Filtering Using Any Support
+
+Lambda can be used to filter for entities along attributes found in compositions. For example, you can filter out all `CorporateAccounts` where any of the addresses meet a given criteria . This can be a `CorporateAccount` that is expanded to its numerous addresses. For more information about Any support, see [OData.org: More Any and All](https://www.odata.org/blog/more-any-and-all/).
+
+**Example**
+
+Fetch all `ServiceRequestCollection` where ANY item in `ServiceRequestParty` matches filter
+
+> ### Sample Code:
+> ```json
+> /sap.c4c/ServiceRequestCollection?$expand=ServiceRequestParty&$filter=ServiceRequestParty/any(d:d/PartyID eq 'some Party ID')
+> ```
+
+Response:
+
+> ### Sample Code:
+> ```json
+>
+> {
+> "@odata.context": "$metadata#ServiceRequestCollection(ServiceRequestParty())",
+> "value": [
+> {
+> "@odata.etag": "W/\"datetimeoffset'2022-04-27T15%3A29%3A28.3907090Z'\"",
+> "ObjectID": "00163EA813131EDCB1C7A87A004DEEAF",
+> "ProcessingTypeCodeText": "Service Request",
+> "Name": "Monarch bike enquiry",
+> "ResolvedOnDateTime": "2020-04-09T11:11:08Z",
+> "CreatedBy": "Prof. Dr. Graph Tester",
+> "LastChangedBy": "Prof. Dr. Graph Tester",
+> ...
+> "ServiceRequestParty": [
+> {
+> "ObjectID": "00163EA813131EDCB1C7A87A004D4EAF",
+> "ParentObjectID": "00163EA813131EDCB1C7A87A004DEEAF",
+> "PartyID": "some Party ID",
+> "PartyUUID": null,
+> "RoleCategoryCodeText": "Buyer Party",
+> "RoleCode": "1001",
+> "RoleCodeText": "Account",
+> "Main": true,
+> "EntityLastChangedOn": "2022-04-27T15:29:28.390Z",
+> ...
+> }
+> ]
+> }
+> ]
+> }
+> ```
+
+
+
+### Result Expansion: $expand
+
+The SAP API Explorer expands most of the query results. But when using the `$select` query parameter, result set expansion can be used to also include related entities, which would otherwise not be included in the result set. This can be achieved by using the OData `$expand` query parameter and specifying which properties to expand.
+
+**Example**
+
+> ### Sample Code:
+> ```json
+> GET https://is-demo-kjsbzgso-57c46d694dff43deabe46431e745b4ef.a.integration.cloud.sap/graph/api/dev/sap.graph/SalesOrder?$select=id,orderDate,netAmount
+> ```
+
+**Response**
+
+> ### Sample Code:
+> ```json
+> {
+> "@odata.context": "$metadata#SalesOrder(id,orderDate,netAmount)",
+> "value": [
+> {
+> "id": "00163e37-bedf-1ed9-betaad-514c152dcc55",
+> "orderDate": null,
+> "netAmount": 15
+> },
+> {
+> "id": "00163e37-bedf-1ed9-betaad-e818d2bc2dba",
+> "orderDate": null,
+> "netAmount": 0
+> },
+> {
+> "id": "00163e37-bedf-1ed9-betaad-f41808420dea",
+> "orderDate": null,
+> "netAmount": 15
+> }
+> ...
+> ]
+> }
+> ```
+
+**Example**
+
+To see the items and the status of these customer orders, use `$expand=items,processingStatus` in the request:
+
+> ### Sample Code:
+> ```json
+> GET https://is-demo-kjsbzgso-57c46d694dff43deabe46431e745b4ef.a.integration.cloud.sap/graph/api/v1/sap.graph/SalesOrder?$select=id,orderDate,netAmount&$expand=items,processingStatus
+> ```
+
+**Response**
+
+> ### Sample Code:
+> ```json
+> {
+> "@odata.context": "$metadata#CustomerOrder(id,orderDate,netAmount,items(),processingStatus())",
+> "value": [
+> {
+> "id": "00163e37-bedf-1ed9-betaad-514c152dcc55",
+> "orderDate": null,
+> "netAmount": 15,
+> "processingStatus": {
+> "name": "Open",
+> "descr": null,
+> "code": "A"
+> },
+> "items": [
+> {
+> "text": "Managed Spare Part (Non-stock)",
+> "quantity": 1,
+> "id": "10",
+> ...,
+> "quantityUnit": {
+> "code": "C62"
+> }
+> }
+> ]
+> },
+> {
+> "id": "00163e37-bedf-1ed9-betaad-e818d2bc2dba",
+> ...
+> }
+> ]
+> }
+> ```
+
+
+
+### Pagination
+
+To allow easier consumption of the result data, pagination can be used. This means, that the overall result set is split into multiple smaller parts, such as the amount of data that can be displayed on a single page. Client-side pagination uses the `$stop` and `$skip` parameters.
+
+The pagination concept follows the OData specifications as well. The OData API provides several pagination options for query results.
+
+- `$top` - this parameter controls how many results are returned. You can add the desired number, such as`$top5` - this displays only the top five results.
+- `$skip` - this option skips the desired number of results. Combined with the `$top` parameter, you can narrow the results even more.
+
+You can use `$skip` or `$top` in combination with other query parameters to narrow down the results even more.
+
+**Example**
+
+> ### Sample Code:
+> ```json
+> GET https://is-demo-kjsbzgso-57c46d694dff43deabe46431e745b4ef.a.integration.cloud.sap/graph/api/bdg/sap.graph/Product?$select=id&$top=5
+> ```
+
+**Response**
+
+Returns only the first five products from the list, and only the ID of the product is displayed:
+
+> ### Sample Code:
+> ```json
+> {
+> "@odata.context": "$metadata#Product(id)",
+> "value": [
+> { "id": "014e75cf-71c6-4965-ba5d-cb3fa1055ec1" },
+> { "id": "01574be9-f73d-4954-a777-2324b6bb7989" },
+> { "id": "02676ec1-7504-4993-a0e6-8272a026cef1" },
+> { "id": "050e151e-2bb2-44a2-bf3f-7bd08abeta92f7" },
+> { "id": "0dad9cc7-d1f7-4192-b041-a57d871864ad" },
+> ]
+> }
+> ```
+
+For server-side pagination you can use the `$skiptoken` parameter.
+
+
+
+### Etag
+
+Etags \(entity tags\) are versions to track down changes that occur for a given entity. This means that if the entity data changes then the Etag value changes as well.
+
+Etags are used to allow clients to do caching and to easily check if something has changed.
+
+**Example**
+
+This tracks metadata changes.
+
+> ### Sample Code:
+> ```
+> @odata.metadataEtag
+> ```
+
+
+
+### `$count`
+
+With the `$count` parameter you can see how many results your query has in total, even if less are shown due to pagination. To do this, you need to set `?$count=true`.
+
+**Example**
+
+> ### Sample Code:
+> ```json
+> GET https://is-demo-kjsbzgso-57c46d694dff43deabe46431e745b4ef.a.integration.cloud.sap/graph/api/v1/sap.graph/Product?$count=true
+> ```
+
+**Response**
+
+> ### Sample Code:
+> ```json
+> {
+> "@odata.context": "$metadata#Product",
+> "@odata.count": 89,
+> "value": [...],
+> "@odata.nextLink": "Product?$count=true&$skiptoken=20"
+> }
+> ```
+
+The entire result set contains 89 product entries, but only the first 20 entries are displayed as part of the query response due to the server-side paging that Graph has set.
+
+
+
+### `$orderby`
+
+With the `$orderby` option, you can order the entries in your list in ascending or descending order \(`asc` or `desc`\) with all the attributes that track the date or a specific point in time, such as `createdAt`, `deliveryDate`, `modifiedAt`, and so on. Or you can order the list alphabetically with attributes such as `name`.
+
+**Example**
+
+> ### Sample Code:
+> ```json
+> GET https://is-demo-kjsbzgso-57c46d694dff43deabe46431e745b4ef.a.integration.cloud.sap/graph/api/v1/sap.graph/Product?$orderby=name asc
+> ```
+
+**Response**
+
+This operation displays the list of products ordered alphabetically by name in ascending order.
+
+
+
+
+
+## Create, Read, Update, and Delete \(CRUD\) Operations
+
+Graph allows you to create, read, update and delete data, considering any existing access rights and data source boundaries, using the following standard HTTP methods:
+
+
+
+
+
+
+HTTP Verb
+
+ |
+
+
+CRUD
+
+ |
+
+
+
+
+POST
+
+ |
+
+
+Create
+
+ |
+
+
+
+
+GET
+
+ |
+
+
+Read
+
+ |
+
+
+
+
+PUT
+
+ |
+
+
+Update/Replace
+
+ |
+
+
+
+
+PATCH
+
+ |
+
+
+Update/Modify
+
+ |
+
+
+
+
+DELETE
+
+ |
+
+
+Delete
+
+ |
+
+
+
+As GET is the most common of the CRUD operations, the following examples show you how to create \(POST\) an entity and update \(PATCH\).
+
+> ### Sample Code:
+> ```json
+> POST https://is-demo-kjsbzgso-57c46d694dff43deabe46431e745b4ef.a.integration.cloud.sap/graph/api/v1/sap.s4/A_BusinessPartner
+>
+> {
+> "Supplier": "",
+> "AcademicTitle": "",
+> "AuthorizationGroup": "",
+> "BusinessPartnerCategory": "1",
+> "CorrespondenceLanguage": "EN",
+> "FirstName": "Daniel",
+> "FormOfAddress": "",
+> "Industry": "",
+> "InternationalLocationNumber1": "0",
+> "InternationalLocationNumber2": "0",
+> "IsFemale": false,
+> "IsMale": true,
+> "IsNaturalPerson": "1",
+> "IsSexUnknown": false,
+> "Language": "DE",
+> "LastName": "Lou",
+> "LegalForm": "",
+> "OrganizationBPName1": "",
+> "OrganizationBPName2": "",
+> "OrganizationBPName3": "",
+> "OrganizationBPName4": "",
+> "OrganizationFoundationDate": null,
+> "OrganizationLiquidationDate": null,
+> "SearchTerm1": "SIGCUSTBP01",
+> "SearchTerm2": "",
+> "AdditionalLastName": "",
+> "BirthDate": null,
+> "BusinessPartnerBirthDateStatus": "",
+> "BusinessPartnerBirthplaceName": "",
+> "BusinessPartnerDeathDate": null,
+> "BusinessPartnerIsBlocked": false,
+> "BusinessPartnerType": "",
+> "GroupBusinessPartnerName1": "",
+> "GroupBusinessPartnerName2": "",
+> "IndependentAddressID": "",
+> "InternationalLocationNumber3": "0",
+> "MiddleName": "",
+> "NameCountry": "",
+> "NameFormat": "",
+> "PersonFullName": "",
+> "IsMarkedForArchiving": false,
+> "BusinessPartnerIDByExtSystem": "",
+> "BusinessPartnerPrintFormat": "",
+> "BusinessPartnerOccupation": "",
+> "BusPartMaritalStatus": "",
+> "BusPartNationality": "",
+> "BusinessPartnerBirthName": "",
+> "BusinessPartnerSupplementName": "",
+> "NaturalPersonEmployerName": "",
+> "LastNamePrefix": "",
+> "LastNameSecondPrefix": "",
+> "Initials": "",
+> "TradingPartner": ""
+> }
+> ```
+
+If this operation is run successfully, you'll receive a 201 response and the result is that you created your first `BusinessPartner`.
+
+**Example**
+
+This shows how to add the birth date to the `BusinessPartner` object that was created in the previous request.
+
+> ### Sample Code:
+> ```json
+> PATCH https://is-demo-kjsbzgso-57c46d694dff43deabe46431e745b4ef.a.integration.cloud.sap/graph/api/v1/sap.s4/A_BusinessPartner/
+>
+> {
+> "BirthDate": "1987-12-06"
+> ```
+
+**Response**
+
+After adding the birth date, the result is as follows:
+
+> ### Sample Code:
+> ```json
+> {
+> "BusinessPartner": "",
+> "Supplier": "",
+> "AcademicTitle": "",
+> "AuthorizationGroup": "",
+> "BusinessPartnerCategory": "1",
+> "CorrespondenceLanguage": "EN",
+> "FirstName": "Daniel",
+> "FormOfAddress": "",
+> "Industry": "",
+> "InternationalLocationNumber1": "0",
+> "InternationalLocationNumber2": "0",
+> "IsFemale": false,
+> "IsMale": true,
+> "IsNaturalPerson": "1",
+> "IsSexUnknown": false,
+> "Language": "DE",
+> "LastName": "Lou",
+> "LegalForm": "",
+> "OrganizationBPName1": "",
+> "OrganizationBPName2": "",
+> "OrganizationBPName3": "",
+> "OrganizationBPName4": "",
+> "OrganizationFoundationDate": null,
+> "OrganizationLiquidationDate": null,
+> "SearchTerm1": "SIGCUSTBP01",
+> "SearchTerm2": "",
+> "AdditionalLastName": "",
+> "BirthDate": "1987-12-06",
+> "BusinessPartnerBirthDateStatus": "",
+> "BusinessPartnerBirthplaceName": "",
+> "BusinessPartnerDeathDate": null,
+> "BusinessPartnerIsBlocked": false,
+> "BusinessPartnerType": "",
+> "GroupBusinessPartnerName1": "",
+> "GroupBusinessPartnerName2": "",
+> "IndependentAddressID": "",
+> "InternationalLocationNumber3": "0",
+> "MiddleName": "",
+> "NameCountry": "",
+> "NameFormat": "",
+> "PersonFullName": "",
+> "IsMarkedForArchiving": false,
+> "BusinessPartnerIDByExtSystem": "",
+> "BusinessPartnerPrintFormat": "",
+> "BusinessPartnerOccupation": "",
+> "BusPartMaritalStatus": "",
+> "BusPartNationality": "",
+> "BusinessPartnerBirthName": "",
+> "BusinessPartnerSupplementName": "",
+> "NaturalPersonEmployerName": "",
+> "LastNamePrefix": "",
+> "LastNameSecondPrefix": "",
+> "Initials": "",
+> "TradingPartner": ""
+> }
+> ```
+
diff --git a/docs/ISuite/50-Development/partner-directory-0fe80dc.md b/docs/ISuite/50-Development/partner-directory-0fe80dc.md
index fc3412c9..6c96a2ae 100644
--- a/docs/ISuite/50-Development/partner-directory-0fe80dc.md
+++ b/docs/ISuite/50-Development/partner-directory-0fe80dc.md
@@ -15,6 +15,9 @@ This documentation provides additional information.
> ### Note:
> There's also a Java API to access the Partner Directory using a programming language like Java Script or Groovy. For more information, check out the JavaDoc linked to at [SDK API](sdk-api-c5c7933.md) \(for example, check out the package `com.sap.it.api.pd`\).
+> ### Caution:
+> The data is stored unencrypted in the Partner Directory. Therefore, make sure that the data does not contain any sensitive information \(for example, passwords or personal information\).
+
There's no dedicated user interface to access the Partner Directory. You can access its content only based on APIs.
diff --git a/docs/ISuite/50-Development/payload-and-operation-71b20d4.md b/docs/ISuite/50-Development/payload-and-operation-71b20d4.md
index 5814363e..5c61ce61 100644
--- a/docs/ISuite/50-Development/payload-and-operation-71b20d4.md
+++ b/docs/ISuite/50-Development/payload-and-operation-71b20d4.md
@@ -126,6 +126,29 @@ Payload is the data that you are sending through the JDBC receiver adapter. You
>
> ```
+> ### Sample Code:
+> ```
+>
+>
+>
+>
+>
+>
+>
+>
+>
+>
+> val2old
+> val4
+>
+>
+> val2old2
+>
+>
+>
+>
+> ```
+
### EXECUTE
diff --git a/docs/ISuite/50-Development/projection-definition-file-format-fab3489.md b/docs/ISuite/50-Development/projection-definition-file-format-fab3489.md
new file mode 100644
index 00000000..855a2caa
--- /dev/null
+++ b/docs/ISuite/50-Development/projection-definition-file-format-fab3489.md
@@ -0,0 +1,482 @@
+
+
+# Projection Definition File Format
+
+Custom entities are specified in JSONC files that follow the projection definition file format.
+
+Technically, a custom entity definition is a single JSON object following the projection definition file format and governed by a JSON validation schema. By convention, each custom entity definition is stored separately in a `JSONC` file, which allows the use of comments.
+
+> ### Note:
+> Download this [schema file](https://help.sap.com/doc/custom-entity-projection/PROD/en-US) to create and validate your projection file.
+
+Here's an example of a projection definition file with one custom entity, `bestrun.Customer`, which is a projection on the mirrored `A_Customer` entity:
+
+```
+1 {
+2
+3 "label": "example",
+4 "entity": "bestrun.Customer", // the name of the new custom entity
+5 "version": "1.0.0",
+6
+7 "sourceEntities": [ { "name": "sap.s4.A_Customer" } ],
+8
+9 attributes: [
+10 // …
+11 { "name": "paysOnTime", "transform": "negation", "source": [ "isBlocked" ] },
+12 { "name": "displayId", "transform": "rename", "source": [ "customerName" ] },
+13 { "name": "country.code", "transform": "rename", "source": [ "countryCode" ] }, // flat to structured
+14 { "name": "country.name", "transform": "rename", "source": [ "countryName" ] },
+15 { "name": "monikers", "transform": "arrayFill", "source": [ "PrimaryName","AlternativeName" ] },
+16 // …
+17 ]
+18 }
+
+```
+
+A custom entity definition consisting of two parts:
+
+- A header with several header key-value pairs
+
+- Attributes with an array of objects
+
+
+The following header properties are supported:
+
+
+
+
+
+
+Property
+
+ |
+
+
+Type
+
+ |
+
+
+Mandatory
+
+ |
+
+
+Description
+
+ |
+
+
+
+
+`label`
+
+ |
+
+
+String
+
+ |
+
+
+Yes
+
+ |
+
+
+A short description of the entity, which is used in metadata documentation.
+
+ |
+
+
+
+
+`entity`
+
+ |
+
+
+String
+
+ |
+
+
+Yes
+
+ |
+
+
+The full name of the custom entity.
+
+ |
+
+
+
+
+`version`
+
+ |
+
+
+Semver
+
+ |
+
+
+Yes
+
+ |
+
+
+The current semantic version of the custom entity.
+
+ |
+
+
+
+
+`sourceEntities`
+
+ |
+
+
+Array
+
+ |
+
+
+Yes
+
+ |
+
+
+An array of one or more data source entities, used in attribute mappings.
+
+ |
+
+
+
+
+`dicts`
+
+ |
+
+
+Object
+
+ |
+
+
+No
+
+ |
+
+
+A list of dictionaries, used to map source values to or from custom values. For more information, see [Transform Functions](transform-functions-cec1e73.md).
+
+ |
+
+
+
+
+`annotations`
+
+ |
+
+
+Object
+
+ |
+
+
+No
+
+ |
+
+
+A list of annotation properties.
+
+ |
+
+
+
+The `attributes` property is an array of mapping-specification objects. Each object represents the mapping specification for a single attribute of the custom entity. That is, it describes a transform from source attributes of a specific `sourceEntity` to a custom entity attribute with a new name and data type. The transform specification is the essence of creating custom entities.
+
+The following attribute properties are supported:
+
+****
+
+
+
+
+
+
+Property
+
+ |
+
+
+Type
+
+ |
+
+
+Mandatory
+
+ |
+
+
+Description
+
+ |
+
+
+Default
+
+ |
+
+
+
+
+`name`
+
+ |
+
+
+String
+
+ |
+
+
+Yes
+
+ |
+
+
+The name of the new attribute.
+
+ |
+
+
+Not applicable
+
+ |
+
+
+
+
+`key`
+
+ |
+
+
+Boolean
+
+ |
+
+
+No
+
+ |
+
+
+Set to true if this attribute \(called `id`\) is the key of the entity.
+
+ |
+
+
+False
+
+ |
+
+
+
+
+`source`
+
+ |
+
+
+array
+
+ |
+
+
+No
+
+ |
+
+
+The source attribute of the corresponding `sourceEntity`.
+
+ |
+
+
+If the transform is `rename`, then the default is a source attribute with the same name. Not specified for type=`Association` or transform=`join`. In all other cases, specifying a source is mandatory.
+
+ |
+
+
+
+
+`sourceEntity`
+
+ |
+
+
+String
+
+ |
+
+
+No
+
+ |
+
+
+The source entity used.
+
+ |
+
+
+The first in the list of`sourceEntities`.
+
+ |
+
+
+
+
+`type`
+
+ |
+
+
+enum
+
+ |
+
+
+No
+
+ |
+
+
+The type of new attribute.
+
+ |
+
+
+Type is taken from the source or the transform, or is set explicitly.
+
+ |
+
+
+
+
+`transform`
+
+ |
+
+
+enum
+
+ |
+
+
+No
+
+ |
+
+
+One of several transformation functions.
+
+ |
+
+
+`rename`
+
+ |
+
+
+
+
+`on`
+
+ |
+
+
+String
+
+ |
+
+
+No
+
+ |
+
+
+The specification expression of an attribute of type `Association to-many`.
+
+ |
+
+
+Must appear in to-many associations.
+
+ |
+
+
+
+
+`associationTarget`
+
+ |
+
+
+String
+
+ |
+
+
+No
+
+ |
+
+
+The target entity name of an attribute `Association`.
+
+ |
+
+
+Must appear in associations.
+
+ |
+
+
+
+
+`annotations`
+
+ |
+
+
+object
+
+ |
+
+
+No
+
+ |
+
+
+A list of annotation properties.
+
+ |
+
+
+
+
+ |
+
+
+
diff --git a/docs/ISuite/50-Development/queries-2205ef9.md b/docs/ISuite/50-Development/queries-2205ef9.md
new file mode 100644
index 00000000..fda9cdf0
--- /dev/null
+++ b/docs/ISuite/50-Development/queries-2205ef9.md
@@ -0,0 +1,145 @@
+
+
+# Queries
+
+Queries in GraphQL build on fields and arguments.
+
+Fields represent the properties of an entity. Only fields that are specified in a query are returned by the API \(similar to `$select` in OData\). Arguments are additional options that can be passed in a query to modify the expected response by, for example paginating, filtering, or sorting.
+
+The specification of fields and arguments works on the root level of a query, but are also deeply nested. This enables traversing the data graph and specifying exactly the data that should be returned by the API.
+
+The GraphQL interface that Graph exposes is structured similar to the OData interface, and is capable of the same query features.
+
+```
+query {
+ {
+ (
+ top: ,
+ skip: ,
+ filter: [
+ {
+ : {
+ : []
+ }
+ },
+ ...
+ ],
+ orderBy: [
+ {
+ :
+ }
+ ]
+ ) {
+ nodes {
+
+ ...
+ }
+ }
+ }
+}
+
+```
+
+> ### Note:
+> The body of list queries always needs to be wrapped within `nodes { }`. The same applies when querying for nested to-many relationships.
+
+As the period-character has a special meaning in GraphQL, any occurrence of it is replaced with the underscore \(`_`\) character in the namespace of a GraphQL request.
+
+
+
+
+
+## Example - Query with Token-Based Pagination and Sorting
+
+In the `sap.s4` namespace, read 10 `A_Product` entities skipping the first 10 and ordering by the`Product` field in ascending order selecting the following fields:
+
+- `Product`
+
+- `Brand`
+
+- `CountryOfOrigin`
+
+
+
+
+### GraphQL
+
+```
+query {
+ sap_s4 {
+ A_Product (
+ top: 10,
+ skip: 10,
+ orderBy: [
+ { Product: asc }
+ ]
+ ) {
+ nodes {
+ Product
+ Brand
+ CountryOfOrigin
+ }
+ }
+ }
+}
+```
+
+
+
+### OData Equivalent
+
+```
+https://is-demo-kjsbzgso-57c46d694dff43deabe46431e745b4ef.a.integration.cloud.sap/graph/api//sap.s4/A_Product?$top=10&$skip=10&$select=Product,Brand,CountryOfOrigin&$orderby=Product asc
+```
+
+
+
+
+
+## Example - Query with Nested To-Many Query
+
+In the `sap.s4` namespace, read 10 `A_Product` entities skipping the first 10, selecting the following fields:
+
+- `Product`
+
+- `ProductType`
+
+- `ProductDescription` from the extended `to_Description`
+
+
+
+
+### GraphQL
+
+```
+query {
+ sap_s4 {
+ A_Product (
+ top: 10,
+ skip: 10,
+ orderBy: [
+ { Product: asc }
+ ]
+ ) {
+ nodes {
+ Product
+ ProductType
+ to_Description {
+ nodes {
+ ProductDescription
+ }
+ }
+ }
+ }
+ }
+}
+```
+
+
+
+### OData Equivalent
+
+```
+https://is-demo-kjsbzgso-57c46d694dff43deabe46431e745b4ef.a.integration.cloud.sap/graph/api//sap.s4/A_Product?$top=10&$skip=10&$select=Product,ProductType&$expand=to_Description($select=ProductDescription)
+```
+
diff --git a/docs/ISuite/50-Development/receiver-communication-flow-v2-3897ded.md b/docs/ISuite/50-Development/receiver-communication-flow-v2-3897ded.md
index 1db31277..d1805bad 100644
--- a/docs/ISuite/50-Development/receiver-communication-flow-v2-3897ded.md
+++ b/docs/ISuite/50-Development/receiver-communication-flow-v2-3897ded.md
@@ -89,8 +89,91 @@ Follow the procedure below to configure the integration flow.
|
-3. Choose *Save*
-4. Choose *Deploy*.
+3. Choose the *Receiver* tab and maintain the following:
+
+ > ### Note:
+ > You only need to maintain this tab if you have enabled dead letter queue in your agreement for the receiver interchange. To know more, see [Creating a Trading Partner Agreement](creating-a-trading-partner-agreement-9bd43c9.md).
+
+ :
+
+ **Parameters for Configuration**
+
+
+
+
+
+
+ Parameter
+
+ |
+
+
+ Default Value
+
+ |
+
+
+ Description
+
+ |
+
+
+
+
+ Receiver
+
+ |
+
+
+
+
+ |
+
+
+ The name of the sender.
+
+ |
+
+
+
+
+ Adapter Type
+
+ |
+
+
+ JMS
+
+ |
+
+
+ The type of the sender adapter which is set to *JMS* by default.
+
+ |
+
+
+
+
+ Queue Name
+
+ |
+
+
+ COM\_RECEIVER\_OUTOUND\_DEAD\_LETTER\_Q
+
+ |
+
+
+ Dead letter queue where the failed messages after retries are collected.
+
+ To enable the dead letter queue for this integration flow, you need to make changes to the retry configuration. To know more, see [Configuration Manager](configuration-manager-7daf06c.md) .
+
+ |
+
+
+
+4. Choose *Save*
+5. Choose *Deploy*.
> ### Note:
> To know how to set maximum retries for failed integration flows, see [Configuration Manager](configuration-manager-7daf06c.md).
diff --git a/docs/ISuite/50-Development/reuse-imported-archives-objects-from-es-repository-4196091.md b/docs/ISuite/50-Development/reuse-imported-archives-objects-from-es-repository-4196091.md
new file mode 100644
index 00000000..2d5d8b72
--- /dev/null
+++ b/docs/ISuite/50-Development/reuse-imported-archives-objects-from-es-repository-4196091.md
@@ -0,0 +1,63 @@
+
+
+# Reuse Imported Archives Objects from ES Repository
+
+
+
+
+
+## Prerequisites
+
+- [Configuring Connectivity to an SAP Process Orchestration System](IntegrationSettings/configuring-connectivity-to-an-sap-process-orchestration-system-8c36fd2.md)
+
+- [Creating an Imported Archives Artifact](creating-an-imported-archives-artifact-e555caf.md)
+
+
+
+
+
+
+## Context
+
+There are certain limitations while importing and consuming the imported archive objects:
+
+- You can import archive objects with XSLT mapping but you can't assign the mapping to a *XSLT Mapping* flow step.
+
+- You can import archive objects with Java mapping but you can't assign the mapping to an *Operation Mapping* flow step.
+
+- You must maintain custom java code in an imported archive for any underlying Java version changes or platform dependencies changes.
+
+
+
+
+## Procedure
+
+1. Open the Imported Archives artifact that you created and choose *Edit*.
+
+ The resource pane and editor comes up on the left and right sides respectively.
+
+2. In the resource pane, choose *Upload*.
+
+3. In the dialog box, choose *ES Repository* as the *Source*.
+
+4. Select the *Name* of the ES Repository that you want to connect with.
+
+ You see the details populated in the *Address* and *Location ID* fields.
+
+5. Choose *Connect*.
+
+ You see a list of available imported archive objects.
+
+6. Choose an imported archive object of your choice and choose *Select*.
+
+ The selected imported archive object gets imported to the resource pane.
+
+7. Choose the imported archive object to view its content.
+
+ The contents of the archive object appear in the editor pane. You see the name and path for all files contained in the archive object.
+
+8. Choose *Save*.
+
+9. Deploy the Imported Archives artifact.
+
+
diff --git a/docs/ISuite/50-Development/rfc-receiver-adapter-5c76048.md b/docs/ISuite/50-Development/rfc-receiver-adapter-5c76048.md
index bf834feb..5d68f1ed 100644
--- a/docs/ISuite/50-Development/rfc-receiver-adapter-5c76048.md
+++ b/docs/ISuite/50-Development/rfc-receiver-adapter-5c76048.md
@@ -112,6 +112,14 @@ Description
Enter the RFC destination configured in SAP BTP cockpit for your application.
+> ### Note:
+> You can create dynamic destinations by using expressions \(header, property\) in the Content Modifier.
+>
+> 1. Select Content Modifier in the integration flow. Then, go to Message Header in Content Modifier properties and set header value as the destination name. For example, abc.
+> 2. Select your RFC adapter and. In the *Destination* field, assign dynamic destination by using the expression: $\{header/property.header/property name\}. For example $\{header.abc\} or $\{property.abc\} where abc is the value of the header or property.
+
+
+
|
@@ -157,9 +165,6 @@ If you enable this option, the adapter creates a new RFC connection in the backe