Recursive ClassMethod
How do I create recursive classmethod which stop all methods from running when condition are meet?
ClassMethod workpieceUnit(mainArticle As %String, article As %String) As %String
{
&SQL(SELECT unit->unitCode INTO :unitCode FROM production_article.composition WHERE mainArticle = :mainArticle AND article = :article)
IF SQLCODE = 0
{
W !, "Has Value"
QUIT unitCode
}
ELSE
{
SET sql = "SELECT article, unit->unitCode, production_article.composition_sqlArticleCode(article, type) AS articleCode FROM production_article.composition WHERE mainArticle = "_mainArticle_" AND type = 1",
rs = ##class(%SQL.Statement).%ExecDirect(,sql)
WHILE rs.%Next()
{
W !, "BEGENING OF LOOP FOR: "_rs.articleCode
IF (rs.article = article)
{
SET unitCode = rs.unitCode
QUIT
}
// CHECK IF WORKPIECE HAS COMPOSITION
&SQL(SELECT COUNT(*) INTO :composition FROM production_article.composition WHERE mainArticle = :rs.article)
IF (composition > 0)
{
W !, "START RECURSIVE"
DO ..workpieceUnit(rs.article, article)
}
}
W !, "END OF LOOP"
QUIT unitCode
}
QUIT
}
Output from terminal. As you can see recursive still continue even has value condition is true. So once has value is TRUE all recursive should stop. For other programming language is enough to call RETURN, but this have no impact in IRIS.
BEGENING OF LOOP FOR: H2652.S
START RECURSIVE
BEGENING OF LOOP FOR: MQ0605.B
END OF LOOP
BEGENING OF LOOP FOR: H2641.B
BEGENING OF LOOP FOR: M1910.15.40
BEGENING OF LOOP FOR: GK6202
BEGENING OF LOOP FOR: GK6201.B
BEGENING OF LOOP FOR: IX08.0925
START RECURSIVE
END OF LOOP
BEGENING OF LOOP FOR: XQA1.AI12.1425.1020.C
START RECURSIVE
BEGENING OF LOOP FOR: XAL446.1250.1.AI12.L.A
START RECURSIVE
BEGENING OF LOOP FOR: AL446.1255
END OF LOOP
BEGENING OF LOOP FOR: XAL446.1250.1.AI12.R.A
START RECURSIVE
BEGENING OF LOOP FOR: AL446.1255
END OF LOOP
BEGENING OF LOOP FOR: AL448.1024
BEGENING OF LOOP FOR: XAL447.0970.A
START RECURSIVE
BEGENING OF LOOP FOR: AL447.0975
END OF LOOP
BEGENING OF LOOP FOR: H2640.A
BEGENING OF LOOP FOR: H2641.C
BEGENING OF LOOP FOR: H2650.A
BEGENING OF LOOP FOR: H2701.1020
BEGENING OF LOOP FOR: XAL465.1110.A0
START RECURSIVE
Has Value
BEGENING OF LOOP FOR: XAL465.1110.A1
START RECURSIVE
BEGENING OF LOOP FOR: XAL465.1110.A0
START RECURSIVE
Has Value
END OF LOOP
BEGENING OF LOOP FOR: XAL465.1110.A2
START RECURSIVE
BEGENING OF LOOP FOR: XAL465.1110.A0
START RECURSIVE
Has Value
END OF LOOP
BEGENING OF LOOP FOR: H2707.R.S
START RECURSIVE
BEGENING OF LOOP FOR: H2707
BEGENING OF LOOP FOR: H2698
BEGENING OF LOOP FOR: H2697
END OF LOOP
BEGENING OF LOOP FOR: H2707.L.S
START RECURSIVE
BEGENING OF LOOP FOR: H2707
BEGENING OF LOOP FOR: H2698
BEGENING OF LOOP FOR: H2697
END OF LOOP
END OF LOOP
END OF LOOP
Product version: IRIS 2022.1
$ZV: 2022.1 (209U)