Как решить apex.ajax.clob ошибку в Oracle 18c APEX?
Я пытаюсь показать булавки в моем элементе управления картой, и я использовал следующий код в старой теме 4.2, и он работал нормально. Но с новой темой APEX я получаю apex.ajax.clob
не ошибка конструктора
function refreshMap()
{
var gData;
var clob_ob = new apex.ajax.clob
(
function()
{
var rs = p.readyState
if(rs == 4)
{
gData = p.responseText;
if(gData.length == 0)
{
alert("No task found.");
return;
}
if(gData=='-1')
{
alert("Data too large to be displayed. Filter task by type or select smaller date range.");
return;
}
}
if(gData)
{
var actArray = gData.split("~#~");
var bounds = new google.maps.LatLngBounds();
for(var i=0; i < actArray.length; i++)
{
acct = ""+actArray[i];
var colArray = acct.split("~@~");
var repStatus = colArray[5];
var link = '<b><u><a href="'+colArray[7]+'">'+colArray[2]+'</a></u></b>';
var html = '<table><tr><td style="font-weight: bold; font-size: 175%;">'+colArray[3]+'</td></tr></table><table><tr><td> </td></tr><tr><td><b>Task # : </b> </td><td>'+link+'</td></tr><tr><td align="left"><b>Subject : </b> </td><td>'+colArray[4]+'</td></tr><tr><td align="left"><b>Status : </b> </td><td>'+repStatus+'</td></tr></table>';
var newmarker = new google.maps.Marker({
position: new google.maps.LatLng(colArray[0], colArray[1]),
map: map,
//title: html,
icon: 'http://chart.apis.google.com/chart?chst=d_map_pin_letter&chld=%E2%80%A2|'+colArray[8]
});
newmarker['infowindow'] = new google.maps.InfoWindow({
content: html
});
google.maps.event.addListener(newmarker, 'click', function() {
this['infowindow'].open(map, this);
});
marker.push(newmarker);
bounds.extend(new google.maps.LatLng(colArray[0], colArray[1]));
}
map.fitBounds(bounds);
}
});
clob_ob._get();
}
0 ответов
apex.ajax.clob
устарел и перемещен в legacy_18.js
(по крайней мере, в 18.2). Чтобы следовать примеру, вы должны включить/i/libraries/apex/legacy_18.js
. Это можно сделать постранично в поле Javascript -> URL-адреса файлов.
Я знаю, что это довольно старый пост, но я нашел его, когда столкнулся с той же проблемой и искал решение. Поскольку это была одна из первых ссылок, появившихся у меня в Google, после того, как я нашел решение, я решил поделиться кодом здесь для будущих ссылок.
Вам нужно будет адаптировать этот код к вашей ситуации, поэтому возьмите его в качестве примера, как подойти к этой проблеме, не полагаясь на устаревший javascript.
В этом примере у меня есть CLOB, который содержит источник HTML (принимающий несколько параметров), и мне нужно отображать его в области при загрузке страницы.
Сначала вы создаете процесс обратного вызова AJAX (назовем этот процесс HTML)
DECLARE
l_clob CLOB;
l_file BLOB;
l_dest_offset PLS_INTEGER := 1;
l_src_offset PLS_INTEGER := 1;
l_lang_ctx PLS_INTEGER := dbms_lob.default_lang_ctx;
l_blob_warn PLS_INTEGER;
BEGIN
-- Get clob
l_clob := functionReturningClob(i_code => :P1_CODE, i_type => :P1_TYPE);
-- Create blob
DBMS_LOB.CREATETEMPORARY(l_file, true);
DBMS_LOB.CONVERTTOBLOB(l_file, l_clob, dbms_lob.lobmaxsize, l_dest_offset, l_src_offset, dbms_lob.default_csid, l_lang_ctx, l_blob_warn);
-- Download blob
OWA_UTIL.MIME_HEADER('text/html', false);
HTP.P('Content-Length: ' || dbms_lob.getlength(l_file));
HTP.P('Content-Disposition: attachment; filename="content.html"');
OWA_UTIL.HTTP_HEADER_CLOSE();
WPG_DOCLOAD.DOWNLOAD_FILE(l_file);
END;
Теперь я могу позвонить по запросу, когда захочу. Для моих целей у меня есть на моей странице - Javascript Execute when Page Loads, которая содержит следующий код.
// Start the process called HTML and add the following page items as parameter
var p = apex.server.process('HTML', {
pageItems:['P1_CODE', 'P1_TYPE']
}, {
dataType: 'html'
});
// When the process is done, replace the region HTML with the downloaded HTML source
// Also - the region on the page has the "region" as its static ID
p.done(function(data) {
$('#region').html(data);
});
Это должно дать вам достаточно информации, чтобы внести свои коррективы и заставить ее работать.