0

I have view-entity A that contains entities A1 (have field A11, A12,...), A2 (have field A21, A22) and view-entity B that contains entities B1, B2. Then I want to create view-entity C with member-entities are A and B, include all fields of both of 2 entities. But when I use find() method in view-entity C, moqui will generate SQL statement like:

Select A.A1.A11, A.A1.A12, ..... from ..... 

This make SQL statement error. How can I resolve this problem???

Here my code:

    <view-entity entity-name="PartyDetail" package="mantle.party">
        <member-entity entity-alias="PTY" entity-name="mantle.party.Party"/>
        <member-entity entity-alias="PER" entity-name="mantle.party.Person" join-from-alias="PTY" join-optional="true">
            <key-map field-name="partyId"/></member-entity>
        <member-entity entity-alias="ORG" entity-name="mantle.party.Organization" join-from-alias="PTY" join-optional="true">
            <key-map field-name="partyId"/></member-entity>
        <alias-all entity-alias="PTY"/>
        <alias-all entity-alias="PER"/>
        <alias-all entity-alias="ORG"/>
    </view-entity>

    <view-entity entity-name="UserAccountAndPartyDetail" package="moqui.view">
        <member-entity entity-alias="UA" entity-name="moqui.security.UserAccount"></member-entity>
        <member-entity entity-alias="PTY" entity-name="mantle.party.PartyDetail" join-from-alias="UA">
            <key-map field-name="partyId"></key-map>
        </member-entity>
        <alias-all entity-alias="UA"></alias-all>
        <alias-all entity-alias="PTY"></alias-all>
    </view-entity>

And the SQL statement for UserAccountAndPartyDetail is like this:

select
    UA.USER_ID,
    UA.USERNAME,
    UA.USER_FULL_NAME,
    UA.CURRENT_PASSWORD,
    UA.RESET_PASSWORD,
    UA.PASSWORD_SALT,
    UA.PASSWORD_HASH_TYPE,
    UA.PASSWORD_BASE64,
    UA.PASSWORD_SET_DATE,
    UA.PASSWORD_HINT,
    UA.HAS_LOGGED_OUT,
    UA.DISABLED,
    UA.DISABLED_DATE_TIME,
    UA.SUCCESSIVE_FAILED_LOGINS,
    UA.REQUIRE_PASSWORD_CHANGE,
    UA.CURRENCY_UOM_ID,
    UA.LOCALE,
    UA.TIME_ZONE,
    UA.EXTERNAL_USER_ID,
    UA.EMAIL_ADDRESS,
    UA.PARTY_ID,
    PTY.PTY.PSEUDO_ID,
    PTY.PTY.PARTY_TYPE_ENUM_ID,
    PTY.PTY.EXTERNAL_ID,
    PTY.PTY.DATA_SOURCE_ID,
    PTY.PTY.GATEWAY_CIM_ID,
    PTY.PTY.COMMENTS,
    PTY.PTY.HAS_DUPLICATES,
    PTY.PTY.LAST_DUP_CHECK_DATE,
    PTY.PTY.MERGED_TO_PARTY_ID,
    PTY.PER.SALUTATION,
    PTY.PER.FIRST_NAME,
    PTY.PER.MIDDLE_NAME,
    PTY.PER.LAST_NAME,
    PTY.PER.PERSONAL_TITLE,
    PTY.PER.SUFFIX,
    PTY.PER.NICKNAME,
    PTY.PER.GENDER,
    PTY.PER.BIRTH_DATE,
    PTY.PER.DECEASED_DATE,
    PTY.PER.HEIGHT,
    PTY.PER.WEIGHT,
    PTY.PER.MOTHERS_MAIDEN_NAME,
    PTY.PER.MARITAL_STATUS_ENUM_ID,
    PTY.PER.EMPLOYMENT_STATUS_ENUM_ID,
    PTY.PER.RESIDENCE_STATUS_ENUM_ID,
    PTY.PER.OCCUPATION,
    PTY.ORG.ORGANIZATION_NAME,
    PTY.ORG.OFFICE_SITE_NAME,
    PTY.ORG.ANNUAL_REVENUE,
    PTY.ORG.NUM_EMPLOYEES
from
    (
        USER_ACCOUNT UA
    inner join(
            select
                PTY.PARTY_ID,
                PTY.PSEUDO_ID,
                PTY.PARTY_TYPE_ENUM_ID,
                PTY.DISABLED,
                PTY.EXTERNAL_ID,
                PTY.DATA_SOURCE_ID,
                PTY.GATEWAY_CIM_ID,
                PTY.COMMENTS,
                PTY.HAS_DUPLICATES,
                PTY.LAST_DUP_CHECK_DATE,
                PTY.MERGED_TO_PARTY_ID,
                PER.SALUTATION,
                PER.FIRST_NAME,
                PER.MIDDLE_NAME,
                PER.LAST_NAME,
                PER.PERSONAL_TITLE,
                PER.SUFFIX,
                PER.NICKNAME,
                PER.GENDER,
                PER.BIRTH_DATE,
                PER.DECEASED_DATE,
                PER.HEIGHT,
                PER.WEIGHT,
                PER.MOTHERS_MAIDEN_NAME,
                PER.MARITAL_STATUS_ENUM_ID,
                PER.EMPLOYMENT_STATUS_ENUM_ID,
                PER.RESIDENCE_STATUS_ENUM_ID,
                PER.OCCUPATION,
                ORG.ORGANIZATION_NAME,
                ORG.OFFICE_SITE_NAME,
                ORG.ANNUAL_REVENUE,
                ORG.NUM_EMPLOYEES
            from
                (
                    PARTY PTY
                left outer join PERSON PER on
                    PTY.PARTY_ID = PER.PARTY_ID
                left outer join ORGANIZATION ORG on
                    PTY.PARTY_ID = ORG.PARTY_ID
                )
        ) PTY on
        UA.PARTY_ID = PTY.PTY.PARTY_ID
    )
order by
    1 offset 0 rows fetch first 50 rows only

this is the error in console:

Error running groovy script (Error finding list of UserAccountAndPartyDetail by null [42P01]): 
1 : import static org.moqui.util.ObjectUtilities.*
2 : import static org.moqui.util.CollectionUtilities.*
3 : import static org.moqui.util.StringUtilities.*
4 : import java.sql.Timestamp
5 : // these are in the context by default: ExecutionContext ec, Map<String, Object> context, Map<String, Object> result
6 :     entityDefinition = (ec.entity.getEntityDefinition(selectedEntity))
7 :     entityValueList_xafind = ec.entity.find("${selectedEntity}").offset(0).limit(50)
8 :             
9 :         if (true) {
10 :         Map efSfiDefParms = null
11 :         entityValueList_xafind.searchFormMap(ec.context, efSfiDefParms, "", "", true)
12 :     }
13 :         entityValueList = entityValueList_xafind.list()
14 :             if (entityValueList_xafind.getLimit() == null) {
15 :                 entityValueListCount = entityValueList.size()
16 :                 entityValueListPageIndex = entityValueList.pageIndex
17 :                 entityValueListPageSize = entityValueListCount > 20 ? entityValueListCount : 20
18 :             } else {
19 :                 entityValueListCount = entityValueList_xafind.count()
20 :                 entityValueListPageIndex = entityValueList_xafind.pageIndex
21 :                 entityValueListPageSize = entityValueList_xafind.pageSize
22 :             }
23 :         entityValueListPageMaxIndex = ((BigDecimal) (entityValueListCount - 1)).divide(entityValueListPageSize ?: (entityValueListCount - 1), 0, BigDecimal.ROUND_DOWN) as int
24 :         entityValueListPageRangeLow = entityValueListPageIndex * entityValueListPageSize + 1
25 :         entityValueListPageRangeHigh = (entityValueListPageIndex * entityValueListPageSize) + entityValueListPageSize
26 :         if (entityValueListPageRangeHigh > entityValueListCount) entityValueListPageRangeHigh = entityValueListCount
27 : // make sure the last statement is not considered the return value
28 : return;


15:34:14.108 ERROR p60559178-15               o.m.i.s.ScreenRenderImpl Error rendering screen [component://tools/screen/Tools/Entity/DataEdit/EntityDataFind.xml]
org.moqui.impl.entity.EntitySqlException: Error finding list of UserAccountAndPartyDetail by null [42P01]
    at org.moqui.impl.entity.EntityFindBase.listInternal(EntityFindBase.groovy:1064) ~[moqui-framework-2.1.0.jar:2.1.0]
    at org.moqui.impl.entity.EntityFindBase.list(EntityFindBase.groovy:929) ~[moqui-framework-2.1.0.jar:2.1.0]
    at component___tools_screen_Tools_Entity_DataEdit_EntityDataFind_xml_screen_actions.run(component___tools_screen_Tools_Entity_DataEdit_EntityDataFind_xml_screen_actions:13) ~[script:?]
    at org.moqui.impl.actions.XmlAction.run(XmlAction.java:67) ~[moqui-framework-2.1.0.jar:2.1.0]
    at org.moqui.impl.screen.ScreenSection.renderSingle(ScreenSection.groovy:132) ~[moqui-framework-2.1.0.jar:2.1.0]
    at org.moqui.impl.screen.ScreenSection.render(ScreenSection.groovy:112) ~[moqui-framework-2.1.0.jar:2.1.0]
    at org.moqui.impl.screen.ScreenDefinition.render(ScreenDefinition.groovy:509) ~[moqui-framework-2.1.0.jar:2.1.0]
    at org.moqui.impl.screen.ScreenRenderImpl.renderSubscreen(ScreenRenderImpl.groovy:972) ~[moqui-framework-2.1.0.jar:2.1.0]
    at org.moqui.impl.screen.ScreenWidgets.render(ScreenWidgets.groovy:40) ~[moqui-framework-2.1.0.jar:2.1.0]
    at org.moqui.impl.screen.ScreenSection.renderSingle(ScreenSection.groovy:139) ~[moqui-framework-2.1.0.jar:2.1.0]
    at org.moqui.impl.screen.ScreenSection.render(ScreenSection.groovy:112) ~[moqui-framework-2.1.0.jar:2.1.0]
    at org.moqui.impl.screen.ScreenDefinition.render(ScreenDefinition.groovy:509) ~[moqui-framework-2.1.0.jar:2.1.0]
    at org.moqui.impl.screen.ScreenRenderImpl.renderSubscreen(ScreenRenderImpl.groovy:972) ~[moqui-framework-2.1.0.jar:2.1.0]
    at org.moqui.impl.screen.ScreenWidgets.render(ScreenWidgets.groovy:40) ~[moqui-framework-2.1.0.jar:2.1.0]
    at org.moqui.impl.screen.ScreenSection.renderSingle(ScreenSection.groovy:139) ~[moqui-framework-2.1.0.jar:2.1.0]
    at org.moqui.impl.screen.ScreenSection.render(ScreenSection.groovy:112) ~[moqui-framework-2.1.0.jar:2.1.0]
    at org.moqui.impl.screen.ScreenDefinition.render(ScreenDefinition.groovy:509) ~[moqui-framework-2.1.0.jar:2.1.0]
    at org.moqui.impl.screen.ScreenRenderImpl.renderSubscreen(ScreenRenderImpl.groovy:972) ~[moqui-framework-2.1.0.jar:2.1.0]
    at org.moqui.impl.screen.ScreenWidgets.render(ScreenWidgets.groovy:40) ~[moqui-framework-2.1.0.jar:2.1.0]
    at org.moqui.impl.screen.ScreenSection.renderSingle(ScreenSection.groovy:139) ~[moqui-framework-2.1.0.jar:2.1.0]
    at org.moqui.impl.screen.ScreenSection.render(ScreenSection.groovy:112) ~[moqui-framework-2.1.0.jar:2.1.0]
    at org.moqui.impl.screen.ScreenDefinition.render(ScreenDefinition.groovy:509) ~[moqui-framework-2.1.0.jar:2.1.0]
    at org.moqui.impl.screen.ScreenRenderImpl.renderSubscreen(ScreenRenderImpl.groovy:972) ~[moqui-framework-2.1.0.jar:2.1.0]
    at org.moqui.impl.screen.ScreenWidgets.render(ScreenWidgets.groovy:40) ~[moqui-framework-2.1.0.jar:2.1.0]
    at org.moqui.impl.screen.ScreenSection.renderSingle(ScreenSection.groovy:139) ~[moqui-framework-2.1.0.jar:2.1.0]
    at org.moqui.impl.screen.ScreenSection.render(ScreenSection.groovy:112) ~[moqui-framework-2.1.0.jar:2.1.0]
    at org.moqui.impl.screen.ScreenDefinition.render(ScreenDefinition.groovy:509) ~[moqui-framework-2.1.0.jar:2.1.0]
    at org.moqui.impl.screen.ScreenRenderImpl.renderSubscreen(ScreenRenderImpl.groovy:972) ~[moqui-framework-2.1.0.jar:2.1.0]
    at org.moqui.impl.screen.ScreenWidgets.render(ScreenWidgets.groovy:40) ~[moqui-framework-2.1.0.jar:2.1.0]
    at org.moqui.impl.screen.ScreenSection.renderSingle(ScreenSection.groovy:139) ~[moqui-framework-2.1.0.jar:2.1.0]
    at org.moqui.impl.screen.ScreenSection.render(ScreenSection.groovy:112) ~[moqui-framework-2.1.0.jar:2.1.0]
    at org.moqui.impl.screen.ScreenDefinition.render(ScreenDefinition.groovy:509) ~[moqui-framework-2.1.0.jar:2.1.0]
    at org.moqui.impl.screen.ScreenRenderImpl.doActualRender(ScreenRenderImpl.groovy:761) ~[moqui-framework-2.1.0.jar:2.1.0]
    at org.moqui.impl.screen.ScreenRenderImpl.internalRender(ScreenRenderImpl.groovy:569) ~[moqui-framework-2.1.0.jar:2.1.0]
    at org.moqui.impl.screen.ScreenRenderImpl.render(ScreenRenderImpl.groovy:147) ~[moqui-framework-2.1.0.jar:2.1.0]
    at org.moqui.impl.webapp.MoquiServlet.service(MoquiServlet.groovy:95) ~[moqui-framework-2.1.0.jar:2.1.0]
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:790) ~[moqui_temp7467403619005190592execlib_javax.servlet-api-3.1.0.jar.:3.1.0]
    at org.moqui.elasticsearch.ElasticRequestLogFilter.doFilter(ElasticRequestLogFilter.groovy:107) ~[moqui-elasticsearch-1.1.0.jar:?]
    at java.lang.Thread.run(Thread.java:748) [?:1.8.0_161]
Caused by: org.postgresql.util.PSQLException: ERROR: invalid reference to FROM-clause entry for table "pty"
  Hint: There is an entry for table "pty", but it cannot be referenced from this part of the query.
  Position: 1898
    at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2433) ~[postgresql-42.2.2.jar:42.2.2]
    at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:2178) ~[postgresql-42.2.2.jar:42.2.2]
    at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:306) ~[postgresql-42.2.2.jar:42.2.2]
    at org.postgresql.jdbc.PgStatement.executeInternal(PgStatement.java:441) ~[postgresql-42.2.2.jar:42.2.2]
    at org.postgresql.jdbc.PgStatement.execute(PgStatement.java:365) ~[postgresql-42.2.2.jar:42.2.2]
    at org.postgresql.jdbc.PgPreparedStatement.executeWithFlags(PgPreparedStatement.java:155) ~[postgresql-42.2.2.jar:42.2.2]
    at org.postgresql.jdbc.PgPreparedStatement.executeQuery(PgPreparedStatement.java:118) ~[postgresql-42.2.2.jar:42.2.2]
    at sun.reflect.GeneratedMethodAccessor25.invoke(Unknown Source) ~[?:?]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_161]
    at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_161]
    at org.postgresql.ds.PGPooledConnection$StatementHandler.invoke(PGPooledConnection.java:428) ~[postgresql-42.2.2.jar:42.2.2]
    at com.sun.proxy.$Proxy22.executeQuery(Unknown Source) ~[?:?]
    at bitronix.tm.resource.jdbc.proxy.PreparedStatementJavaProxy.executeQuery(PreparedStatementJavaProxy.java:102) ~[btm-3.0.0-SNAPSHOT.jar:3.0.0-SNAPSHOT]
    at org.moqui.impl.entity.EntityQueryBuilder.executeQuery(EntityQueryBuilder.java:91) ~[moqui-framework-2.1.0.jar:2.1.0]
    at org.moqui.impl.entity.EntityFindImpl.iteratorExtended(EntityFindImpl.java:150) ~[moqui-framework-2.1.0.jar:2.1.0]
    at org.moqui.impl.entity.EntityFindBase.listInternal(EntityFindBase.groovy:1063) ~[moqui-framework-2.1.0.jar:2.1.0]
    at org.moqui.impl.entity.EntityFindBase.list(EntityFindBase.groovy:929) ~[moqui-framework-2.1.0.jar:2.1.0]
    at org.moqui.entity.EntityFind$list$6.call(Unknown Source) ~[?:?]
    at component___tools_screen_Tools_Entity_DataEdit_EntityDataFind_xml_screen_actions.run(component___tools_screen_Tools_Entity_DataEdit_EntityDataFind_xml_screen_actions:13) ~[script:?]
    at org.moqui.impl.actions.XmlAction.run(XmlAction.java:67) ~[moqui-framework-2.1.0.jar:2.1.0]
    at org.moqui.impl.screen.ScreenSection.renderSingle(ScreenSection.groovy:132) ~[moqui-framework-2.1.0.jar:2.1.0]
    at org.moqui.impl.screen.ScreenSection.render(ScreenSection.groovy:112) ~[moqui-framework-2.1.0.jar:2.1.0]
    at org.moqui.impl.screen.ScreenDefinition.render(ScreenDefinition.groovy:509) ~[moqui-framework-2.1.0.jar:2.1.0]
    at org.moqui.impl.screen.ScreenRenderImpl.renderSubscreen(ScreenRenderImpl.groovy:972) [moqui-framework-2.1.0.jar:2.1.0]
    at sun.reflect.GeneratedMethodAccessor92.invoke(Unknown Source) ~[?:?]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_161]
    at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_161]
    at freemarker.ext.beans.BeansWrapper.invokeMethod(BeansWrapper.java:1487) [freemarker-2.3.26-incubating.jar:2.3.26]
    at freemarker.ext.beans.SimpleMethodModel.exec(SimpleMethodModel.java:69) [freemarker-2.3.26-incubating.jar:2.3.26]
    at freemarker.core.MethodCall._eval(MethodCall.java:65) [freemarker-2.3.26-incubating.jar:2.3.26]
    at freemarker.core.Expression.eval(Expression.java:81) [freemarker-2.3.26-incubating.jar:2.3.26]
    at freemarker.core.DollarVariable.calculateInterpolatedStringOrMarkup(DollarVariable.java:96) [freemarker-2.3.26-incubating.jar:2.3.26]
    at freemarker.core.DollarVariable.accept(DollarVariable.java:59) [freemarker-2.3.26-incubating.jar:2.3.26]
    at freemarker.core.Environment.visit(Environment.java:362) [freemarker-2.3.26-incubating.jar:2.3.26]
    at freemarker.core.Environment.invoke(Environment.java:714) [freemarker-2.3.26-incubating.jar:2.3.26]
    at freemarker.core.Environment.invokeNodeHandlerFor(Environment.java:626) [freemarker-2.3.26-incubating.jar:2.3.26]
    at freemarker.core.Environment.recurse(Environment.java:824) [freemarker-2.3.26-incubating.jar:2.3.26]
    at freemarker.core.RecurseNode.accept(RecurseNode.java:73) [freemarker-2.3.26-incubating.jar:2.3.26]
    at freemarker.core.Environment.visit(Environment.java:362) [freemarker-2.3.26-incubating.jar:2.3.26]
    at freemarker.core.Environment.invoke(Environment.java:714) [freemarker-2.3.26-incubating.jar:2.3.26]
    at freemarker.core.Environment.invokeNodeHandlerFor(Environment.java:626) [freemarker-2.3.26-incubating.jar:2.3.26]
    at freemarker.core.Environment.recurse(Environment.java:824) [freemarker-2.3.26-incubating.jar:2.3.26]
    at freemarker.core.RecurseNode.accept(RecurseNode.java:73) [freemarker-2.3.26-incubating.jar:2.3.26]
    at freemarker.core.Environment.visit(Environment.java:362) [freemarker-2.3.26-incubating.jar:2.3.26]
    at freemarker.core.Environment.invoke(Environment.java:714) [freemarker-2.3.26-incubating.jar:2.3.26]
    at freemarker.core.Environment.invokeNodeHandlerFor(Environment.java:626) [freemarker-2.3.26-incubating.jar:2.3.26]
    at freemarker.core.VisitNode.accept(VisitNode.java:71) [freemarker-2.3.26-incubating.jar:2.3.26]
    at freemarker.core.Environment.visit(Environment.java:326) [freemarker-2.3.26-incubating.jar:2.3.26]
    at freemarker.core.Environment.visit(Environment.java:332) [freemarker-2.3.26-incubating.jar:2.3.26]
    at freemarker.core.Environment.process(Environment.java:305) [freemarker-2.3.26-incubating.jar:2.3.26]
    at org.moqui.impl.screen.ScreenWidgets.render(ScreenWidgets.groovy:40) [moqui-framework-2.1.0.jar:2.1.0]
    at org.moqui.impl.screen.ScreenSection.renderSingle(ScreenSection.groovy:139) [moqui-framework-2.1.0.jar:2.1.0]
    at org.moqui.impl.screen.ScreenSection.render(ScreenSection.groovy:112) [moqui-framework-2.1.0.jar:2.1.0]
    at org.moqui.impl.screen.ScreenDefinition.render(ScreenDefinition.groovy:509) [moqui-framework-2.1.0.jar:2.1.0]
    at org.moqui.impl.screen.ScreenRenderImpl.renderSubscreen(ScreenRenderImpl.groovy:972) [moqui-framework-2.1.0.jar:2.1.0]
    at sun.reflect.GeneratedMethodAccessor92.invoke(Unknown Source) ~[?:?]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_161]
    at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_161]
    at freemarker.ext.beans.BeansWrapper.invokeMethod(BeansWrapper.java:1487) [freemarker-2.3.26-incubating.jar:2.3.26]
    at freemarker.ext.beans.SimpleMethodModel.exec(SimpleMethodModel.java:69) [freemarker-2.3.26-incubating.jar:2.3.26]
    at freemarker.core.MethodCall._eval(MethodCall.java:65) [freemarker-2.3.26-incubating.jar:2.3.26]
    at freemarker.core.Expression.eval(Expression.java:81) [freemarker-2.3.26-incubating.jar:2.3.26]
    at freemarker.core.DollarVariable.calculateInterpolatedStringOrMarkup(DollarVariable.java:96) [freemarker-2.3.26-incubating.jar:2.3.26]
    at freemarker.core.DollarVariable.accept(DollarVariable.java:59) [freemarker-2.3.26-incubating.jar:2.3.26]
    at freemarker.core.Environment.visit(Environment.java:326) [freemarker-2.3.26-incubating.jar:2.3.26]
    at freemarker.core.Environment.visit(Environment.java:368) [freemarker-2.3.26-incubating.jar:2.3.26]
    at freemarker.core.Environment.invoke(Environment.java:714) [freemarker-2.3.26-incubating.jar:2.3.26]
kieuanhvu
  • 98
  • 10

1 Answers1

0

In the current moqui-framework code (as of 12 May 2018, pre-release version 2.1.1-rc2 and prior versions) using a view-entity as a member of another view-entity is only supported for sub-selects (ie with attribute member-entity.@sub-select="true"). The shortcut you are trying to use is not supported, just join in all of the plain entities you want as member entities. In this case you should add Party, Person, and Organization as member entities instead of using PartyDetail.

David E. Jones
  • 1,721
  • 1
  • 9
  • 8