Bagaimana cara menambahkan tabel ke database di Liferay dengan FreeMarker?

Saya ingin menambahkan tabel ke database saya menggunakan FreeMarker. Saya mencoba menggunakan ExpandoTableLocalServiceUtil kelas di template saya:

<#assign expandoTable = staticUtil["com.liferay.portlet.expando.service.ExpandoTableLocalServiceUtil"] />

lalu saya mencoba menambahkan tabel:

<#assign table = expandoTable.addTable(theme_display.getCompanyId(),"", "MYTABLE") />

Tapi tabelnya tidak ditambahkan.

Saya juga mencoba dengan cara ini:

${expandoTable.addTable(theme_display.getCompanyId(),"", "ANOTHER-TABLE")}

Dan saya mendapatkan kesalahan ini:

Template processing error: "Method public static 
com.liferay.portlet.expando.model.ExpandoTable
com.liferay.portlet.expando.service.ExpandoTableLocalServiceUtil.addTable(long,java.lang.String,java.lang.String) throws
com.liferay.portal.kernel.exception.PortalException,com.liferay.portal.kernel.exception.SystemException threw an exception"

    The problematic instruction:
    ----------
    ==> ${expandoTable.addTable(theme_display.getCompanyId(),"", "ANOTHER-TABLE")} [on line 22, column 1 in eventi-theme_SERVLET_CONTEXT_/templates/portal_normal.ftl]
    ----------

    Caused by: com.liferay.portlet.expando.DuplicateTableNameException: {tableId=0}

person Mustapha Aoussar    schedule 25.11.2015    source sumber
comment
Dan Anda telah melihat DuplicateTableNameException?   -  person Tobias Liefke    schedule 25.11.2015


Jawaban (1)


Expando API tidak membuat tabel tingkat database, melainkan tabel virtual. Periksa database Anda, dan Anda akan menemukan beberapa tabel "Expando". Mereka akan berisi semua data Anda. Inti dari Expando-API adalah Anda dapat memperluas model data tanpa operasi tingkat DDL baru (misalnya CREATE TABLE) pada database.

Jika Anda ingin membuat tabel terpisah, lakukan saja - tetapi jangan gunakan Expando untuk itu.

Dan seperti yang ditunjukkan DuplicateTableNameException, tabel Anda telah ditambahkan.

Izinkan satu komentar arsitektural: Saya melihat freemarker (setidaknya dalam penggunaan umum) sebagai opsi tingkat UI untuk memperluas Liferay dan biasanya mengharapkan operasi semacam ini di komponen backend daripada di frontend.

person Olaf Kock    schedule 26.11.2015