Article: AN0001882Updated: 28.06.2021
Při dotazování dotazování na sloupce s vícenásobnými odkazy je třeba použít tuto syntaxi:
Máme třídu project, která se odkazuje ve sloupci add-ci na třídu CI. Chceme vypsat id projektu, jméno projektu a krátký popis konfigurační položky CI. V dotazu se musíme odkázat na třídu project:add-ci, která se vytváří automaticky při použití sloupce M:N a její kód je ve tvaru název odkazující se třídy:název odkazované třídy. V této třídě jsou dva sloupce LinkDataRowId a DataRowId. Sloupec DataRowId se váže na odkazující se třídu project, sloupec LinkDataRowId se váže na odkazovanou třídu added-ci.
Poznámka: Červeně znázorněné vazby a entita jsou systémové, vytvořené automaticky, ne uživatelem.
SELECT p.id AS Project_ID, p.name, c.shortdescription AS SD FROM {{: class.project :}} p
INNER JOIN {{: class.project:added-ci :}} pc ON pc.DataRowId = p.id
INNER JOIN {{: class.ci :}} c ON c.id = pc.LinkDataRowId
V určitých případech můžeme preferovat vypsání odkazů oddělených čárkou do prostého textového pole. Toho dosáhneme pomocí klauzule STUFF:
SELECT p.id, STUFF(
(SELECT ',** ' + c.shortdescription AS [text()]
FROM DataRow{{:class.project.id:}}_{{:class.ci.id:}}Link ref
INNER JOIN {{:class.ci:}} c ON c.id = ref.LinkReferentionId
WHERE ref.ReferentionId = p.Id AND ref.ColumnClassDefId = {{:class.project.column.added-ci.id:}}
ORDER BY c.shortdescription
For XML PATH ('')
), 1, 1, ''
) added_ci
FROM {{:class.project:}} p WHERE p.deleted IS NULL
V případě vícenásobného odkazu na uživatele je třeba použít třídu person, v níž jsou uživatelé ObjectGears. Máme třídu project a v ní sloupec uzivatele, který je násobným odkazem na uživatele. Uživatelé jsou vždy v tabulce person. Na ni se odkazujeme prostým uvedením jejího názvu (nedáváme ho do dvojitých závorek a dvojteček jako názvy uživatelem vytvořených tříd). Systémem generovaná asociační třída project:uzivatele má sloupce DataRowId (nese odkaz třídu project) a sloupec PersonId (nese odkaz na tabulku uživatelů).
Poznámka: Červeně znázorněné vazby a entita jsou systémové, vytvořené automaticky, ne uživatelem.
SELECT p.id AS Project_ID, p.code, per.code AS Persons
FROM {{: class.project :}} p
INNER JOIN {{: class.project:person :}} pp ON pp.DataRowId = p.id
INNER JOIN person per ON per.id = pp.PersonId