cancel
Showing results for 
Search instead for 
Did you mean: 

Retrieving data from Qualified table using Java Api

Former Member
0 Kudos

Retrieving data from Qualified table using Java Api

I can not seem to retrieve data from a qualified table correctly. Does anyone have any suggestions what I may be doing wrong?

Here the scenario. I need to retrieve all fields from a Partner Function qualifies lookup table for a given Customer Number.

Main Table: Customers

Search Field Customer Number within Customers table

Qualified Tablename: Partner Functions

Required retrieval fields (these fields are all part of the "Partner Functions" table.

1. Sales Organization non- qualified field

2. Distribution Channel non-qualified field

3. Division non-qualified field

4. Partner Function qualified field

5. Partner number qualified field

6. Partner Description qualified field

Below is the Java code

Search search = new Search("Customers");

FreeFormTableParameter freeFormTableParameter = new FreeFormTableParameter("Customers");

search.Add(freeFormTableParameter);

FreeFormParameterField fld = freeFormTableParameter.GetFields().New("Customer Number");

fld.GetFreeForm().NewString("0002101412", FreeFormParameter.EqualToSearchType);

freeFormTableParameter.Add(fld);

search.Add(freeFormTableParameter);

ResultSetDefinition rsd = new ResultSetDefinition(“Partner Functions");

rsd.AddField("Sales Organization");

rsd.AddField("Division");

rsd.AddField("Distribution Channel");

rsd.AddField("Partner Description");

rsd.AddField("Partner Function");

rsd.AddField("Partner Number");

rs = cat.GetResultSet(search, rsd, null, true, 0);

System.out.println("No. of records:" + rs.GetRecordCount());

for(int i=0;i<rs.GetRecordCount();i++)

{

try

{

Value v = rs.GetValueAt(i,"Sales Organization");

System.out.println(i+" v Sales Org " + v.TranslateToString());

v = rs.GetValueAt(i,"Division");

System.out.println(i+" v Div " + v.TranslateToString());

v = rs.GetValueAt(i,"Distribution Channel");

System.out.println(i+" v Distribution Channel " + v.TranslateToString()+"\n");

v = rs.GetValueAt(i,"Partner Function");

System.out.println(i+" v Partner Function " + v.TranslateToString());

}

....

Accepted Solutions (1)

Accepted Solutions (1)

Former Member
0 Kudos

Hi Dan,

You need to use CatalogData.GetQualifiedLinks to retrieve data from qualified tables (links from main table to qualified table).

Hope this helps,

Richard

Answers (1)

Answers (1)

Former Member
0 Kudos

Dan,

Hope the following psuedo code helps...

QualifiedLinkArray qualifiedLinkArray;

QualifiedLink qualifiedLink;

qualifiedLinkArray = catalog.GetQualifiedLinks(search, <Main Table>, <Qualified Lookup field in Main table>, recordId);

Value valueNQ1;

A2iField a2iField1;

ResultSetDefinition rsd = new ResultSetDefinition(<Qualified Table>);

rsd.AddField(<Non-Qualifier Field 1>);

A2iIntArray lookupIds = new A2iIntArray();

for (int i = 0; i < qualifiedLinkArray.GetSize(); ++i) {

qualifiedLink = qualifiedLinkArray.GetQualifiedLinkAt(i);

lookupIds.Add(qualifiedLink.GetLookupID());

A2iResultSet rs1 = catalog.GetRecordsById(rsd, lookupIds);

valueNQ1 = rs1.GetValueAt(0,<NQ1>);

A2iField a2iField1 = qualifiedLink.GetQualifiers().GetByName(<Qualifier Field 1);

String strName = a2iField1.GetValue().GetStringValue();

}

Regards,

Rajani Kumar

Former Member
0 Kudos

Thanks Rajani

The question I have is regarding the "recordid". I assume this is the recordid of the desired Customer record. I assume you must do a search for the desired customer record and then retrieve this recordid and feed it into the Qualified lookup. Is this correct?

Former Member
0 Kudos

Yes it is!

Richard

Former Member
0 Kudos

Is there a way to retrieve the distinct values from a Qualified field for a particular <i><b>category</b></i> instead of a productID? It is done this way in the Data Manager.

Former Member
0 Kudos

Try CatalogData.GetLimitedQualifierValues(Search search, java.lang.String applicationField, java.lang.String qualifierField)

Where the search has the criteria for the category.

Hope this helps,

Richard

Former Member
0 Kudos

I don't understand what "ApplicationField" is and "qualifierField"?

On the Products table I have a field that is a qualified lookup, it's called "Electrical specs". Is that the Application Field?

Former Member
0 Kudos

Yes

Former Member
0 Kudos

I receive a "not yet implemented" error when using the COM API.

Former Member
0 Kudos

Hi Mike,

Here's some code that worked for me. Here's the repository schema to help you understand the code.

Products - Main Table

- Category (Taxonomy Lookup) to Categories table

Categories - Taxonomy Table

- Category

Pricing (Qualified Flat)

- Currencies (Lookup Flat) to Currencies table

It retrieves all the referenced Currencies for Products in the Gloves category.

Dim s As XCATCOMLib.Search = New XCATCOMLib.SearchClass
s.SearchTable = "Products"

'Get the record ID for the Gloves category
Dim recordID As Integer = getRecordID("Categories", "Category", "Gloves")

Dim tlp As XCATCOMLib.TaxonomyLookupParameter = s.Parameters.NewTaxonomyLookupParameter("Products", "Category")
tlp.NodeID = recordID

Dim rsd As XCATCOMLib.ResultSetDefinition = New XCATCOMLib.ResultSetDefinitionClass
rsd.Table = "Products"

Dim rs As XCATCOMLib.ResultSet = catalog.GetResultSet(s, rsd)

Dim qualifiers As XCATCOMLib.QualifierEx = catalog.GetLimitedQualifierValues(s, "Pricing", "Currencies")
Return qualifiers

Hope this helps,

Richard

former_member207329
Participant
0 Kudos

Hi LeBlanc,

I have not understood this:

Dim recordID As Integer = getRecordID("Categories", "Category", "Gloves")

Where is the <b>getRecordID </b> methods???

thanks

Former Member
0 Kudos

Hi Rocco,

Here's the method.


Public Function getRecordID(ByVal table As String, ByVal field As String, ByVal value As String) As Integer
    Dim rsd As XCATCOMLib.ResultSetDefinition = New XCATCOMLib.ResultSetDefinitionClass
    rsd.Table = table
    rsd.Fields().Append(field, value)

    Dim values() As Object = New Object() {value}

    Dim rs As XCATCOMLib.ResultSet = catalog.GetRecordsByValue(values, rsd, field)
    If rs.RecordCount > 0 Then
        Return rs.ID
    End If

    Return -1

End Function

Regards,

Richard

Former Member
0 Kudos

I received the following from SAP:

Please note that for a Qualified table you can only

search in the Data Manager or COM API on a Boolean or

Lookup [Flat] fields. Searching on fields from the

types: Hierarchy,Taxonomy, Real and others under

Quailified table is not implemented as such the

GetLimitedQualifierValues on these fields returns a "Not

implemented yet" message.