Performans yönetimi nedeniyle j-Platform’ da bir defada okunabilecek kayıt sayısı maximum "10.000" olarak belirlenmiştir.  Bu nedenle 10.000 ' den fazla kayıtla işlem yapmak gerektiğinde aşağıdaki yöntemlerle parçalara bölünebilir.


Query Execution Paging Yöntemleri

  • ServerQueryFactory2  sınıfındaki first ve next metotlarını kullanabiliriz. Burada dikkat edilmesi gereken query order olarak unique bir alanın kullanılmasıdır. Örneğimizde muhasebe hesap kodlarını 10' ar 10' ar okuma işlemi yapılmaktadır. İlk rowset okunduktan sonra,  sonraki grup için son kayıt bulunur ve next metoduna parametre olarak geçilir. Bu yöntemde veritabanına gidecek sorgu sayısı bir defada okunacak page size değerine bağlıdır.

    public static final int PAGE_SIZE = 10;
     
    public void executeServerQueryFactory(IServerContext context)
        {
            QueryBusinessObjects qbos = new QueryBusinessObjects();
            QueryParams param = new QueryParams();
            param.getParameters().put("P_ACCCHARTNR", Integer.valueOf(0));
            param.getEnabledTerms().enable("T5");
            boolean qryOk = false;
            IQueryFactory serverFactory = context.getServerQueryFactory();
            try
            {
                qryOk = serverFactory.first("GLRQGetAccountCode", param, qbos, PAGE_SIZE, false);
                while (qryOk)
                {
                    for (int i = 0; i < qbos.size(); i++)
                    {
                        QueryBusinessObject item = qbos.item(i);
                        //write your code...
                    }
                    QueryBusinessObject lastRec = qbos.get(qbos.size() - 1);
                    qryOk = serverFactory.next("GLRQGetAccountCode", param, qbos, PAGE_SIZE, lastRec, false);
                }
            }
            catch(Exception e)
            {
                e.printStackTrace();
            }
             
        }
  •  ServerCursorQueryFactory sınıfındaki first ve next metotlarını kullanabiliriz. Bu yöntemde veritabanına sorgu bir defa gönderilir fakat işlem verilen page size limitini kullanarak cursor üzerinden parçalara bölünür.

    public static final int PAGE_SIZE = 10;
    	
    	public void executeCursorQueryFactory(IServerContext context)
    	{
    		ServerCursorQueryFactory crsQryFactory = new ServerCursorQueryFactory(context);
            long qryID = ServerCursorQueryFactory.generateID();
            QueryParams params = new QueryParams();
            QueryBusinessObjects items = new QueryBusinessObjects();
            try
            {
                boolean okay = crsQryFactory.first(qryID, " GLRQGetAccountCode", params, items, PAGE_SIZE);
                boolean ended = !okay;
                while (!ended) {
                    for (int index = 0; index < items.size(); index++) {
                        QueryBusinessObject item = items.get(index);
                        // write your code here...
                    }
                    ended = items.size() < PAGE_SIZE;
                    if (!ended)
                    {
                        items = new QueryBusinessObjects();
                        okay = crsQryFactory.next(qryID, " GLRQGetAccountCode", items, PAGE_SIZE);
                        ended = !okay;
                    }
                }
            }
            catch (Exception e)
            {
                e.printStackTrace();
            }
            finally
            {
                crsQryFactory.closeCursors(qryID);
            }
    	}  
  • ServerCursorQueryFactory sınıfındaki nativeFirst ve nativeNext metotlarını kullanarak cursor yapısı ile native queryler çalıştırabiliriz.

    public static final int PAGE_SIZE = 10;
     
    public void executeCursorNativeQueryFactory(IServerContext context)
    	{
    		QueryBusinessObjects qbos = new QueryBusinessObjects();
    		QueryParams params = new QueryParams();
    		ServerCursorQueryFactory crsQryFactory = new ServerCursorQueryFactory(context);
    		long qryID = CursorIdGenerate.generateID();
    		boolean qryOk = false;
    		params.getVariables().put("firm", 1);
    		params.getVariables().put("period", 1);
    		String tableName = "U_$V(firm)_$V(period)_INVOICES";
    		String strSQL = " SELECT * FROM " + tableName;
    		try
    		{
    			qryOk = crsQryFactory.nativeFirst(qryID, strSQL, params, qbos, PAGE_SIZE);
    			if (qbos == null || qbos.size() == 0)
    			{
    				return;
    			}
    			while (qryOk)
    			{
    				for (int i = 0; i < qbos.size(); i++)
    				{
    					QueryBusinessObject item = qbos.item(i);
    					//write your code..
    				}
    				qryOk = crsQryFactory.nativeNext(qryID, qbos, PAGE_SIZE);
    			}
    		}
    		catch (Exception ex)
    		{
    			ex.printStackTrace();
    			return;
    		}
    		finally
    		{
    			crsQryFactory.closeCursors(qryID);
    		}
    	
    	}




Telif HakkıKullanım KoşullarıGizlilik
Copyright © 2018 Logo Yazılım