2013-01-21 4 views
1

Il existe un formulaire tabulaire avec des champs description, previous_value, unit_price dans mon application Oracle Apex.Remplir la valeur d'un champ de formulaire tabulaire avec la modification d'un autre champ

Je dois remplir la valeur du champ previous_value avec des données sur le champ description. J'ai une requête pour obtenir de la valeur pour le champ previous_value de la base de données. je dois ajouter l'événement onChange au champ description. avec les modifications dans le champ description, la valeur du champ previous_value doit être renseignée à l'aide de ma requête.

comment est-ce que je pourrais faire ceci?

Répondre

2

Vous pouvez lier l'événement change au champ de plusieurs manières. Ciblez à travers les en-têtes td, ou modifiez la colonne, et dans le champ "Attributs d'élément" vous pouvez ajouter une classe (par exemple "fireAjax"). Vous pouvez ensuite lier l'événement avec un code javascript ou le faire via une action dynamique.

Vous pouvez faire un appel ajax dans l'une de ces 2 formes: par htmldb_Get ou jquery.post:

$('td[headers="ENAME"] input').change(function(){ 
    var ajaxRequest = new htmldb_Get(null , $v('pFlowId') , 'APPLICATION_PROCESS=get_job' , $v('pFlowStepId')); 
    ajaxRequest.addParam('x01', $(this).val()); 
    ajaxResult = ajaxRequest.get(); 
    $(this).closest("tr").find("td[headers='JOB'] input").val(ajaxResult); 
}); 

OU

$('td[headers="ENAME"] input').change(function(){ 
var that = this; 
$.post('wwv_flow.show', 
     {"p_request"  : "APPLICATION_PROCESS=get_job", 
     "p_flow_id"  : $v('pFlowId'), 
     "p_flow_step_id" : $v('pFlowStepId'), 
     "p_instance"  : $v('pInstance'), 
     "x01"   : $(this).val() 
     }, 
     function(data){ 
      var eJob = $(that).closest("tr").find("td[headers='JOB'] input"); 
      eJob.val(data); 
     }, 
     "text" 
    ); 
}); 

Avec ce processus d'application, défini sur la page avec point d'exécution "AJAX Callback":
Nom: get_job

DECLARE 
    l_job emp.job%TYPE; 
BEGIN 
    SELECT job 
    INTO l_job 
    FROM emp 
    WHERE ename = apex_application.g_x01; 

    htp.p(l_job); 
EXCEPTION WHEN no_data_found THEN 
    htp.p(''); 
END; 

Rappelez-vous, la manipulation des erreurs et le retour dans ce processus est à vous! Assurez-vous d'attraper les erreurs courantes telles que no_data_found et/ou too_many_rows. S'ils se produisent et ne sont pas pris au piège, les chances sont grandes que vous rencontrerez des erreurs javascript parce que votre code de rappel javascript ne peut pas gérer l'erreur (qui en apex sera une page entière html avec le message d'erreur).
En outre, comme vous pouvez le voir, j'utilise la variable x01, qui est l'une des 10 variables temporaires globales de l'apex. De cette façon, il n'est pas nécessaire d'utiliser un élément de page et de soumettre la valeur à l'état de session pour cela.

Si vous voulez mettre ce code dans une action dynamique, vous pouvez. Choisissez "Change" comme événement et jQuery selector si vous optez pour une action dynamique, et en tant que vrai choix d'action, exécutez le code javascript. Vous pouvez ensuite mettre le code de fonction ici. À l'exception que $(this) devra être $(this.triggeringElement)

+0

colonne 'description' dans ma forme tabulaire est' autocomplete'. c'est aussi utiliser appel ajax. quand je choisis la description de la liste d'autocomplete, ceci ne fonctionne pas. Si j'écris une description complète sans sélectionner dans la liste de saisie semi-automatique, c'est un travail. comment pourrais-je résoudre ce problème? – Bishan

+0

Quel type de saisie semi-automatique avez-vous? Un jQuery? Si oui, avez-vous quelque chose lié aux événements de la saisie semi-automatique qui pourrait annuler quelque chose? L'événement de changement devrait simplement se déclencher pour un élément de saisie semi-automatique, je l'ai essayé moi-même avec à la fois l'événement de changement pour la saisie semi-automatique et un événement de modification lié à l'élément. – Tom

+0

jQuery un avec Ajax rappeler – Bishan

Questions connexes