Az SDM interfészek írása során van egy már kialakított és az elmúlt évek során folyamatosan csiszolt eljárás rendszerem, amit .NET alá készítettem. E rendszerben a kapcsolati szálat egy alap kezelőobjektumon keresztül lehet kezelni, melynek szolgáltatásai között szerepel a leíró mezők induláskor való beolvasása. E megoldás segítségével jelentősen gyorsítani lehet az egyes interfészek működését, hisz nem kell minden leíróadatért elrohanni a szerverhez, hanem az helyben a memóriából olvasható.
E megoldás szépen muzsikált már az elmúlt pár évben, de most beleütköztem egy problémába, nevezetesen, hogy a WebService doSelect utasítása max 250 elem átadását teszi lehetővé. Ez a korlát nem okozott eddig gondot, de a mostani implementációnál már nem volt elégséges. Kénytelen voltam utánanézni mi is az eljárási rend ilyen esetben.
A megoldás – annak ismeretében – frappáns és egyszerű (csak amíg rájössz, hogy mit csinálj másképp…):
- Kérdezzük le az adatokat a doQuery metódussal. Itt egy a WebService által definiált ListResult elem lesz a válasz, amiben két infó van a szerveren összeállított lekérdezés azonosítója és a lekérdezésben szereplő elemek száma
- Olvassuk ki a számunkra szükséges adatokat a getListValues metódussal, amelynek van egy StartIndex és egy EndIndex paramétere. Ezekkel szabályozhatjuk az egyszerre visszaküldött elemek számát.
Fontos! Egy adatlekérésben a rendszer max. 250 elemet ad vissza, ennél nagyobb elemszám esetén a lekérdezést a szükséges mennyiségben ismételni kell. - A lista végigolvasását követően a szerver oldalon szabadítsuk fel a listát (és a hozzá kapcsolódó erőforrásokat) a freeListHandles metódussal.
Ennyi az egész, ugye nem is bonyolult?