• Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

Проблема Не могу придумать универсальное средство для LS и SCJS

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 947
609
BIT
246
работа с массивами из ODA
Java:
    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()) {
                String key = flds.getKey();
                doc = view.getFirstDocumentByKey(key, true);
                if (doc != null)
                    //replace all values to new
                    if (!doc.entrySet().containsAll(flds.getValue().entrySet())) doc.putAll(flds.getValue());
                else {
                    //create doc with values (from flds map), set permissions and form
                    doc = db.createDocument(flds.getValue());
                    doc.replaceItemValue("form", form);
                    access.setDefAccess(doc, ses.getEffectiveUserName());
                }
                if (doc.save()) {
                    list.add(key);
                }
            }
            // view.setAutoUpdate(true);
        }
    }
    public void updateItem(String key, Map<String, Object> value) {
        if (view != null && key != null && !key.isEmpty()
                && !list.contains(key)) {
            Document doc = null;
            ViewEntry entry = view.getFirstEntryByKey(key, true);
            // doc = view.getFirstDocumentByKey(key, true);
            boolean bSave = false;
            if (entry != null) {
                bSave = !entry.getColumnValuesMap().entrySet().containsAll(
                        value.entrySet());
                // doc = entry.getDocument();
                // bSave = !doc.asDocMap().entrySet()
                // .containsAll(value.entrySet());
                if (bSave) {
                    doc = entry.getDocument();
                    logBody.appendText(entry.getColumnValuesMap().entrySet().toString());
                    // logBody.appendText(doc.asDocMap().entrySet().toString());
                    logBody.addNewLine();
                    if (isAppend) {
                        logBody.appendText("!append items");
                        logBody.addNewLine();
                        Map<String, Object> tmp = doc.asDocMap();
                        for (String k : value.keySet()) {
                            List<String> arr=new ArrayList<String>();
                            if (tmp.get(k) instanceof Collection<?>) {
                                arr.addAll((Collection<? extends String>) tmp.get(k));
                            }else if(tmp.get(k)!=null){
                                arr.add(tmp.get(k).toString());
                            }
                            if (value.get(k) instanceof Collection<?>) {
                                //for unique
                                List<String>lst=((List<String>) value.get(k));
                                arr.removeAll(lst);
                                arr.addAll(lst);
                            }else{
                                if(!arr.contains(value.get(k).toString()))arr.add(value.get(k).toString());
                            }
                            value.put(k,arr);
                        }
                    }
                    logBody.appendText("update doc with:");
                    doc.putAll(value);
                }
            } else {
                bSave = true;
                logBody.appendText("new doc with:");
                doc = db.createDocument(value);
                doc.replaceItemValue("form", form);
                access.setDefAccess(doc, ses.getEffectiveUserName());
            }
            if (bSave && doc.save()) {
                logBody.appendText(value.toString());
                logBody.appendDocLink(doc);
                logBody.addNewLine();
                list.add(key);
            }
        }
    }
без всяких recycle() и сразу с List и Map
про уникальность (я, выше, делал для 6-ой и не хотел терять порядок и использовать сторонние либы)
и, да - использование java классов из SSJS вполне получится
@Ficoos повторюсь не надо писать кучу кода на JS - "утоните" позже с отладкой
 
Последнее редактирование:

Ficoos

Lotus Team
15.03.2016
136
2
BIT
116
млин!... Новая проблема:
в браузере определяются переменные redoc:NotesDocument
и doc:NotesDocument

делаю:
Код:
doc.computeWithForm(false, false)   
doc.makeResponse(redoc)           
doc.save();       
doc.recycle()
если смотреть в толстом клиенте, то флаг $REF существует.
Но стоит только обновить документ в толстом клиенте - флаг удаляется.
Что можно сделать, что бы флаг оставаля на месте???
 

alexas1

Green Team
10.04.2014
1 202
225
BIT
37
Но стоит только обновить документ в толстом клиенте - флаг удаляется.
что значит "обновить"? сохранить в UI ?
что бы ref сохранился, форма, в которой открывается и сохраняется док, должна быть респонз или респонз-ту-респонз
 

Ficoos

Lotus Team
15.03.2016
136
2
BIT
116
что значит "обновить"? сохранить в UI ?
что бы ref сохранился, форма, в которой открывается и сохраняется док, должна быть респонз или респонз-ту-респонз
Notes форма не респонс. В толстом клиенте если сделать документ ответным, то при обновлении или сохранении флаг не теряется.
Почему, сделанный ответным документ в xPages, теряет свой флаг при обновлении UI или @Command([ToolsRefreshSelectedDocs]) в толстом клиенте ?
 

alexas1

Green Team
10.04.2014
1 202
225
BIT
37
Notes форма не респонс.
если открыть по этой форме док на редактирование и сохранить, док больше не будет ответным
сделай эту форму респонс-ту-респонс и не парься)
если хочешь в ней в дальнейшем редактировать респонсы
 
  • Нравится
Реакции: Ficoos

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 947
609
BIT
246
Почему, сделанный ответным документ в xPages, теряет свой флаг
что мешает ему прописывать родительский док? (это не флаг, а поле определенное, кодом создается через MakeResponse...)
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!