on 07-24-2006 9:58 PM
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());
}
....
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
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
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
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
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
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
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.
User | Count |
---|---|
92 | |
11 | |
10 | |
9 | |
9 | |
7 | |
6 | |
5 | |
4 | |
4 |
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.