Category: Component Interface

Explorations in Component Interface: Handling Component Interface Errors

This is a continuation of the following posts:

The plan this time is to try to see how well we can handle errors.  I have been having trouble with some of my production programs crashing when I have taken all the necessary steps to trap and handle the error.  So, we’ll see how this goes …

Read More

Component Interfaces Explorations: Security

This is part two of the explorations in component interfaces.  Before we can do anything with the Component Interface that we created in part one, we have to make sure that we have security to it.  Maybe at some point we can explore what happens when we don’t have security, but for now let’s fix it before it breaks.

So, if you haven’t already created the component interface, head over to part one first, and build the CI.  Then, you can setup the security.

The first thing you must know is which permission list you need to attach to.  Normally, your security would decide this.  You could create one permission list for all of the component interfaces in the system and grant that to everyone — I mean, the user can’t use the component interface unless they have access to the process or page that uses it.  Or, you could attach the component interface to the same permission list that gives the user access to the corresponding page or process.

In this case, we are just going to pick any one of the permission lists we have access to.  This is an experiment anyway, not a production thing.

First, open the User Profile for the Operator ID you use to connect — PeopleTools > Security > User Profiles > User Profiles.  Go to the Roles tab, and pick any one of the Roles.  I am picking the PeopleSoft User role:

Selection_810

Clicking the View Definition link will take you to the Role.  Then, click on the Permission Lists page and choose one of the permission lists in the list.  In my case, there is only one, so I clicked the View Definition on that one:

Selection_811

Now, that you are on the Permission List, you need to go to the Component Interfaces tab/page.  Then, add the component interface name that you created in part one.

Selection_812

If you save at this point, you haven’t done anything.  PeopleTools will remove it from the permission list because you haven’t given it any access yet.  Make sure that you click the Edit link and click the Full Access button:

Selection_813

Finally, make sure that you click Ok and Save to save the component interface.  You may want to re-open that permission list, and make sure that it saved the change.

Now you have security.  Stay tuned for writing some code to make it work…

Explorations in Component Interface

This is part one of a multi-part series exploring some quirks in using Component Interfaces with Application Engine programs.  If nothing else, hopefully, these will give new developers some insight into how to use a Component Interface.  My goal is to expose a bug in the Application Engine tool that maybe Oracle will see and fix.

This first part will simply walk you through creating a Component Interface.  This part is just a map to associate the fields on the screen (or really in the component’s buffer) with an API property that can be accessed with code.

First, we create a new definition in Application Designer.  You can either use the Ctrl + N keyboard shortcut or the File > New menu.  Choose Component Interface from the list:

New Object List in App Designer

Next, have no fear — you will see the open dialog making it look like you want to open a component.  Really, Application Designer is just asking you which component you want to map.  In this example, we will use the “PERSONAL_DATA” component, which is the Modify a Person screen (Workforce Administration > Personal Information > Modify a Person):

Pick the Component

Next, Application Designer asks you if you want to default the properties.  I almost always say yes to this questions because it will make Application Designer do all the work for you in generating the map.  The properties will be given names based on their field names in the buffer:

Yes to Default the Properties

Now, you should have a new component interface generated for you.  Notice that the left side is the Component Structure.  It is the same as the Structure tab on the Component itself.  The right side is the map of record/field to property name.  In this screenshot, I have the component open in the background and I drew a line to show how the structure is the same.  Then, I drew a line from the structure to the property generated for one of the fields:

How the fields map to properties

Finally, save the component interface.  You can either use the Ctrl + S keyboard shortcut, or you can use the File > Save menu.  I gave it the name BLG_PERS_DTA_CI.

Save Dialog

While your at it, you may also want to add it to the project.  You can use the F7 keyboard shortcut or the Insert > Current Definition Into Project menu.

This concludes creating the Component Interface.  Please stay tuned for the next steps …

PeopleTools Bug: Job Data CI

This is another look at an old post.  In summary, the problem is that when you create a Component Interface for the Job Data component, PeopleTools errors.  I decided to attempt to diagnose the PeopleTools bug by tracing it.

I tried this in PeopleTools 8.49.

Here are the last lines of the trace file:

1-8280 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-1 type=2 length=11 value=SKP_JOB2_CI

1-8281 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-2 type=6 length=4 value=4

1-8282 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-3 type=2 length=6 value=JOB_JR

1-8283 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-4 type=2 length=17 value=CONT_SAL_TYPE_BRA

1-8284 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-5 type=6 length=4 value=536

1-8285 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-6 type=6 length=4 value=1

1-8286 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-7 type=6 length=4 value=2

1-8287 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-8 type=6 length=4 value=0

1-8288 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-9 type=2 length=17 value=00-00-01-00-02-00

1-8289 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-10 type=2 length=6 value=JOB_JR

1-8290 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-11 type=2 length=0 value=

1-8291 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-12 type=2 length=17 value=CONT_SAL_TYPE_BRA

1-8292 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-13 type=2 length=0 value=

1-8293 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-14 type=6 length=4 value=0

1-8294 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-15 type=6 length=4 value=25008

1-8295 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-1 type=2 length=11 value=SKP_JOB2_CI

1-8296 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-2 type=6 length=4 value=4

1-8297 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-3 type=2 length=6 value=JOB_JR

1-8298 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-4 type=2 length=11 value=DUTIES_TYPE

1-8299 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-5 type=6 length=4 value=523

1-8300 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-6 type=6 length=4 value=1

1-8301 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-7 type=6 length=4 value=2

1-8302 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-8 type=6 length=4 value=0

1-8303 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-9 type=2 length=17 value=00-00-01-00-02-00

1-8304 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-10 type=2 length=6 value=JOB_JR

1-8305 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-11 type=2 length=0 value=

1-8306 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-12 type=2 length=11 value=DUTIES_TYPE

1-8307 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-13 type=2 length=0 value=

1-8308 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-14 type=6 length=4 value=0

1-8309 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-15 type=6 length=4 value=25009

1-8310 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-1 type=2 length=11 value=SKP_JOB2_CI

1-8311 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-2 type=6 length=4 value=4

1-8312 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-3 type=2 length=6 value=JOB_JR

1-8313 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-4 type=2 length=14 value=INTCP_BUS_UNIT

1-8314 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-5 type=6 length=4 value=512

1-8315 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-6 type=6 length=4 value=1

1-8316 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-7 type=6 length=4 value=2

1-8317 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-8 type=6 length=4 value=0

1-8318 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-9 type=2 length=17 value=00-00-01-00-02-00

1-8319 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-10 type=2 length=6 value=JOB_JR

1-8320 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-11 type=2 length=0 value=

1-8321 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-12 type=2 length=14 value=INTCP_BUS_UNIT

1-8322 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-13 type=2 length=0 value=

1-8323 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-14 type=6 length=4 value=0

1-8324 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-15 type=6 length=4 value=25010

1-8325 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-1 type=2 length=11 value=SKP_JOB2_CI

1-8326 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-2 type=6 length=4 value=4

1-8327 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-3 type=2 length=6 value=JOB_JR

1-8328 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-4 type=2 length=13 value=INTCP_COMPANY

1-8329 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-5 type=6 length=4 value=516

1-8330 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-6 type=6 length=4 value=1

1-8331 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-7 type=6 length=4 value=2

1-8332 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-8 type=6 length=4 value=0

1-8333 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-9 type=2 length=17 value=00-00-01-00-02-00

1-8334 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-10 type=2 length=6 value=JOB_JR

1-8335 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-11 type=2 length=0 value=

1-8336 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-12 type=2 length=13 value=INTCP_COMPANY

1-8337 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-13 type=2 length=0 value=

1-8338 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-14 type=6 length=4 value=0

1-8339 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-15 type=6 length=4 value=25011

1-8340 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-1 type=2 length=11 value=SKP_JOB2_CI

1-8341 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-2 type=6 length=4 value=4

1-8342 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-3 type=2 length=6 value=JOB_JR

1-8343 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-4 type=2 length=14 value=INTCP_COMPANY2

1-8344 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-5 type=6 length=4 value=517

1-8345 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-6 type=6 length=4 value=1

1-8346 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-7 type=6 length=4 value=2

1-8347 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-8 type=6 length=4 value=0

1-8348 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-9 type=2 length=17 value=00-00-01-00-02-00

1-8349 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-10 type=2 length=6 value=JOB_JR

1-8350 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-11 type=2 length=0 value=

1-8351 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-12 type=2 length=14 value=INTCP_COMPANY2

1-8352 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-13 type=2 length=0 value=

1-8353 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-14 type=6 length=4 value=0

1-8354 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-15 type=6 length=4 value=25012

1-8355 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-1 type=2 length=11 value=SKP_JOB2_CI

1-8356 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-2 type=6 length=4 value=4

1-8357 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-3 type=2 length=6 value=JOB_JR

1-8358 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-4 type=2 length=12 value=INTCP_DEPTID

1-8359 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-5 type=6 length=4 value=513

1-8360 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-6 type=6 length=4 value=1

1-8361 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-7 type=6 length=4 value=2

1-8362 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-8 type=6 length=4 value=0

1-8363 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-9 type=2 length=17 value=00-00-01-00-02-00

1-8364 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-10 type=2 length=6 value=JOB_JR

1-8365 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-11 type=2 length=0 value=

1-8366 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-12 type=2 length=12 value=INTCP_DEPTID

1-8367 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-13 type=2 length=0 value=

1-8368 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-14 type=6 length=4 value=0

1-8369 06.50.28 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-15 type=6 length=4 value=25013

1-8370 06.50.32 3.335000 CMgrUpdateTransaction::OnAbort

1-8371 06.50.32 0.000000 CMgrUpdateTransaction::OnAbort

1-8372 06.50.32 0.111000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 COM Stmt=SELECT DISPLAYONLY FROM PSOPROBJ A, PSOBJGROUP B WHERE B.ENTTYPE = :1 AND B.ENTNAME = :2 AND A.CLASSID = :3 AND (A.OBJGROUPID = '*ALL DEFINITIONS*' OR A.OBJGROUPID = B.OBJGROUPID) UNION SELECT 2 FROM PSOBJGROUP WHERE ENTTYPE = :4 AND ENTNAME = :5 ORDER BY 1

1-8373 06.50.32 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 SSB column=1 type=6 length=4 scale=0

1-8374 06.50.32 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-1 type=1 length=1 value=D

1-8375 06.50.32 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-2 type=2 length=1 value=

1-8376 06.50.32 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-3 type=2 length=7 value=HCPPALL

1-8377 06.50.32 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-4 type=1 length=1 value=D

1-8378 06.50.32 0.000000 Cur#1.4240.HCM90 RC=0 Dur=0.000000 Bind-5 type=2 length=1 value=

1-8379 06.50.32 0.001000 Cur#1.4240.HCM90 RC=1 Dur=0.000000 Fetch

1-8380 06.50.35 3.214000 Tuxedo session opened { DisconnectAll at01C88868, pid=4240}

Here is the insert statement that the error message reported:

INSERT INTO PSBCITEM ( 
    BCNAME, BCTYPE, BCITEMPARENT, BCITEMNAME, 
    SEQUENCE_NBR_6, BCACCESS, BCSCROLL, BCSCROLLNUM, 
    BCSCROLLNAME, RECNAME, SUBRECNAME, FIELDNAME, COMMENTSHORT, 
    MPDEVICEPERSISTINT, SYNCID
) VALUES ( 
    :1, :2, :3, :4, 
    :5, :6, :7, :8, 
    :9, :10, :11, :12, :13, 
    :14, :15
)

So, I looked up the table, and the keys are the first four fields: BCNAME, BCTYPE, BCITEMPARENT, and BCITEMNAME.

Assuming the last row is the duplicate, that means that another row has the same parent and name as:

Type = 4

Parent = JOB_JR

Item Name = INTCP_DEPTID

I did a search through the trace, and the INTCP_DEPTID only exists in this one location.  So, I don’t know what the problem is — our mystery goes unsolved.  What makes it more confusing is that saving a second time fixes the problem.

Maybe I will pull all of the Bind values into an Excel and see if I can find duplicates that way.  But, that is an exercise for another day.

PeopleTools Bug: Job Data Component Interface

If you create a basic component interface on JOB_DATA allowing Application Designer to default all of the properties, Application Designer generates a unique constraint error the first time you try to save the new component interface.

Reproducing the Bug

File > New … Component Interface

Pick a Component: JOB_DATA

Do you want to default the properties on the underlying Component definition: JOB_DATA? Yes

File > Save … Enter any name

Error Message


File: e:\pt849-903-R1-retail\peopletools\SRC\psmgr\mgrgensql.cppSQL error. Stmt #: 1741 Error Position: 0 Return: 805 - ORA-00001: unique constraint (SYSADM.PS_PSBCITEM) violated
Failed SQL stmt:INSERT INTO PSBCITEM ( BCNAME, BCTYPE, BCITEMPARENT, BCITEMNAME, SEQUENCE_NBR_6, BCACCESS, BCSCROLL, BCSCROLLNUM, BCSCROLLNAME, RECNAME, SUBRECNAME, FIELDNAME, COMMENTSHORT, MPDEVICEPERSISTINT, SYNCID) VALUES ( :1, :2, :3, :4, :5, :6, :7, :8, :9, :10, :11, :12, :13, :14, :15)

Workaround

Just save it a second time.

File > Save … Enter any name

I don’t know why but it just worked the second time.

PeopleTools Tip: Finding a Component Interfaces

If you know the name of the component interface, you can easily find it in App Designer.  Just press Ctrl+O or File > Open and search for it by name.  But, what if you only know the name of the component that the component interface accesses?

You have to go to the database.  Try this SQL (replacing <Component_Name> with your actual component) :

SELECT * FROM PSBCDEFN
WHERE BCPGNAME = '<Component_Name>'

PeopleTools Tip — Cloning a Component Interface

Have you ever tried to recreate a component interface and allow PeopleSoft to default the properties and collections? The hard part is that you have to make sure that it uses the same names as your old one or you will have to change your code.

The following SQL helped me figure how to change my code to refer to the correct fields (ex. effdt or effdt0). I was cloning the delivered CI_JOB_DATA component interface with a brand new customized component interface.


SELECT A.BCNAME, A.BCTYPE || ‘:’ || A.BCSCROLL || ‘:’ || A.BCSCROLLNUM || ‘->’ || A.BCSCROLLNAME LOC, A.BCITEMPARENT, A.BCITEMNAME,
A.RECNAME, A.FIELDNAME,
B.BCNAME, B.BCTYPE || ‘:’ || B.BCSCROLL || ‘:’ || B.BCSCROLLNUM || ‘->’ || B.BCSCROLLNAME LOC, B.BCITEMPARENT, B.BCITEMNAME
FROM PSBCITEM A, PSBCITEM B, PSBCITEM AP, PSBCITEM BP
WHERE A.BCNAME = ‘<Old component interface name>
AND A.BCNAME = AP.BCNAME(+)
AND B.BCNAME = ‘<New component interface name>
AND B.BCNAME = BP.BCNAME(+)
AND A.BCITEMPARENT = AP.BCITEMNAME(+)
AND B.BCITEMPARENT = BP.BCITEMNAME(+)
AND A.RECNAME = B.RECNAME
AND A.FIELDNAME = B.FIELDNAME
AND (BP.RECNAME = AP.RECNAME OR (BP.RECNAME IS NULL AND AP.RECNAME IS NULL))
AND A.BCITEMPARENT = ‘<Parent collection name>
AND A.BCITEMNAME = ‘<Item name>

Examples:
<Old component interface name> — CI_JOB_DATA
<Parent collection name> — COLL_JOB_EARNS_DIST
<Item name> — KEYPROP_ERNCD