TUSER_SCD.cDisplayname: salvid4
TUSER_SCD.cUniqueID: SMA0000N21IJ
Idee von Viktor:
sas.messagescheduler.scheduler.onMetaChange den Customer Group Eintrag der aktuellen Zeile (der aktuell gewählte) aus der Liste der Customer Groups löschen. Damit wird der aktuelle Eintrag nicht gefunden und der Code fliegt wahrscheinlich auf die Schnauze.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.