CAML-запрос SharePoint не работает при использовании OR и IN

Я написал быстрый тест один раз, чтобы оценить «на лету»:

public class Test1 {

    // non-static nested
    class Nested { }

    // static nested
    static class StaticNested { }

    static long getFreeMemory () {
        // waits for free memory measurement to stabilize
        long init = Runtime.getRuntime().freeMemory(), init2;
        int count = 0;
        do {
            System.out.println("waiting..." + init);
            System.gc();
            try { Thread.sleep(250); } catch (Exception x) { }
            init2 = init;
            init = Runtime.getRuntime().freeMemory();
            if (init == init2) ++ count; else count = 0;
        } while (count < 5);
        System.out.println("ok..." + init);
        return init;
    }

    Test1 () throws InterruptedException {

        Object[] s = new Object[10000];
        Object[] n = new Object[10000];
        Object[] t = new Object[10000];

        long init = getFreeMemory();

        //for (int j = 0; j < 10000; ++ j)
        //    s[j] = new Separate();

        long afters = getFreeMemory();

        for (int j = 0; j < 10000; ++ j)
            n[j] = new Nested();

        long aftersn = getFreeMemory();

        for (int j = 0; j < 10000; ++ j)
            t[j] = new StaticNested();

        long aftersnt = getFreeMemory();

        System.out.println("separate:      " + -(afters - init) + " each=" + -(afters - init) / 10000);
        System.out.println("nested:        " + -(aftersn - afters) + " each=" + -(aftersn - afters) / 10000);
        System.out.println("static nested: " + -(aftersnt - aftersn) + " each=" + -(aftersnt - aftersn) / 10000);

    }

    public static void main (String[] args) throws InterruptedException {
        new Test1();
    }

}

Общая концепция - выделить объекты и измерить изменение свободного пространства кучи. Ключ getFreeMemory(), который запрашивает выполнение GC и ожидает, что размер свободной кучи будет стабилизирован. Вывод выше:

nested:        160000 each=16
static nested: 160000 each=16

Это то, что мы ожидаем, учитывая поведение выравнивания и возможные служебные данные заголовка блока кучи.

Метод инструментария, подробно описанный в принятом ответе здесь Наиболее точный. Метод, который я описал, является точным, но только в контролируемых условиях, когда другие нити не создают / не отбрасывают объекты.

0
задан Nicolae Anghel 16 January 2019 в 09:55
поделиться

3 ответа

В итоге я запросил скрытые TextFields полей таксономии, используя термин ids:

<Where>
<Or>
  <Contains><FieldRef Name='kf7aa880952e4699a9693b8b7379c884'/><Value Type='Text'>40e7b1fd-3892-4311-8428-6dbe77fc4ad7</Value></Contains>
  <Contains><FieldRef Name='le11567cdf314372b377761db5f67b84'/><Value Type='Text'>40e7b1fd-3892-4311-8428-6dbe77fc4ad7</Value></Contains>
</Or>
</Where>
0
ответ дан Nicolae Anghel 16 January 2019 в 09:55
поделиться

Я бы предложил использовать CAML Builder для построения вашего запроса.

Попробуйте следующее

    <Where>
<Or>
 <In>
    <FieldRef Name='col1' />
    <Values><Value Type='Text'>TAxTextValue</Value></Values>
 </In>
 <In>
    <FieldRef Name='col2' />
    <Values><Value Type='Text'>TAxTextValue</Value></Values>
 </In>
</Or>
</Where>

Кто-то указал, что может быть ошибка, но вы не указали версию SP.

Возможная ошибка

Спасибо

Truez

0
ответ дан Truezplaya 16 January 2019 в 09:55
поделиться

попробуйте что-нибудь подобное

<FieldRef LookupId='TRUE' Name='MyTaxonomyField' />
<Values>
 <Value Type='Integer'>4</Value>
</Values>
0
ответ дан Pratik Chotai 16 January 2019 в 09:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: