Payload Mapping & Attribute Definition
For each Action you have to define which attributes are sent, received or used as key in the defined url.
Entries without any details are correct. The details will be inherited from the reference profile.
Please never delete entries. Deactivate them if not needed.
Details on inheritance/deactivation can be found in Create/Update/Copy/Configure Template
Some attribute definitions seem to be empty in this example. This is OK. Inheritance feature is used here.
External System
You can find the documentation on the External System level.
Action / Direction
You can find the documentation on the Action Definition level.
Attribute Name
Attribute name used to define a single data to be read or changed.
Use
Attributes are the central part of the Cross Connector product. Attributes are used to model the data structure of an external interface. An attribute can address a field of the payload send or received. It can be a http params. It can be a placeholder being part of the URI.
At the same time an attribute can hold a piece of data of a business transaction. It can be considered like a variable transferring data from a business transaction to an external tool or from an external tool to a business transaction.
Dependencies
For outbound actions, sending data from SAP Solution Manager to an external tool, the name of the attribute does not matter. You can choose a random name. You just have to ensure that the name in the attribute definition is equal to the name used in the field mapping.
For inbound actions the attribute name must be predefined as field in the CC4 odata service. If you chose an attribute name not existing, you could never receive a value from external. However, for constant values or http parameters you are again free to choose a random name.
Since we are sometimes reading and sometimes writing data, since we are sometimes creating and sometimes updating, we should use one and the same attribute for all actions and all directions. This is not a prerequisite but a recommendation.
The first letters IV, EV and KV do have a historical meaning. "IV" means import value on creation of a business transaction from external tool to SAP Solution Manager. The external tool is sending us the value and SAP Solution Manager is receiving (resp. importing) it. "EV" means export value on creation of a business transaction from external tool to SAP Solution Manager. We are sending back (resp. exporting) this value to the external tool. KV means key value. This attribute is being used as placeholder in an URI.
As you can imagine, an attribute being an import value in one action could be an export value in another action. An attribute can be used as exporting/importing value and as key value at the same time. Therefore the naming convention is not consistent in most cases especially if we follow the recommendation of reusing attributes for different actions and directions.
You just have to keep in mind: The attribute name is a variable name connecting the interface definition with the one order framework. That's all. That's the magic!
Example
Following attributes are pre-defined and pre-delivered. You can use them. You can redefine them. You can activate or deactivate them. You can add your own attributes if needed.
Group | Attribute Name | Comment |
---|---|---|
Ticket ID | IVEXTSYSGUID EVOBJECTGUID EVOBJECTID EVURL IVEXTGUID IVEXTID IVEXTURL EXTERNAL_ID IVPONUMBERSOLD | External System Solman Ticket GUID Solman Ticket ID Solman Ticket URL External Ticket GUID (not used by Jira) External Ticket ID External Ticket URL External Ticket ID (URI placeholder) Used to sync SALES-PONUMBERSOLD with Ext.Ticket ID |
Predecessor | IVPREDECESSOREXTGUID IVPREDECESSOREXTID IVPREDECESSORGUID IVPREDECESSORID | External Predecessor GUID (not used by Jira) External Predecessor ID Solman Predecessor GUID Solman Predecessor ID |
Transaction Main Data | IVPROCESSTYPE KVPROCESSTYPE IVTITLE IVPRIORITY IVIMPACT IVURGENCY IVCATEGORY IVCONFIGURATIONITEM IVPROJECT | Solman Process Type with mapping Solman Process Type without mapping (URI placeholder)
Jira project (Jira Cloud outbound) |
Status | IVSTATUS IVSTATUSDESC IVTRANSITION approval close_code close_notes hold_reason | Jira Cloud inbound, Jira DC in+out Jira DC outbound Jira Cloud outbound ServiceNow outbound ServiceNow outbound ServiceNow outbound ServiceNow outbound |
Appointments | IVDUEDATE IVAPPOINTMENT01 IVAPPOINTMENT02 IVAPPOINTMENT03 IVAPPOINTMENT04 IVAPPOINTMENT05 IVAPPOINTMENT06 IVAPPOINTMENT07 IVAPPOINTMENT08 IVAPPOINTMENT09 IVAPPOINTMENT10 |
|
Long Texts | IVDESCRIPTION IVSOLUTION IVASSUMPTION IVTEXT01 IVTEXT02 IVTEXT03 IVTEXT04 IVTEXT05 IVTEXT06 IVTEXT07 IVTEXT08 IVTEXT09 IVTEXT10 work_notes |
ServiceNow outbound |
Partners | IVBPEXEMAIL IVBPEXFIRSTNAME IVBPEXLASTNAME IVBPEXUSER IVOWNEREMAIL IVOWNERFIRSTNAME IVOWNERLASTNAME IVOWNERUSER IVPARTNER01 IVPARTNER02 IVPARTNER03 IVPARTNER04 IVPARTNER05 IVPARTNER06 IVPARTNER07 IVPARTNER08 IVPARTNER09 IVPARTNER10 assignment_group | Jira DC outbound Jira DC outbound Jira DC outbound
Jira DC outbound Jira DC outbound Jira DC outbound
ServiceNow outbound |
Additional / Custom fields | IVEFFORTPT IVVALUEPT IVLOCAL IVCUSTOM01 IVCUSTOM02 IVCUSTOM03 IVCUSTOM04 IVCUSTOM05 IVCUSTOM06 IVCUSTOM07 IVCUSTOM08 IVCUSTOM09 IVCUSTOM10 | Focused Build field Focused Build field Focused Build field |
Attachments (URLs and Files) | ISATTACHSET ISATTACHSET_DATA ISATTACHSET_DATA_EXTENSION ISATTACHSET_DATA_TECHNFILENAME ISATTACHSET_URL ISATTACHSET_URL_DESCRIPTION ISATTACHSET_URL_NAME | only Solman Inbound and Jira DC outbound |
HTTP Parameters and Error Messages | InterfaceContentType InterfaceAccept InterfaceErrorMessage InterfaceStatusCode InterfaceStatusReason IVERRORMESSAGES IVERRORS IVCUSTOMMESSAGE |
Jira Cloud, ServiceNow Jira Cloud Jira DC |
Key
Key attribute.
Use
This attribute is used as key attribute of the synchronization. A key attribute is a parameter of the endpoint URI used to call the API.
Dependencies
An attribute can be a key attribute and an inbound or outbound attribute at the same time. Usually POST calls does not have parameters and therefore no key attributes. On the other side PUT and GET calls always have parameters resp. key attributes.
Example
The External Ticket ID or GUID is always a key attribute on read or update calls.
Out
Outbound attribute.
Use
This attribute is used as outbound attribute of the synchronization. An outbound attribute is part of the body or http parameters. It is part of the request for outgoing calls and part of the response for incoming calls.
Dependencies
An attribute can be a key attribute and an inbound or outbound attribute at the same time. Usually POST and PUT calls to the external tool have a lot of outbound attributes. On the other side an outgoing GET call does have a lot of inbound attributes.
Example
Usually the business transaction ID, GUID, URL and the process type are attributes send from SAP Solution Manager to the external tool on creation and update. These attributes are therefore outbound attributes in these cases.
All data send to the external tool are outbound attributes. All data received from the external tool are inbound attributes. Regardless whether it is an outgoing or incoming call.
In
Inbound attribute.
Use
This attribute is used as inbound attribute of the synchronization. An inbound attribute is part of the body or http parameters. It is part of the response for outgoing calls and part of the request for incoming calls.
Dependencies
An attribute can be a key attribute and an inbound or outbound attribute at the same time. Usually POST and PUT calls to the external tool have a lot of outbound attributes. On the other side an outgoing GET call does have a lot of inbound attributes.
Example
Usually the business transaction ID, GUID, URL and the process type are attributes send from SAP Solution Manager to the external tool on creation and update. These attributes are therefore outbound attributes in these cases.
All data send to the external tool are outbound attributes. All data received from the external tool are inbound attributes. Regardless whether it is an outgoing or incoming call.
Mandatory
This attribute is mandatory.
Use
If for an outgoing action the request or the URI is not completely generated because a mandatory attribute could not be determined, the action is not executed.
If, for an incoming action, the request or URI is not completely transmitted because a mandatory attribute was not transmitted, the action is not executed.
Please set the flag if this attribute is mandatory for the proper execution of the action, both in terms of input, output and key. Please do not set it if the attribute is only optional.
Example
Usually, all key attributes (attributes in the URI) are mandatory. Usually the ticket IDs (internal and external) will also be mandatory attributes. Probably the transaction type is mandatory as well.
JPath
Path expression for modeling a payload.
Case 1: JSON Path expression for request or response payload.
Case 2: HTTP Header Parameter
Case 3: Parameter expression for URI (URI template RFC 6570)
Case 4: Search pattern for URI (Regular Expression)
Case 5: Alias for another attribute
Use
Case 1: If the attribute is used in the payload, a JSON path expression must be specified. In principle: simple attributes, structures, deep structures, arrays with index, arrays with filter conditions and constant values are supported.
Case 2: As HTTP Header Parameters only simple parameter names are currently supported here. The special character ~ is allowed, but not /{}[]@#=,
Case 3: As parameter expressions for URI key attributes, you can use whitespaces, simple names or paths of the form "/name/key". For the meaning and possibilities, refer to the information available on the Internet on URI Templates RFC 6570. Usually, the path expression is empty (whitespace) and the attribute will be used as URI placeholder.
Case 4: Search patterns are regular expressions with a left delimiter ^ and a submatch. They are used to extract a parameter value from a URI. This feature will be used in future for incoming actions. Currently this feature is not used.
Case 5: An alias is an alternative name for another attribute. Instead of storing the alias the path expression field, you can also make use the field dependency. Please use the field dependency and keep the path empty.
Dependencies
Please chose a path type corresponding to the path expression.
If the path expression is empty but a path is needed, we are reusing the attribute name as path for legacy reasons.
Example
Please take a look at the template profiles starting with # to get an impression of the possibilities.
Path Type
Path Type of a Path Expression.
Use
B Payload/Body Attribute Path (Content In/Out)
The path expression is a json payload path expression used for inbound or outbound communication.
H HTTP Header Parameter (Content In/Out)
The path expression is a name of a http field used for inbound or outbound communication
U URI Template Variable (Key Out)
The path expression is a parameter expression (URI template RFC 6570) used to build an endpoint URI used for an outbound communication.
R Regular Expression (Key In)
The path expression is a regular search expression used to extract a value from an endpoint URI used by an outbound communication. This feature is planned for future enhancements but not implemented/used so far.
A Alias (Alternative attribute name)
The path expression has to be empty and the dependent attribute field has to contain another attribute name. Alternatively, the path expression has to contain the other attribute name and the dependent attribute field has to be empty.
The attribute will be an alias for the other attribute. This means, that it will inherit the attribute definition of the other attribute. For inbound communication it will therefore receive the same value as the other attribute, which makes sense, if we want to store this data to two different places. For outbound it will set the value to the same target (json path or http field) as the other attribute, which makes only sense of only one of both can contain data or if both contain the same value.
Two famous aliases are IVPONUMBERSOLD or /SALM/EXTID.
V Virtual/Dummy/Helper (internal only)
The path expression has to be empty. The attribute is used to read and convert a value, but this value is not used for outbound communication directly. Instead, another attribute has to use this attribute as dependent attribute taking over its value. A virtual inbound attribute makes no sense, please use the alias concept here.
Dependencies
Please have a look at the documentation of the path expression.
You can keep the path type empty. In this case the path type will be calculated automatically based on the Key-In-Out flags and based on the legacy path expression prefix (e.g. body:, http-param: or ^). It is recommended to specify the path type explicitly without using the legacy prefixes to avoid miss-interpretation.
Value Type
Value type used to generate a proper JSON payload.
Use
A JSON payload is supporting only few data types. It is supporting structures/objects opening and closing with {}, arrays opening and closing with [] and strings opening and closing with "". Additional there are some special datatypes supported as well, like a number or true/false. No opening/closing letter is existing here.
If you choose "Autodetect", CC4 is always considering a regular attribute as string. If the value template or fallback value is maintained in the attribute definition, the data type will be detected by analyzing the value.
Since the auto detection might be wrong in some very special cases, you can force the right data type. It is recommended to choose "Autodetect" and to change to another value only if really needed.
Following value types are supported:
Autodetect
object Structure/Object {}
array Array []
string String ""
float_str Floatingpointnumber
int Number 0, 1, 2, 3, ...
bool Boolean true/false
null null
Dependencies
The value type is used/needed only for outbound JSON payload attributes. HTTP header fields or URI parameters are not using this concept. They are always strings. Same for inbound attributes, our REST API is currently providing only string attributes. Maybe this will change in future.
Example
The ISATTACHSET attributes are forced to arrays.
Fallback Value
Fallback value to be used as replacement for empty/initial external values on receive or send.
Use
You can specify an external fallback value here. It will replace the external value received from the external tool if no or just an initial value got received (Solman Inbound). It will replace any initial value just before sending it to the external tool (Solman Outbound). You can use this field as alternative to a value mapping of the initial/empty/whitespace value to something else. Proposal: If you already have a value mapping configured, you should use the value mapping feature for this initial mapping too. If there is no additional value mapping needed, you can use the fallback value feature.
You can also use this feature as constant value feature in case the payload attribute will never be received because of an invalid attribute path (Solman Inbound) or in case the business transaction value will never be read because of missing field mapping (Solman Outbound).
The external value could be an exact matching value like an assignee user id, transition id, a priority name or any other external value of an external ticket. Please perform a GET call in your web browser to read all values of a certain external ticket.
If the attribute is an array or a structure/object, you can also specify complex values like [], {} or much more complex payload snippets like {"info" : [ { "name": "company", "value" : "CrossALM" } ] } for instances here.
The external value could be an operation value alternatively. Following operation values are supported:
#IGNORE# --> The field should be ignored. It should not be changed in external ticket (Solman Outbound) or business transaction (Solman Inbound).
#DELETE# --> The field should be cleared/deleted/removed. It should be changed in external ticket (Solman Outbound) or business transaction (Solman Inbound).
(whitespace) --> Fallback feature will be skipped.
Partial matching values (regular expressions or using of *, ?, +, % in between or at the beginning/end) are not supported here.
Dependencies
Please note that additionally a conversion routine can be used to perform a dynamic value mapping resp. conversion. Also a fallback value could be specified somewhere. In general, the value conversion is getting performed in following sequence. Therefore, the conversion result could be a mixture of multiple conversion rules.
Outbound / Int 2 Ext:
Read internal value from business transaction.
Convert value using conversion routine specified in field mapping.
Convert value using value mapping (Int to Ext).
Convert value using conversion routine specified in attribute definition.
Use fallback value defined in attribute definition if converted value is initial/empty and if fallback value is not empty.
Send external value to external tool as attribute of a payload, http parameters or as part of the URI.
Inbound / Ext 2 Int:
Receive external value from external tool as attribute of a payload, http parameters or as part of the URI.
Use fallback value defined in attribute definition if received value is initial/empty and if fallback value is not empty.
Convert value using conversion routine specified in attribute definition.
Convert value using value mapping (Ext to Int).
Convert value using conversion routine specified in field mapping.
Write internal value to business transaction or remove/delete a value from business transaction.
Example
Usually, attributes will be ignored if they are initial/empty. If an empty business partner will be received for example, it will not cleared/deleted/removed/changed in the business transaction. If an empty business partner will be read for example, it will not cleared/deleted/removed/changed in the external ticket.
This behavior was implemented for legacy reasons where only mandatory attributes got exchanged (mandatory means, that there is always a non-initial value) and where partial synchronizations got performed from time to time (partial means, that only some attributes got exchanged even if both sides are configured for much more attributes/fields).
To force a deletion/removal in this case, you can maintain the fallback value #DELETE#. To force a certain value, you can maintain it as fallback value here.
Prerequisites
Operations #IGNORE# and #DELETE# are supported since CC4 ABAP version 2.3.0.
Value Template / Pattern
Template or pattern for a value.
Use
This field or feature is used to build or decompose complex values. Values are usually transferred 1:1, apart from conversions. However, it can also happen that the value read from the business transaction needs to be supplemented before or after by another constant character string or even combined with another dynamic value. It may also be that the received value is very complex and only a substring is needed. This is what this feature is for.
Blank value:
Please leave the field blank if you do not need the feature.
Fixed value:
Maintain a constant string if you always want to assign this value to the attribute. Unlike the fallback value, the constant is used even if a real value has been received or read.
Template:
Maintain any character string including the placeholders #VALUE# and/or #DEPVALUE#. #VALUE# represents the original value of the attribute at runtime. #DEPVALUE# represents the value of the dependent attribute. Please note that when receiving from external, composition/extraction occurs immediately before conversion and when sending to external, composition/extraction occurs immediately after conversion.
Pattern:
Maintain any regular expression that can be used to extract a substring. The ABAP command FIND REGEX … IN … SUBMATCHES is used for this. The pattern must begin with ^ to be recognized as a pattern.
Example: ^[[:print:]]*-(\w*)$
Dependencies
Please note the dependencies with the dependent attribute and the conversion rules.
Example
Preset with a constant value.
Adopting the value of another attribute.
Concatenate the values of two attributes (the own and the dependent).
Placing strings before, in the middle or after.
Building complex payload structures/arrays with a value in between.
Extraction of a substring from a complex value.
Prerequisites
This feature is supported since CC4 ABAP version 2.4.0 (05/2024).
Conversion
You can find the documentation on the Field Mapping level.
Dependent Attribute
Attribute dependent on another attribute.
Use
Sometimes an attribute can only exist if another attribute is existing and has a proper value. If the dependent attribute is not existing or has an empty value, the current attribute will be ignored even if it has an own value.
Sometimes an attribute is just an alias of another attribute. That means, we want to extract the value from the payload in the same way as the other attribute is doing it. Usually the conversion / mapping and the location where we will store it (field mapping) is different.
Sometimes an attribute is just a virtual attribute and its value should be taken over to another attribute. Maybe it should be taken over without any change. Maybe we want to extract a section. Maybe we want to concatenate it with some other strings/values.
In all these cases mentioned above, we have to specify the dependent attribute here.
Dependencies
In most cases an attribute does not have a dependency. This field can be left empty then.
Example
Here are some examples:
Constants for text attributes should exist only in case there is a none-empty text in JIRA Cloud V3 API.
Attachment attributes transferring details like MIME type or filename should transfer these details only if there are some attachment data to be transferred in Jira Cloud V2/V3 API or ServiceNow API.
IVPONUMBERSOLD should store the External Ticket ID (IVEXTID) in field SALES-PO_NUMBER_SOLD too.
Same for /SALM/EXT_ID in case of Focused Build.
Disable / Inactive
You can find the documentation on the External System level.
Example attribute: IVPROJECT
Note that the attribute IVPROJECT is needed for Jira Cloud configurations to define a project on Jira side
name of the attribute
checkboxes for sending directions:
key: the information saved in the attribute is needed for the url
out: attribute is send from SolMan to external tool
in: attribute is received from external tool
mand: the attribute is mandatory
json path: represents the path in the payload send (those paths can differ for different ext. systems)
a static value can be defined, which should be send (can be anything you want)
a conversion routine can be sprcified, but it’s more common to specify conversions in the field mapping for all attributes independant from action in which that attribute is used