Table of Contents

rm34449 Anwender vermisst die Einträge in der "Customer Group" in EDI Integration

rm34449 Anwender vermisst die Einträge in der "Customer Group" in EDI Integration

Daten

TUSER_SCD.cDisplayname: salvid4
TUSER_SCD.cUniqueID: SMA0000N21IJ

Reproduzieren

Idee von Viktor:

Nützliche SQL Befehle (lokal!):

-- locally I've used the schedule with id=185
SELECT * FROM TAIREDISCHEDULER 
WHERE CID=185
ORDER BY cID DESC
 
-- originally CCUSTGROUPID was null
UPDATE TAIREDISCHEDULER SET CCUSTGROUPID=2034967 WHERE cID=185;
 
-- get the customer group with id 2034967
SELECT * FROM SEESCMDB0.TORGANIZATION_SCD WHERE cid=2034967;

Remote we have the problem for example with the schedule 1018:

SELECT * FROM SEESCMDB0.TAIREDISCHEDULER WHERE cID=1018;
 
-- 2034967 delivers "STELIA AEROSPACE"
SELECT * FROM SEESCMDB0.TORGANIZATION_SCD WHERE cid=2034967;
 
SELECT SEESCMDB0.TAIREDISCHEDULER.CID,CJOBIDREF,CACTIVE,CMESSAGETYPE,CCOMMENT, 
    TAIREDISCHEDULER.CCUSTGROUPID, TORGANIZATION_SCD.CNAME CCUSTGROUPNAME, 
    TAIREDISCHEDULER.CSUPPLIERCPID,TCONTROLPOINT_SCD.CNAME CSUPPLIERCPNAME,TCONTROLPOINT_SCD.CPSIPARTNER, 
  CSTARTDATE,CSTARTTIME,CFREQUENCY,CFREQUENCYUNIT,CMONDAY,CTUESDAY,CWEDNESDAY,CTHURSDAY,CFRIDAY,CSATURDAY,CSUNDAY 
FROM SEESCMDB0.TAIREDISCHEDULER 
JOIN SEESCMDB0.TCONTROLPOINT_SCD ON (TAIREDISCHEDULER.CSUPPLIERCPID = TCONTROLPOINT_SCD.CCPID) 
LEFT JOIN SEESCMDB0.TORGANIZATION_SCD ON (TORGANIZATION_SCD.CID = TAIREDISCHEDULER.CCUSTGROUPID) 
WHERE 1=1 
AND SEESCMDB0.TAIREDISCHEDULER.CID=1018;
-- get CP ids for user 'salvid4' = SMA0000N21IJ
SELECT SEESCMDB0.tOrganization_SCD.cStatus AS cOrgStatus,
      SEESCMDB0.tOrganization_SCD.cOrgCode, 
      SEESCMDB0.tCPUser_SCD.cCPID, 
      SEESCMDB0.tUser_SCD.*,
      SEESCMDB0.tCPUser_SCD.cNotification 
      FROM SEESCMDB0.tUser_SCD 
      LEFT JOIN SEESCMDB0.tCPUser_SCD ON (SEESCMDB0.tUser_SCD.cUniqueID=SEESCMDB0.tCPUser_SCD.cUserID),SEESCMDB0.tOrganization_SCD
      WHERE SEESCMDB0.tUser_SCD.cOrganizationID=SEESCMDB0.tOrganization_SCD.cID AND SEESCMDB0.tUser_SCD.cUniqueID='SMA0000N21IJ';
 
-- then we get CPs 10007544 and 10017660
 
-- now we fetch all routings for these two cps
SELECT SEESCMDB0.tNetworkLink_SCD_New.cId, SEESCMDB0.tNetworkLink_SCD_New.cCPBYUERID, SEESCMDB0.tNetworkLink_SCD_New.cCPSELLERID, 
SEESCMDB0.tNetworkLink_SCD_New.CISUNREGSUPPLIER,SEESCMDB0.tNetworkSupplierInfo_SCD.cSellerNumber, 
SEESCMDB0.tNetworkSupplierInfo_SCD.cSellerPlant, cpbuyer.cOrgCode, cpbuyer.cPlantCode, cpseller.cName cpsellername, cpbuyer.cName cpbuyername, vNetworkCommunication_SCD.cLogicalFilename, vNetworkCommunication_SCD.cCommunicationType,  
orgseller.cId orgsellerid, orgseller.cName orgsellername, orgseller.cParentId orgsellerparentid,  orgbuyer.cId orgbuyerid, orgbuyer.cName orgbuyername, orgbuyer.cName3 orgbuyernameshort, orgbuyer.cParentId orgbuyerparentid,  
addressBuyer.cCity buyerCity, addressSeller.cCity sellerCity, tNetworkSupplierInfo_SCD.CDELETIONTIMESTAMP, cpseller.cName || '/' || addressSeller.cCity AS cSellerNameCity,  cpbuyer.cName || ' (' || cpbuyer.cPlantCode || ')' AS cBuyerNamePlantCode  
FROM SEESCMDB0.tNetworkLink_SCD_New, SEESCMDB0.tControlPoint_SCD cpseller, SEESCMDB0.tControlPoint_SCD cpbuyer, 
SEESCMDB0.tOrganization_SCD orgseller, SEESCMDB0.tOrganization_SCD orgbuyer, SEESCMDB0.vNetworkCommunication_SCD, 
SEESCMDB0.tNetworkSupplierInfo_SCD, SEESCMDB0.TCPADDRESS_SCD addressBuyer, SEESCMDB0.TCPADDRESS_SCD addressSeller 
WHERE 
orgbuyer.cID = cpbuyer.cOrganizationID 
AND orgseller.cID = cpseller.cOrganizationID  
AND cpbuyer.cCPID = SEESCMDB0.tNetworkLink_SCD_New.cCPByuerID 
AND cpseller.cCPID = SEESCMDB0.tNetworkLink_SCD_New.cCPSellerID 
AND SEESCMDB0.tNetworkLink_SCD_New.cID=vNetworkCommunication_SCD.cIDNetLink 
AND SEESCMDB0.tNetworkLink_SCD_New.cId=SEESCMDB0.tNetworkSupplierInfo_SCD.cNetworkLinkId 
AND addressBuyer.cCPID = tNetworkLink_SCD_New.cCPByuerID 
AND addressSeller.cCPID = tNetworkLink_SCD_New.cCPSellerID 
AND ROWNUM <= 5000  
AND (tNetworkLink_SCD_New.cCPSELLERID IN (10007544, 10017660))  
ORDER BY tNetworkLink_SCD_New.cID, cSellerNumber, vNetworkCommunication_SCD.cID;
 
 
-- this query delivers the proper (maybe) results
-- at least it delivers 7 entries
SELECT orgbuyer.* FROM SEESCMDB0.TORGANIZATION_SCD orgbuyer, SEESCMDB0.tControlPoint_SCD cpbuyer 
WHERE 
orgbuyer.cID = cpbuyer.cOrganizationID 
AND cpbuyer.ccpID IN (SELECT DISTINCT CCPBYUERID FROM SEESCMDB0.tNetworkLink_SCD_New WHERE CCPSELLERID IN (10007544, 10017660));
 
-- this query will be executed in reality (as SQL + Java) and delivers only 2 entries
SELECT DISTINCT cParentId FROM (
SELECT orgbuyer.* 
FROM SEESCMDB0.TORGANIZATION_SCD orgbuyer, SEESCMDB0.tControlPoint_SCD cpbuyer 
WHERE 
orgbuyer.cID = cpbuyer.cOrganizationID 
AND cpbuyer.ccpID IN (
 
SELECT DISTINCT CCPBYUERID FROM (
 
SELECT SEESCMDB0.tNetworkLink_SCD_New.cId, SEESCMDB0.tNetworkLink_SCD_New.cCPBYUERID, SEESCMDB0.tNetworkLink_SCD_New.cCPSELLERID, 
SEESCMDB0.tNetworkLink_SCD_New.CISUNREGSUPPLIER,SEESCMDB0.tNetworkSupplierInfo_SCD.cSellerNumber, 
SEESCMDB0.tNetworkSupplierInfo_SCD.cSellerPlant, cpbuyer.cOrgCode, cpbuyer.cPlantCode, cpseller.cName cpsellername, cpbuyer.cName cpbuyername, vNetworkCommunication_SCD.cLogicalFilename, vNetworkCommunication_SCD.cCommunicationType,  
orgseller.cId orgsellerid, orgseller.cName orgsellername, orgseller.cParentId orgsellerparentid,  orgbuyer.cId orgbuyerid, orgbuyer.cName orgbuyername, orgbuyer.cName3 orgbuyernameshort, orgbuyer.cParentId orgbuyerparentid,  
addressBuyer.cCity buyerCity, addressSeller.cCity sellerCity, tNetworkSupplierInfo_SCD.CDELETIONTIMESTAMP, cpseller.cName || '/' || addressSeller.cCity AS cSellerNameCity,  
cpbuyer.cName || ' (' || cpbuyer.cPlantCode || ')' AS cBuyerNamePlantCode  
FROM SEESCMDB0.tNetworkLink_SCD_New, SEESCMDB0.tControlPoint_SCD cpseller, SEESCMDB0.tControlPoint_SCD cpbuyer, 
SEESCMDB0.tOrganization_SCD orgseller, SEESCMDB0.tOrganization_SCD orgbuyer, SEESCMDB0.vNetworkCommunication_SCD, 
SEESCMDB0.tNetworkSupplierInfo_SCD, SEESCMDB0.TCPADDRESS_SCD addressBuyer, SEESCMDB0.TCPADDRESS_SCD addressSeller 
WHERE 
orgbuyer.cID = cpbuyer.cOrganizationID 
AND orgseller.cID = cpseller.cOrganizationID  
AND cpbuyer.cCPID = SEESCMDB0.tNetworkLink_SCD_New.cCPByuerID 
AND cpseller.cCPID = SEESCMDB0.tNetworkLink_SCD_New.cCPSellerID 
AND SEESCMDB0.tNetworkLink_SCD_New.cID=vNetworkCommunication_SCD.cIDNetLink 
AND SEESCMDB0.tNetworkLink_SCD_New.cId=SEESCMDB0.tNetworkSupplierInfo_SCD.cNetworkLinkId 
AND addressBuyer.cCPID = tNetworkLink_SCD_New.cCPByuerID 
AND addressSeller.cCPID = tNetworkLink_SCD_New.cCPSellerID 
AND ROWNUM <= 5000  
AND (tNetworkLink_SCD_New.cCPSELLERID IN (10007544, 10017660))  
ORDER BY tNetworkLink_SCD_New.cID, cSellerNumber, vNetworkCommunication_SCD.cID
)
)
);

Die Ursache für das Problem scheint die Anzahl der Einträge in der Tabelle tNetworkLink_SCD_New zu sein:

-- this query delivers 1356705  => much more than 5000
SELECT COUNT(*) FROM SEESCMDB0.tNetworkLink_SCD_New;
 
-- the query which was used, delivers 8421 => unfortunately also more than 5000 
SELECT COUNT(*) FROM (
SELECT SEESCMDB0.tNetworkLink_SCD_New.cId, SEESCMDB0.tNetworkLink_SCD_New.cCPBYUERID, SEESCMDB0.tNetworkLink_SCD_New.cCPSELLERID, 
SEESCMDB0.tNetworkLink_SCD_New.CISUNREGSUPPLIER,SEESCMDB0.tNetworkSupplierInfo_SCD.cSellerNumber, 
SEESCMDB0.tNetworkSupplierInfo_SCD.cSellerPlant, cpbuyer.cOrgCode, cpbuyer.cPlantCode, cpseller.cName cpsellername, cpbuyer.cName cpbuyername, vNetworkCommunication_SCD.cLogicalFilename, vNetworkCommunication_SCD.cCommunicationType,  
orgseller.cId orgsellerid, orgseller.cName orgsellername, orgseller.cParentId orgsellerparentid,  orgbuyer.cId orgbuyerid, orgbuyer.cName orgbuyername, orgbuyer.cName3 orgbuyernameshort, orgbuyer.cParentId orgbuyerparentid,  
addressBuyer.cCity buyerCity, addressSeller.cCity sellerCity, tNetworkSupplierInfo_SCD.CDELETIONTIMESTAMP, cpseller.cName || '/' || addressSeller.cCity AS cSellerNameCity,  
cpbuyer.cName || ' (' || cpbuyer.cPlantCode || ')' AS cBuyerNamePlantCode  
FROM SEESCMDB0.tNetworkLink_SCD_New, SEESCMDB0.tControlPoint_SCD cpseller, SEESCMDB0.tControlPoint_SCD cpbuyer, 
SEESCMDB0.tOrganization_SCD orgseller, SEESCMDB0.tOrganization_SCD orgbuyer, SEESCMDB0.vNetworkCommunication_SCD, 
SEESCMDB0.tNetworkSupplierInfo_SCD, SEESCMDB0.TCPADDRESS_SCD addressBuyer, SEESCMDB0.TCPADDRESS_SCD addressSeller 
WHERE 
orgbuyer.cID = cpbuyer.cOrganizationID 
AND orgseller.cID = cpseller.cOrganizationID  
AND cpbuyer.cCPID = SEESCMDB0.tNetworkLink_SCD_New.cCPByuerID 
AND cpseller.cCPID = SEESCMDB0.tNetworkLink_SCD_New.cCPSellerID 
AND SEESCMDB0.tNetworkLink_SCD_New.cID=vNetworkCommunication_SCD.cIDNetLink 
AND SEESCMDB0.tNetworkLink_SCD_New.cId=SEESCMDB0.tNetworkSupplierInfo_SCD.cNetworkLinkId 
AND addressBuyer.cCPID = tNetworkLink_SCD_New.cCPByuerID 
AND addressSeller.cCPID = tNetworkLink_SCD_New.cCPSellerID 
--AND ROWNUM <= 5000  
AND (tNetworkLink_SCD_New.cCPSELLERID IN (10007544, 10017660))  
ORDER BY tNetworkLink_SCD_New.cID, cSellerNumber, vNetworkCommunication_SCD.cID
);

Der Filter, der die Begrenzung nach ROWNUM verursacht, wird in der Methode RoutingDAOImpl.getRoutingsByFilter() ausgewertet.