Kişi bilgileri gizlidir. Logo çalışanları görebilir.

Controller hata yönetimi

  j-Platform/LPT

Controller ile yapılan aktarımlar sırasında karşılaşılan hataları, aktarım işlemi yarıda kesilmeden kaydet işlemi sonrasında  liste şeklinde nasıl alabilirim?


controller hata yönetimi hata listesi


Kişi bilgileri gizlidir. Logo çalışanları görebilir.
Onaylanmış Cevap

LbsMenuController üzerindeki "getControllerRegistry()" metodu ile "ControllerRegistry" nesnesine ulaşırız.. ControllerRegistry üzerinde ise, "setCollectExceptionsDontThrow(true);" metodu bulunmakta. Bu metodu "true" parametresi ile çalıştırdığımızda controller artık exception throw etmek yerine, oluşan exceptionları bir collection içerisinde toplamaya başlayacak( "menu.getControllerRegistry().setCollectExceptionsDontThrow(true);" ). 
Controller'ın işi bittikten sonra, yine ControllerRegistry üzerindeki "getCollectedExceptions()" metodu ile toplanan exceptionları alabilirsiniz. 
( "menu.getControllerRegistry().getCollectedExceptions();" ) 

 

package com.LPT.customization;


import java.math.BigDecimal;
import java.util.Vector;

import com.lbs.control.interfaces.ILbsController;
import com.lbs.controllers.ILbsControllerTask;
import com.lbs.controllers.gen.lo.LOXFDispatchBrowserController;
import com.lbs.controllers.gen.lo.LOXFDispatchController;
import com.lbs.controllers.gen.lo.LOXFDispatchController.TransactionsGridRowData;
import com.lbs.controllers.menu.LbsMenuController;
import com.lbs.remoteclient.IClientContext;

public class ControllerWholeSaleDispatch implements ILbsControllerTask {

    public void execute(final LbsMenuController menu, final IClientContext context) {
        Vector < Throwable > collectedExceptions = null;
        try {
            ILbsController controller = menu.launchSalesDispatches();
            menu.getControllerRegistry().setCollectExceptionsDontThrow(true);
            if (controller instanceof LOXFDispatchBrowserController) {
                LOXFDispatchBrowserController controller1 = (LOXFDispatchBrowserController) controller;
                controller = controller1.createNew_08WholesaleDispatch();

                if (controller instanceof LOXFDispatchController) {
                    LOXFDispatchController controller2 = (LOXFDispatchController) controller;
                    controller2.setOrgUnit("01");
                    controller2.setWarehouse("01.01.02");
                    controller2.setAR_APCode("1");

                    TransactionsGridRowData rowData1 = controller2.getTransactionsGridRowData(0);
                    rowData1.setCode("1");
                    rowData1.setQuantity(new BigDecimal(1.0));
                    rowData1.setUnitPrice(new BigDecimal(100.0));

                    controller2.clickSave();
                }
                controller1.clickClose();

            }
        } catch (Exception e) {
            //TODO handle your exceptions 
            System.out.println(e.getLocalizedMessage());
        } finally {
            collectedExceptions = menu.getControllerRegistry().getCollectedExceptions();
            if (collectedExceptions != null && collectedExceptions.size() > 0) {

                for (int i = 0; i < collectedExceptions.size(); i++) {
                    Throwable exception = collectedExceptions.get(i);
                    System.out.println(exception.getLocalizedMessage());
                }
            }

        }
    }
}

 

 

 

 


21/01/16 11:59


Kişi bilgileri gizlidir. Logo çalışanları görebilir.

Merhaba,

Bu yapıda clickSave işlemi başarılı olmaz ise hata throw edecekmi? etmeyecek ise true/false bir değer dönmeliki işlemin neticesini bilelim. edecek ise sorun görünmüyor.

menu.getControllerRegistry().getCollectedExceptions() nesnesi hangi durumlarda kendisini sıfırlayacak.

Koddan paralel controller nesnesi kullanımı yaparken hata listesini nasıl ayrıştıracağız. Örneğin fatura controller'ı açıkken kasa tahsilat contoller'ına dallanıp nakit tahsilat kaydetme ve sonrasında faturanın işlemlerine devam etme gibi. yada çek senet tahsilat aktarımlarındaki iç içe controller kullanımları mevcut. bunlar ne olacak. bu hata listesi açılan controller nesnesi üzerinde erişilen o nesneye özel bir liste olsa daha iyi olur sanki.

Server tarafında bir çok kullanıcı controller ile aktarımlar çalışıtırıyor, aynı kullanıcı pararlel aktarımlar çalıştırabiliyor. Bu durumlarda hata listesinin durumu ne olur, hatalar bir birine geçermi?


21/01/16 12:36


Kişi bilgileri gizlidir. Logo çalışanları görebilir.

Merhaba

  • clikSave'den hemen önce hata listesinin kopyasını alınıp setCollectExceptionsDontThrow(false) set edilip kapatılırsa kaydetme işlemi başarılı olmaması durumunda hata yakalanabilir. Bu sayede  hem karşılaşılan hata listesine ulaşılabilir hem de kaydetme işlemindeki hata yakalanabilir.
collectedExceptions = (Vector) controller2.getControllerRegistry().getCollectedExceptions().clone();
controller2.getControllerRegistry().setCollectExceptionsDontThrow(false);
controller2.clickSave();
  • Silme setCollectExceptionsDontThrow() metodu her çağrıldığını clear ediliyor ama bu işlem "controller2.getControllerRegistry().getCollectedExceptions().clear()" ile istenen yerde yapılabilir.

 

  • Controller nesneleri üzerinden de hataların throw edilip edilmeyeceği belirlenebilir. Örnekteki irsaliye controller nesnesi için "controller1.getControllerRegistry().setCollectExceptionsDontThrow(true)" kullanılabilir. Bu şekilde her controller nesnesi kendi exception listesini tutar ve hata listeleleri ayrıştırılabilir.

 

 


21/01/16 15:34

Cevap vermek için giriş yapmanız gerekmektedir.