CRM and CX Blogs by SAP
Stay up-to-date on the latest developments and product news about intelligent customer experience and CRM technologies through blog posts from SAP experts.
cancel
Showing results for 
Search instead for 
Did you mean: 
Felix_Wyskocil
Product and Topic Expert
Product and Topic Expert
In my live sessions about print form adaptation with the Adobe LiveCycle Designer, data binding is a frequently requested and crucial topic. Especially in scenarios with complex tables and multi-level data structures. That’s why I decided to underline the sessions with some blog posts.

Most topics of the live sessions and blogs focus on the Adobe LiveCycle Designer (ALD) itself. So, they are applicable for several SAP cloud solutions where Adobe Document Services (ADS) are used. For system-related topics, I refer to either SAP Sales/Service Cloud (in former times SAP Cloud for Customer, C4C) or SAP Business ByDesign (ByD). Print form maintenance and output management is handled similarly in these two solutions.

I recommend reading this blog series in the order as stated below. You can find the registration information for my live sessions at the bottom of this blog.

List of print form blogs:

Basic Preparation


Download Sample Data


Let’s start with the basics and some easier cases to have everyone on the same page.

For data binding, it’s crucial to know the data model of the objects that you're working with. In my opinion, it’s the best and also the easiest way to download the XML data of a sample document from the system and review. This helps you to become familiar with its structure and find the fields and values that you are looking for. If you are not familiar with downloading XML data from the system, you should first read my blog about it.

Update the Data Connection


Furthermore, when working on data bindings, I recommend to always update the data connection to ensure that the Adobe LiveCycle Designer has the latest data structure information available. This way the ALD supports you with the binding menu and doesn't show false warnings of fields that are bound to "unknown" data nodes.

Update the data connection from the Data View palette, by right-clicking on the Data Connection entry and choosing Connection Properties...
In the Connection Properties dialog, choose the MainSchema.xsd that is part of the zip file when downloading the print form from the Form Template Maintenance work center. This file links all other xsd files. So, don't delete them!


Update Data Connection


After updating the data connection, we can use the binding menu and can be sure that it contains the latest data structure. If you added extension fields to the respective print form, they would also appear in the menu.


Data Binding Menu



Local Preview


I highly recommend previewing modifications made to the print form every once in a while with the sample data that you have downloaded. That's a crucial feature of the Adobe LiveCycle Designer and it saves you much effort in comparison to uploading the print form to the cloud solution for previewing changes.

As a reminder (it's also mentioned in my other blog), you can assign the XML file for local preview as follows: Menu File -> Form Properties -> tab Preview -> choose the downloaded XML.

Binding of Simple Fields


Before we start with more complex topics like tables, let’s begin with an easy example to explain the general procedure. The following screenshot is an excerpt of a sample XML file:


Excerpt of a sample XML


Let's assume we want to show the ID of this delivery note and the full name of the receiver of the goods. The ID is simple as it's one of the first fields in the XML. The full name of the goods receiver  can be found in the subnode ProducRecipientParty, in the field FormattedName.

You can usually find several Party nodes inside the XML representing the different involved parties of the document. Other common examples for involved parties are: BuyerParty, SellerParty, ProductRecipientParty, ResponsibleEmployeeParty, etc.

Hint: Always look at these parties from the view of your company. In a sales document such as a sales quote or sales order, the buyer is your customer/client. If you want to order goods from your supplier and send a purchase order to them, you are the buyer.

We could add two fields to the form and bind them as follows:

  • Binding of the ID field: $.DeliveryNote.ID

  • Binding of the Recipient field: $.DeliveryNote.ProductRecipientParty.FormattedName


If you compare these binding paths to the data XML you will notice that the XML root element (the one with the namespace declaration) is not mentioned in the path. Instead, the binding path starts with DeliveryNote and navigates through the XML tree using dots (.) as separators.

The result could look like this:


Data Binding of the Recipient Field


If you want to bind multiple fields to XML nodes that share the same parent, you can wrap them in a subform and bind the subform to the parent node. Although that doesn't save us any effort, I still like this approach as it's close to the data structure and it's cleaner in my opinion. And the binding paths of the sub-fields are displayed shorter which makes them easier to read and find mistakes...

The following screenshot shows the parent subform approach for the example of the delivery note's ship-to-address. The XML that contains the postal address lines on the right, and the text fields wrapped in a parent subform on the left:


Hierarchy, Design View and XML for the Ship-To-Address


As we can see in the XML, the address information is stored in the ShipToLocation node under FormAddress and it is split amongst several PostalRegulationsCompliantAddressLines, each with the according prefix First, Second, etc.

In the form hierarchy we have the frmShipToAdd subform as the parent, bound to  $.DeliveryNote.ShipToLocation.FormAddress. Underneath we have a text field per address line. The first one has the binding $.FirstPostalRegulationsCompliantAddressLine.Description, the second one $.SecondPostalRegulationsCompliantAddressLine.Description, and so on and so forth. If we omitted the parent subform or didn't bind it, we would have to write the whole binding path starting with $.DeliveryNote.ShipToLocation... for every text field. With the parent subform each text field's binding path starts directly with the $.First, $.Second, etc. part.

Some background knowledge on addresses: The correct representation for postal addresses are generated by the system. That means we don't need to take care about concatenating single parts of an address or include line breaks, etc. on our own. That's already done by the system. We only need to display the single lines. And that might be the surprise: Maybe you expected a single field with line breaks. However, the address lines come in separate fields, each with a different name. So, we have to bind every single field.

 

Alright, that's enough for the basics. Continue reading in the next blog about Data Binding with Repeating Items and Simple Tables in Print Forms.

In case you have questions, feel free to ask them in my live session:

Live Sessions (UPDATE 2024!)


As already mentioned at the beginning of this post, I’m delivering monthly live sessions with a changing agenda on the topic of print form adaptation. If you are interested and would like to join, here are some details:

Starting 2024 the live sessions have moved to a new platform: You can find them via this new direct link on learning.sap.com. You still need a corresponding subscription in order to register for the live session.

If you want to get informed about the next blogs of this series or updates on the live session, please follow this blog post by clicking on the green “follow” button on the left. You can also follow me fwys for more blog posts about SAP Customer Experience Solutions – Integration and Extensibility topics.