Oracle APEXのInteractive Gridで、Oracle Formsと比較して、重複行の検証を制御/通過させる方法 (2022/07/21)

Oracle APEXのInteractive Gridで、Oracle Formsと比較して、重複行の検証を制御/通過させる方法 (2022/07/21)

https://medium.com/oracledevs/how-to-control-or-pass-validation-for-duplicate-rows-in-interactive-grid-of-oracle-apex-as-compare-18f453f750bf

投稿者:Jignesh


oracle Formsでは、データブロックの重複行を制御するのは非常に簡単ですが、IGの検証を制御するにはどうすればよいでしょうか。


必要な出力




ステップ1:インタラクティブグリッドのある白紙ページを作成します(私は1つの領域「IG」を作成し、インタラクティブグリッドとしてタイプを選択しました)




ステップ 2: リージョンに Static ID を定義する (私の場合、リージョンは IG で、Static ID も IG です)




ステップ3:複製を制御したいカラムのStatic IDを定義します




ステップ4:関数とグローバル変数に移動します




コード:

var validity, message,
ui = this.data;
(function($)
{
function update(model)
{
var projKey = model.getFieldKey(“PROJECT_ID”),
recObj = [],
recArray = [];
model.forEach(function(record, index, id)
{
var projid = parseInt(record[projKey], 10), // record[salKey] should be a little faster than using model.getValue in a loop
meta = model.getRecordMetadata(id);
if (!isNaN(projid) && !meta.deleted && !meta.agg)
{
recObj = {ID: id, project_id: projid};
recArray.push(recObj);
}
});
//************************mark found duplicates*************************
var duplicateIds = recArray
.map(e => e[‘project_id’])
.map((e, i, final) => final.indexOf(e) !== i && i)
.filter(obj => recArray[obj])
.map(e => recArray[e][“project_id”]);
var duplObjects = recArray.filter(obj=> duplicateIds.includes(obj.salary));
if (duplicateIds.length > 0)
{
apex.message.clearErrors();
// Now show new errors
apex.message.showErrors([
{
type: “error”,
location: “page”,
message: “Duplicates found on rows!” + “\r\n” + JSON.stringify(duplObjects),
unsafe: false
}
]);
}
else {
apex.message.clearErrors();
}
}
$(function() {
$(“#IG”).on(“interactivegridviewmodelcreate”, function(event, ui) {
var sid, model = ui.model;
if ( ui.viewId === “grid” ) {
sid = model.subscribe( {
onChange: function(type, change) {
if ( type === “set” ) {
// don’t bother to recalculate if other columns change
if (change.field === “PROJECT_ID” ) {
update( model );
}
} else if (type !== “move” && type !== “metaChange”) {
// any other change except for move and metaChange affect the calculation
update( model );
}
}
} );
// if not lazy loaded there is no notification for initial data so update
update(model);
model.fetchAll(function() {});
}
});
});
})(apex.jQuery);


ステップ5:アプリケーションを実行する


ありがとうございました。


Jignesh


それについて話したいですか?開発者向けの公開Slackチャンネルで議論に参加しましょう。


また、私たちの Free Tier で試すこともできます!


コメント

このブログの人気の投稿

Oracle Database 19cサポート・タイムラインの重要な更新 (2024/11/20)

Oracle APEX 24.1の一般提供の発表 (2024/06/17)