cancel
Showing results for 
Search instead for 
Did you mean: 

Error Message External Mapping Not Complete Yet

Former Member
0 Kudos

Hi,

I have the following scenario.

Component A <b>is Embedding</b> Component B.

Component B has a Componenet Controller that makes a<b> Service Call</b> to a Function Module.

The <b>Top Node in the Context of Component Controller of Component B (</b>which is same as the name of the function module being called) is marked with :

<b>Interface Node = 'X'

isInputElement = 'X'.</b>

The IMPORTING Node gets the isInputElement = 'X' property.b The CHANGING node does not.

The Context of COmponent Controller of B looks like

Context

Name_of_Function_Module

IMPORTING

Attribute1

CHANGING

Attribute2

<b>Now in Component A, in the Component Usage of B-> Interface Controller , I declare the Usage of Component Controller of Component A</b>

I did the external mapping of the Top Node of Component B(throught the interface controller) to that of Component Controller of A.

I created a View in Component A, declared usage of Component Controller of A in this View, did context mapping from View Controller of A to Component Controller of A and binded the IMPORTING node attributes to the Inputfield.

I made sure I instantiate the Used COmponent B in the WDDOINIT() method of the COmponent Controller of A

WHen I run the application I get the error

<b>External Mapping for COMPONENT A # Name_of_Function_Module.IMPORTING.Attribute1 Not Complete Yet</b>

What am I missing here?

Thanks

Message was edited by:

SAP User

Accepted Solutions (0)

Answers (1)

Answers (1)

former_member215843
Active Participant
0 Kudos

Hi Anand,

Just try to switch off the IsInputElement of the IMPORTING node.

This node is a subnode of the mapping node Name_Of_Function_Module. And the whole subtree is automatically mapped. So there is no need to explicitely declare the subnode as mapping, and the framework tries to find the original node for the IMPORTING.

Ciao, Regina

Former Member
0 Kudos

Thanks Regina,

In my case, I have to have the IMPORTING Node and NAME_OF_FUNC_MODULE node as isInputElement = 'X' because the values for the Importing parameters comes from the outer component .

The <b>CHANGING</b> Node<b> does not</b> have isInputElement = 'X' because the data flow is from the Imterface Controller of Component B to the Component Controller of Component A.

The problem was that I had wrongly marked the Node for Component Controller of Component A, which is mapped to the View COntroller of A, as isInputElement = 'X'. I removed that and it worked fine..

In a nut shell, the followiing holds true for External Mapping

1) The SOURCE of data is ALWAYS from outer Component to Inner Component, that is for Eg: from the COmponent Controller of Component A to the Interface Controller of COmponent B, if A Embeds B

2) The Controller Usage of Component A has to be declarred withing that of the Interface Controller of B (and not the other way..THIS IS IMPORTANT, since the source of data is the Component Controller of A, so B has to Use A and not Vice-Versa)

3) The Source of data for Nodes with isInputElement <b>=</b> 'X' is always the COmponent Controller (or Custom COntroller) of the OUTER Component, while that with isInputElement <b>NOT EQUAL</b> 'X' is the Interface Controller of the INNER Component

Regina, Pls input ur comments

former_member215843
Active Participant
0 Kudos

Hi,

With context mapping there is nothing like <i>data flow</i>. If one node maps to another (independent whether normal mapping or external mapping) there is only one piece of memory where the data is stored and all mapping nodes and the original node refer to this memory. If either of the node content is changed, the other is automatically changed, because it is the same.

Your statements 1) - 3) are not correct, it is quite the opposite:

- A is the outer component and embeds B, then A has a component usage of the B.

- You declare the node in A quite normal, e.g. in your component controller.

- You declare the node in the component controller of B with "IS_INTERFACE = X" and "IS_INPUT = X".

- Then you go to component A, choose the compent usage of B in the navigation tree of component A, expand it and there you declare the mapping. Declare the component controller (A) as the used controller, then you see it on the right.

Drag the node from the right to the node on the left, and the mapping is declared correctly.

Ciao, Regina

Former Member
0 Kudos

Well in External Mapping, the Component Controlelr of EMbedder IS ALWAYS the source.... that is why external mapping is required isnt it...

so if the Externnal Component is the source then the controller usage of external component has to be declared within that of the internal component....

I did the opposite the first time around (that is declared Controller usage of B in Controller A) and got error message External Mapping not complete yet....

A uses B does not mean that the Controller usage of A uses B.....

Former Member
0 Kudos

> - Then you go to component A, choose the compent

> usage of B in the navigation tree of component A,

> expand it and there you declare the mapping. Declare

> the component controller (A) as the used controller,

> then you see it on the right.

Infact I just realized you just stated what I am saying....that is declare usage of Component A in the Interface Controller of B.

It seems we are on same page here

Former Member
0 Kudos

> Infact I just realized you just stated what I am

> saying....that is declare usage of Component A in the

> Interface Controller of B.

>

OOPS Should be declare CONTROLLER USAGE of COmponent Controller of A in the Interface COntroller of Component B, within the Component Usage of Component A =:)