問題
-
サイトマップを生成する多くのサイトには、いくつかの問題があります。 新しいページを作成すると、それらのページはサイトマップに含まれますが、ページがサイトマップに含まれるように構成されていても、既存のページは含まれません。
-
これは、これらすべてのページがデータベース テーブル レイアウト にレコードを持ち、 classnameid および classpk 列に対して 0ではなく NULL 値を持つことが原因のようです。
-
NULL 値を持つこれらのレイアウトはすべて、6.2 から Liferay 7.2 にアップグレードする前に作成されたようです。
-
このデータをどのように修復すればよいでしょうか?
Environment
- DXP 7.2
解決策
サイトマップに含めるレイアウトのサイトマップ クエリは classnameid != <SOME VALUE> をチェックしているようですが、NULL は値ではないため、これらのレコードはすべてサイトマップで無視されます。
続行する前に、データベースと環境のバックアップを必ず作成してください。 また、最初に下位環境で次の手順をテストすることをお勧めします。
- 以下の Groovy スクリプトをコピーします。
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import com.liferay.portal.kernel.dao.jdbc.DataAccess;
import com.liferay.portal.kernel.util.PortalUtil;
executeUpdate("update Layout set classNameId = 0 where classNameId is null");
public void executeUpdate(String sql) {
Connection con = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
con = DataAccess.getConnection();
sql = PortalUtil.transformSQL(sql);
out.println("SQL: "+sql);
ps = con.prepareStatement(sql);
int n = ps.executeUpdate();
out.println("Updated "+n+" rows");
}
catch(Exception e) {
e.printStackTrace(out);
}
finally {
DataAccess.cleanUp(con, ps, rs);
}
} - サーバー管理へ → スクリプト
- スクリプトを貼り付ける → 実行
- 結果を確認する