- 27.08.2008
- 8 015
- 613
Здесь буду излагать свой опыт, ибо в тырнетах документация скудная, как говорил Вини-Пух "оно хорошее, но почему-то хромает"
Есть всякие слайды "древние", в основном 2013-2014 гг
	
	
	
	
	
вебинар по ней
	
		
	
на гитхабе устаревший "местами" код и в современной ODA он даст ошибку компиляции - надо подправить получение сессии.
Логирование
В состав ODA уже включен OpenNTF logger, вызывается несколько иначе, чем изначально было без ODA
	
		
как пример, т.е. XspOpenLogUtil.log в 
	
по странному стечению - найти шаблон для БД оказалось трудной задачей, но на opnentf.org таки
без шаблона все не айс - доки будут а смотреть нечем
ODA регулярно ообновляется и развивается, для домино 9.0.1 ФП7 (т.е. <ФП8) версия д.б. 3.2.1 (последняя, по докам, новее требуют новее ФП)
Тем более странно - подробной документации, свежей, и слайдов нет
Из моих ощущений...
- легче прогать с доминошными объектами (можно забыть про recycle)
- удобно обновлять значения в доках - из хэшмапа
	
	
	
	
		
- логи снимают гимор с выводом информации и отладкой
- в логах подробно дается стек-трейс из xsp
	
	
	
	
		
т.е. _dump становится ненужным (да и толку отнего, при большом трейсе, нет)
				
			Есть всякие слайды "древние", в основном 2013-2014 гг
	Ссылка скрыта от гостей
	Ссылка скрыта от гостей
	Ссылка скрыта от гостей
	Ссылка скрыта от гостей
	Ссылка скрыта от гостей
 (которую с трудом, но завел, отдельная тема) и в слайдах на неё ссылаются (OpenNTF/org.openntf.domino)вебинар по ней
Логирование
В состав ODA уже включен OpenNTF logger, вызывается несколько иначе, чем изначально было без ODA
		Java:
	
	XspOpenLogUtil.logEvent(new Throwable(), classID, Level.INFO, null);
	Ссылка скрыта от гостей
 это отмеченопо странному стечению - найти шаблон для БД оказалось трудной задачей, но на opnentf.org таки
	Ссылка скрыта от гостей
без шаблона все не айс - доки будут а смотреть нечем

ODA регулярно ообновляется и развивается, для домино 9.0.1 ФП7 (т.е. <ФП8) версия д.б. 3.2.1 (последняя, по докам, новее требуют новее ФП)
Тем более странно - подробной документации, свежей, и слайдов нет
Из моих ощущений...
- легче прогать с доминошными объектами (можно забыть про recycle)
- удобно обновлять значения в доках - из хэшмапа
		Java:
	
	package com.setralubs;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.logging.Level;
import org.openntf.domino.Database;
import org.openntf.domino.Document;
import org.openntf.domino.Item;
import org.openntf.domino.Session;
import org.openntf.domino.View;
import org.openntf.domino.utils.Factory;
import org.openntf.domino.utils.Factory.SessionType;
import org.openntf.domino.xsp.XspOpenLogUtil;
public abstract class ODAItems {
    static final String[] AUTHORS = {"[author]"};//role for all doc authors
    static final String[] READERS = {"[DbReader]","[DbManager]"};
    static final String AVAIL_FOR_FLD="avail_for";//authors field for current user (document creator)
    //users and roles could change doc
    static final String AUTHORS_FLD="authors";//includes AUTHORS by default
    //could contains DB readers users, includes READERS by default
    static final String EDITORS_FLD="editors";//contains roles for reading (doc visibility for users with access level >=editor)
    private final Map <String,Object> access;
  
    Session ses;
    Database db;
    View view;
    private final String classID="::" + this.getClass().getName() + "::";
    String form;
    ODAItems(String viewName) {
        XspOpenLogUtil.logEvent(new Throwable(), classID, Level.INFO, null);
        ses = Factory.getSession();//SessionType.NATIVE
        db = ses.getCurrentDatabase();
        view = db.getView(viewName);
        access=fillAcess();
        if (view != null)
            view.setAutoUpdate(false);
        else
            XspOpenLogUtil.logErrorEx(null, classID+"view is null:"+viewName, Level.INFO, null);
    }
    Map<String,Object> fillAcess(){
        Map<String,Object> map=new HashMap<String,Object>();
        map.put(AVAIL_FOR_FLD,ses.getEffectiveUserName());
        map.put(AUTHORS_FLD,AUTHORS);
        map.put(EDITORS_FLD, READERS);
        return map;
    }
    Document setDefAccess(Document doc, String userName){
        Item item = doc.replaceItemValue(AUTHORS_FLD, AUTHORS);
        item.setAuthors(true);
        item = doc.replaceItemValue(AVAIL_FOR_FLD, userName);
        item.setAuthors(true);
        item = doc.replaceItemValue(EDITORS_FLD, READERS);
        item.setReaders(true);
        return doc;
    }
    /*
     * (non-Javadoc)
     *
     * @see com.setralubs.ODAItems#updateItem(java.util.Map)
     */
    public void updateItems(Map<String, Map<String, Object>> map) {
        /*
         * ViewNavigator nav = view.createViewNav(); nav.skip(1000000);
         *
         * System.out.println("CacheSize: " + nav.getCacheSize());
         */
        if (view != null) {
            Document doc = null;
            for (Entry<String, Map<String, Object>> flds : map.entrySet()) {
                doc = view.getFirstDocumentByKey(flds.getKey(), true);
                if (doc != null)
                    doc.putAll(flds.getValue());
                else
                    doc = db.createDocument(flds.getValue());
                doc.replaceItemValue("form",form);
                doc.putAll(access);
                doc.save();
            }
            // view.setAutoUpdate(true);
        }
    }
    /*
     * (non-Javadoc)
     *
     * @see com.setralubs.ODAItems#updateItem(java.lang.String, java.util.Map)
     */
    public void updateItem(String key, Map<String, String> value) {
        if (view != null && key!=null && !key.isEmpty()) {
            Document doc = null;
            doc = view.getFirstDocumentByKey(key, true);
            if (doc != null)
                doc.putAll(value);
            else
                doc = db.createDocument(value);
            doc.replaceItemValue("form",form);
            setDefAccess(doc, ses.getEffectiveUserName()).save();
        }
    }
  
    public Document setAccess(Document doc) {
      
        return doc;
    }
}- в логах подробно дается стек-трейс из xsp
		JavaScript:
	
	}catch(e){
  //_dump(e);
  org.openntf.domino.xsp.XspOpenLogUtil.logError(e);
}
			
				Последнее редактирование: 
				
		
	
										
										
											
	
										
									
								 
	 
	 
	 
	 
	 
 
		
 
 
		 
 
		 
 
		 
	