Build dialog user interface

Hi all,
I'm building my first UI with javascript and Indesign.
Unfortunatly, I don't understand how to align the static text label with the editext label…
My goal is to align the labelBitmap, limitBitmap. The result have to look like this: "limite image bitmap 1200 dpi" on 1 ligne.
Can someone help me?
Thanks you for your answer.
I use the following code:
function createDialog() {
          var myArray = [];
     var myListBoxBounds = [0, 0, 564, 160];
          if (app.extractLabel("KasIgnoredFolders") != "") {
                    myArray = app.extractLabel("KasIgnoredFolders").split(",");
          var dlg = new Window("dialog", "réduction d'images");
          dlg.orientation = 'column';
          dlg.alignChildren = 'top';
          dlg.btnPnl = dlg.add('panel', undefined, "images ignorées");
          dlg.btnPnl.orientation = 'column';
          dlg.btnPnl.helpTip = "ajouté une image si vous ne souhaitez pas qu'elle soit prise en compte par ce script";
          dlg.btnPnl.listBox = dlg.btnPnl.add('listbox', undefined, myArray, {multiselect:true});
          dlg.btnPnl.listBox.bounds = myListBoxBounds;
          dlg.btnPnl.grp = dlg.btnPnl.add('group');
          dlg.btnPnl.grp.orientation = 'row';
          dlg.btnPnl.grp.addBtn = dlg.btnPnl.grp.add('button', undefined, "ajouter image");
          dlg.btnPnl.grp.addBtn.helpTip = "ajouter une image à la liste";
          dlg.btnPnl.grp.removeBtn = dlg.btnPnl.grp.add('button', undefined, "supprimer image");
          dlg.btnPnl.grp.removeBtn.helpTip = "supprimer l'image sélectionnée de la liste";
          dlg.btnPnl.grp.remAllBtn = dlg.btnPnl.grp.add('button', undefined, "supprimer toutes");
          dlg.btnPnl.grp.remAllBtn.helpTip = "supprimer toutes les images de la liste";
          dlg.grp = dlg.add('panel', undefined, "réglages");
    dlg.grp.orientation = 'row';
          dlg.grp.subGrp = dlg.grp.add('group');
          dlg.grp.subGrp.radioPanel_left = dlg.grp.subGrp.add('panel', undefined, "sous-échantillonnage");
          dlg.grp.subGrp.radioPanel_left.alignment = 'left';
          dlg.grp.subGrp.radioPanel_left.alignChildren = 'left';
    dlg.grp.subGrp.radioPanel_left.rad1 = dlg.grp.subGrp.radioPanel_left.add('radiobutton', undefined, "activé");
          dlg.grp.subGrp.radioPanel_left.rad2 = dlg.grp.subGrp.radioPanel_left.add('radiobutton', undefined, "désactivé");
          dlg.grp.subGrp2 = dlg.grp.add('group');
          dlg.grp.subGrp2.radioPanel = dlg.grp.subGrp2.add('panel', undefined, "sur-échantillonnage");
          dlg.grp.subGrp2.radioPanel.alignment = 'right';
          dlg.grp.subGrp2.radioPanel.alignChildren = 'left';
    dlg.grp.subGrp2.radioPanel.rad3 = dlg.grp.subGrp2.radioPanel.add('radiobutton', undefined, "activé");
          dlg.grp.subGrp2.radioPanel.rad4 = dlg.grp.subGrp2.radioPanel.add('radiobutton', undefined, "désactivé");
    //-----------------------limit text box------------------------------ here is the problem ---------------------------
    dlg.grp.subGrp2.radioPanel.labelBitmap = dlg.grp.subGrp2.radioPanel.add('statictext', undefined, 'limite image bitmap');
    dlg.grp.subGrp2.radioPanel.limitBitmap = dlg.grp.subGrp2.radioPanel.add('edittext', undefined, '1200');
          dlg.grp.subGrp2.radioPanel.limitUnitBitmap = dlg.grp.subGrp2.radioPanel.add('statictext', undefined, 'dpi');
    dlg.grp.subGrp2.radioPanel.labelRaster = dlg.grp.subGrp2.radioPanel.add('statictext', undefined, 'limite image pixelisée');
    dlg.grp.subGrp2.radioPanel.limitRaster = dlg.grp.subGrp2.radioPanel.add('edittext', undefined, '300');
          dlg.grp.subGrp2.radioPanel.limitUnitRaster = dlg.grp.subGrp2.radioPanel.add('statictext', undefined, 'dpi');
          // ----------------------- navigation ------------------------------
    dlg.okBtn = dlg.add('button', undefined, "lancer le script", {name:'ok'});
    dlg.cancelBtn = dlg.add('button', undefined, "annuler", {name:'cancel'});
    var myDialogResult = dlg.show();
    var myResult = {};
    return myResult;

Hi thanks you for your reply!
It's work now.
I add my code if it can help someone:
#include "tools.jsx"
#include "pictures_tools.jsx"
@Example
var results = create_dialog_main ();
if(results != null){
    $.writeln (results.cibleBitmap)
    $.writeln (results.cibleRaster);
    $.writeln (results.limitBitmap);
    $.writeln (results.limitRaster);
    $.writeln ("prop "+results.isPictureProp)
    $.writeln ("sous echant "+results.isSousEchantillonnage)
    $.writeln ("sur echant "+results.isSurEchantillonnage)
    for(var i = 0; i<results.array_of_ignored_picture.length; i++){
        $.writeln("img: "+results.array_of_ignored_picture[i]);
else{
        alert("le script a été annulé");
        exit();
* function who create a dialog box for the script
* @return an array of results if the user click run, then return null
function create_dialog_main() {
    var myArray = [];
    var myListBoxBounds = [0, 0, 500, 200];
    var myListMargins = [10, 10, 0, 0];
    // window
    var win = new Window("dialog", "réduction d'images");
    win.orientation = "column";
    win.alignChildren = "top";
    // ignored img panel
    var ignored_pan = win.add("panel", undefined, "images ignorées");
    var grp_ignored = ignored_pan.add("group");
    grp_ignored.orientation = "column";
    grp_ignored.helpTip = "ajouté une image si vous ne souhaitez pas qu'elle soit prise en compte par ce script";
    grp_ignored.listBox = grp_ignored.add("listbox", undefined, myArray, {multiselect:true});
    grp_ignored.listBox.bounds = myListBoxBounds;
    grp_ignored.margins = myListMargins;
    // group button
    var ignored_pan_button = ignored_pan.add("group");
    ignored_pan_button.orientation = "row";
    ignored_pan_button.addBtn = ignored_pan_button.add("button", undefined, "ajouter image");
    ignored_pan_button.addBtn.helpTip = "ajouter une image à la liste";
    ignored_pan_button.removeBtn = ignored_pan_button.add("button", undefined, "supprimer image");
    ignored_pan_button.removeBtn.helpTip = "supprimer l'image sélectionnée de la liste";
    ignored_pan_button.remAllBtn = ignored_pan_button.add("button", undefined, "supprimer toutes");
    ignored_pan_button.remAllBtn.helpTip = "supprimer toutes les images de la liste";
    // settings panel
    var setting_pan = win.add("panel", undefined, "réglages");
    setting_pan.orientation = "column";
    setting_pan.minimumSize = [500, 0];
    //group cible and prop
    var grp_cible_prop = setting_pan.add("group");
    grp_cible_prop.orientation = "row";
    grp_cible_prop.alignment = "left";
    //group cible bitmap, cible raster
    var grp_bitmap_raster = grp_cible_prop.add("group");
    grp_bitmap_raster.orientation = "column";
    grp_bitmap_raster.minimumSize = [250, 0];
    //group bitmap cible
    var cible_bitmap_pan = grp_bitmap_raster.add("group");
    cible_bitmap_pan.orientation = "row";
    cible_bitmap_pan.alignment = "left";
    cible_bitmap_pan.labelCibleBitmap = cible_bitmap_pan.add("statictext", undefined, "cible image bitmap");
    cible_bitmap_pan.cibleBitmap = cible_bitmap_pan.add("edittext", undefined, "1200");
    cible_bitmap_pan.cibleBitmap.minimumSize = [60,0];
    cible_bitmap_pan.cibleUnitBitmap = cible_bitmap_pan.add("statictext", undefined, "dpi");
    //group raster cible
    var cible_raster_pan =  grp_bitmap_raster.add("group");
    cible_raster_pan.alignment = "left"
    cible_raster_pan.orientation = "row";
    cible_raster_pan.labelCibleRaster = cible_raster_pan.add("statictext", undefined, "cible image pixelisée");
    cible_raster_pan.cibleRaster = cible_raster_pan.add("edittext", undefined, "300");
    cible_raster_pan.cibleRaster.minimumSize = [50, 10];
    cible_raster_pan.cibleUnitRaster = cible_raster_pan.add("statictext", undefined, "dpi");
    // group proportionnelle
    var prop_pan = grp_cible_prop.add("panel", undefined, "images non-proportionnelles");
    prop_pan.alignChildren = "left";
    prop_pan.minimumSize = [200, 0];
    prop_pan.rad1 = prop_pan.add("radiobutton", undefined, "autorisées");
    prop_pan.rad2 = prop_pan.add("radiobutton", undefined, "interdites");
    prop_pan.rad2.value = true;
    // group ss echantillonnnage and ss echantillonnage -> group echantillonnage
    var grp_echantillonnage = setting_pan.add("group");
    grp_echantillonnage.orientation = "row";
    // group ss echantillonnage
    var ss_echantillonnage_pan = grp_echantillonnage.add("panel", undefined, "sous-échantillonnage");
    ss_echantillonnage_pan.minimumSize = [75,140];
    var grp_ss_echantillonnage = ss_echantillonnage_pan.add("group");
    grp_ss_echantillonnage.alignChildren = "left";
    grp_ss_echantillonnage.orientation = "column";
    grp_ss_echantillonnage.alignment = "left";
    grp_ss_echantillonnage.margins = [0,25,0,0];
    ss_echantillonnage_pan.rad1 = grp_ss_echantillonnage.add("radiobutton", undefined, "activé");
    ss_echantillonnage_pan.rad1.value = true;
    ss_echantillonnage_pan.rad2 = grp_ss_echantillonnage.add("radiobutton", undefined, "désactivé");
    // group sur-echantillonnage
    var sur_echantillonnage_pan = grp_echantillonnage.add("panel", undefined, "sur-échantillonnage");
    sur_echantillonnage_pan.alignChildren = "left";
    sur_echantillonnage_pan.rad1 = sur_echantillonnage_pan.add("radiobutton", undefined, "activé");
    sur_echantillonnage_pan.rad1.value = true;
    sur_echantillonnage_pan.rad2 = sur_echantillonnage_pan.add("radiobutton", undefined, "désactivé");
    // group limite bitmap
    var limite_bitmap_pan=  sur_echantillonnage_pan.add("group");
    limite_bitmap_pan.orientation = "row";
    limite_bitmap_pan.labelBitmap = limite_bitmap_pan.add("statictext", undefined, "résolution min. image bitmap");
    limite_bitmap_pan.limitBitmap = limite_bitmap_pan.add("edittext", undefined, "1000");
    limite_bitmap_pan.limitUnitBitmap = limite_bitmap_pan.add("statictext", undefined, "dpi");
    // group limit raster
    var limite_raster_pan =  sur_echantillonnage_pan.add("group");
    limite_raster_pan.labelRaster = limite_raster_pan.add("statictext", undefined, "résolution min. image pixelisée");
    limite_raster_pan.limitRaster = limite_raster_pan.add("edittext", undefined, "200");
    limite_raster_pan.limitUnitRaster = limite_raster_pan.add("statictext", undefined, "dpi");
     // ----------------------- navigation ------------------------------
    var grp_navigation = win.add("group");
    grp_navigation.orientation = "row";
    grp_navigation.alignment = "right";
    grp_navigation.cancelBtn = grp_navigation.add("button", undefined, "annuler", {name:"cancel"});
    grp_navigation.okBtn = grp_navigation.add("button", undefined, "lancer le script", {name:"ok"});
    //-------------------------- functions ----------------------------
    cible_bitmap_pan.cibleBitmap.onChange = function(){
        is_textfield_valid (this, "1200", "vous devez saisir un nombre entier");
    cible_raster_pan.cibleRaster.onChange = function(){
        is_textfield_valid (this, "300", "vous devez saisir un nombre entier");
    limite_bitmap_pan.limitBitmap.onChange = function(){
        is_textfield_valid (this, "1000", "vous devez saisir un nombre entier")
    limite_raster_pan.limitRaster.onChange = function(){
        is_textfield_valid (this, "200", "vous devez saisir un nombre entier");
    function is_textfield_valid(object, default_value_number, alert_str){
        if (!isInt(object.text)) {
            alert(alert_str);
            object.text = default_value_number;
        if(parseInt (object.text) < 1){
            alert("vous devez saisir un nombre plus grand ou égal a 1");
            object.text = default_value_number;
    function is_limitfield_valid(current_object, object_to_compare, default_value_number, alert_str){
        is_textfield_valid (current_object, default_value_number, alert_str);
        if(parseInt(current_object.text)){
    function isInt(n) {
        return parseFloat(n) == parseInt(n, 10) && !isNaN(n);
    ignored_pan_button.addBtn.onClick = function() {
                    var array_of_files = File.openDialog ("selectionner une image ou plusieurs images", get_file_filter ([".psd", ".png", ".jpg", ".eps"], "choisir une image"), true);
                    if (array_of_files != null) {
             for(var index = 0; index<array_of_files.length; index++){
                if (!is_in_array(File.decode(array_of_files[index].name), myArray)) {
                    var file_name = array_of_files[index].fsName.toLowerCase();
                    var extension = file_name.slice(file_name.lastIndexOf ("."));
                     if (extension == ".eps") {
                        var eps_img = new File(file_name);
                        if(is_raster_eps(eps_img)){
                            myArray.push(File.decode(array_of_files[index].name));
                        else{
                            alert("seule les fichiers eps de type image (non-vectorielle) peuvent être ajoutés");
                     else{
                        myArray.push(File.decode(array_of_files[index].name));
                else {
                                        alert("cette image a déjà été ajoutée");
             grp_ignored.remove(grp_ignored.listBox);
             grp_ignored.listBox = grp_ignored.add('listbox', myListBoxBounds, myArray, {multiselect:true});
             grp_ignored.listBox.bounds = myListBoxBounds;
             grp_ignored.margins = myListMargins;
    ignored_pan_button.remAllBtn.onClick = function() {
                    grp_ignored.listBox.removeAll();
                    myArray = [];
    ignored_pan_button.removeBtn.onClick = function() {
                    if (grp_ignored.listBox.selection != null) {
                              for (var i = grp_ignored.listBox.selection.length - 1; i  >= 0; i --) {
                                        myArray.splice(grp_ignored.listBox.selection[i].index, 1);
                                        grp_ignored.listBox.remove(grp_ignored.listBox.selection[i]);
        else{
            alert("selectionner une image puis clicker sur le bouton supprimer image");
    //-------------------------- return values ----------------------------
    var results = {};
    // if show == 1 the user click run
    if(win.show() == 1){
        // is the picture prop check or not
        if(prop_pan.rad1.value){
            results.isPictureProp = true;
        else{
            results.isPictureProp = false;
        // is the sous echantillonnage check
        if(ss_echantillonnage_pan.rad1.value){
            results.isSousEchantillonnage = true;
        else{
            results.isSousEchantillonnage = false;
        // is the sur echantillonnage check
        if(sur_echantillonnage_pan.rad1.value){
            results.isSurEchantillonnage = true;
        else{
            results.isSurEchantillonnage = false;       
        // return the target value, the validation is done during onChange event
        results.cibleBitmap = cible_bitmap_pan.cibleBitmap.text;
        results.cibleRaster = cible_raster_pan.cibleRaster.text;
        results.limitBitmap = limite_bitmap_pan.limitBitmap.text;
        results.limitRaster = limite_raster_pan.limitRaster.text;
        results.array_of_ignored_picture = myArray;
    //else the script was canceled
    else{
        results = null;
    return results;
function get_file_filter(array_of_ext, prompt_str){
    function return_filter(file){
        var is_valid = false;
        var index = 0;
        while(!is_valid){
                while (file.alias) {
                    file = file.resolve();
                    if (file == null) {
                        is_valid = false
                if (file.constructor.name == "Folder") {
                    is_valid= true;
                else{
                    var extension = file.name.toLowerCase().slice(file.name.lastIndexOf("."));
                    if (extension.indexOf (array_of_ext[index]) > -1 ){
                        is_valid = true;
                index++;
            if(index>=array_of_ext.length){
                break;
        return is_valid;
    return return_filter;

Similar Messages

  • Error in report builder wizard user interface

    I am getting error 'REP-31954: Error in the Report Builder Chart Wizard user interface'.
    The help subsystem states that I should make sure that the Chart Builder Wizard libraries are properly installed.
    I am sure they are because all other wizards work fine, along with the Forms, Reports, etc.
    I searched using Google and found two messages that indicate this is a bug in the program and not library installation related.
    Does anyone know if this is indeed a bug that has not been resolved, or do I need to troubleshoot more on my end.
    I re-linked Oracle graphics and checked the env variables, but nothing gets the Chart Wizard to work within Reports or Forms.
    Any help/advice would be greatly appreciated.
    Thank you.

    Hi.
    I am running developer 6i on my home machine (with Oracle 8i, v 8.1.7). I am at work at the moment, and I can't recall what the Reports version is. The same error occurs with Forms.
    The filename that I downloaded is called 'd2k6irelease2.tar'.
    I downloaded the version that is currently on Oracle OTN's download site, so I presume that is the latest version that should contain all patches, updates, etc.
    Thank you for responding!

  • Re:error in report builder wizard user interface

    I am getting error 'REP-31954: Error in the Report Builder Chart Wizard user interface'.
    The help subsystem states that I should make sure that the Chart Builder Wizard libraries are properly installed. I am sure they are because all other wizards work fine, along with the Forms, Reports, etc. I searched using Google and found two messages that indicate this is a bug in the program and not library installation related. Does anyone know if this is indeed a bug that has not been resolved, or do I need to troubleshoot more on my end. I re-linked Oracle graphics and checked the env variables, but nothing gets the Chart Wizard to work within Reports or Forms. I am running developer 6i on my home machine (with Oracle 8i, v 8.1.7). The same error occurs with Forms. The filename that I downloaded is called 'd2k6irelease2.tar'. I downloaded the version that is currently on Oracle OTN's download site, so I presume that is the latest version that should contain all patches, updates, etc.
    Any help/advice would be greatly appreciated.
    Thank you for responding!

    Hi Adrian,
    Got the following when grepped through the web. You can give a try and see whether it works :
    1) Open the report in the Builder. In the properties for the graphic image, change to the proper UNIX path. Also, ensure the .ogd file which is referenced is also placed in the proper UNIX directory, so that the new path is reflected accurately.
    2) Ensure that your environment have the ORACLE_HOME set properly and then try re-linking with Graphics.
    Thanks,
    Vinod

  • Can I build an user Interface using a proccess with Human Task?

    Hi,
    I'm building an application, web application, with a several screens. The application just will be used for entering some data and depending on the data entered, some bpel process will be launched.
    I'm thinking about implementing a MVC using a BPEL Process with Human Task. I mean: I'll make everything with bpel process (*including the application*). I would make a bpel process with some human task. This process would be like a Spring Webflow file or similar. Each screen wouldl be a human task but with synchronus nature. Will it be possible? Will it be so complicated? Is it usual?
    Other way would be making a web application to enter data and then launch a proccess that will record the information in the database. That would be the normal way.
    Thank you so much.

    Hello,
    There's a more powerfull solution you may use.
    You can create a View. Some Views can be updatable (it means that it's possible to update
    the Table from the View) and, you can add constraints (Primay Key) on a View.
    For instance:
    CREATE OR REPLACE VIEW {color:red}User2.view_name{color}
    ({color:red}col1{color}, {color:red}col2{color}
    UNIQUE RELY DISABLE NOVALIDATE,
    CONSTRAINT {color:red}pk_view{color}
    PRIMARY KEY {color:red}col1{color}) RELY DISABLE NOVALIDATE
    ) AS
    SELECT {color:red}col1{color},{color:red}col2{color} FROM {color:red}User1.Table1{color};This example is from the link bellow:
    [http://www.psoug.org/reference/views.html]
    Hope it can help.
    Best regards,
    Jean-Valentin

  • Accessing TS Watch view window in LabVIEW user interface?

    HI All
    I am trying to build TS user interface in LabVIEW. I want to give ability to user to debug sequence while running.(ability to put breakpoint and view the value of variables in watch view window).
    Can we access TS watch view window in LabVIEW .I did not find any activex control for it.
    If not how can you give user ability to debug sequence?
    Does anyone have idea about this?

    hi
    I have tried using that.Call stack gives you option to view current execution from the list of executions.(Call stack in TS basically).
    It does not give you watch view interface .
    Basically I want user to give option to debug sequence . So on the execution view control he should be able to put breakpoint and then once execution reaches breakpoint , he should be able tov view variables values by adding them in watch view pane.
    any ideas how to do this?

  • A more successful experiment in creating compositable user interfaces for Config Dialogs

    A couple weeks ago I posted an experiment in creating compositable user interfaces using transparent subpanels. The approach might best be described as, "It at least was notable for being novel."
    Today, I'm posting another attempt, this one along more traditional lines, and far more successful. Particularly notable: this one can do all the arbitrary composition of the last one AND it solves the TAB order problem.
    This solution uses a picture control and renders N copies of a control. When the user tabs to a control or moves the mouse over the control, a real control slides into that position to be able to catch the events (update mouse over draw state, highlight for keyboard focus, handle typing, etc). When the Value Change occurs, a master array of data is updated and the picture control is updated.
    This is something that has been attempted in various forms in the past, but there are two aspects of this particular implementation that make it nice:
    its programmatic interface for specifying the behavior of the various objects should make it fairly easy for a user of the framework to programmatically generate their dialogs
    it handles the TAB problem without flickering, something I haven't seen in other attemps
    This idea spawns out of conversation about the previous experiment -- thanks to those of you who posted on various forums, e-mailed me, or, in a couple cases, showed up at my desk. That last one is not something I'm encouraging unless you work at NI... just saying. :-)
    Now, this experiement has already yeilded some interesting conversation. We note that as long as controls are instantiated independent of each other -- that is, no property of one control depends upon the property of another control -- this dialog system scales nicely. But in this experiment, I implemented Radio Buttons, which interact with each other -- when one is set True, the others go False. As soon as controls start interacting with each other (such as graying out one control when a checkbox is toggled, or having expandable sections, or really complex cases like updating a graph as some options change, like happens in some Express VI config dialogs) then we start needing ways to refer to the other controls. This rapidly moves us in one of two directions: naming controls or creating references. The naming approach is definitely my preference as it fits better with dataflow and I can do some interesting effects with breaking apart some of the tree. But all of this quickly starts sounding like "Please implement a XAML parser in LabVIEW." For those of you unfamiliar with XAML, in the world of UI design, it might very well be the coolest thing since sliced bread. A XAML string would indeed fit with dataflow, and we could start building that up. I hesitate to head down this road for two reasons. One, as many have noted, there's really not a good XML parsing library written in LabVIEW that can give me a useful DOM tree. Two, that's a huge project and my gut sense is that you'd have to complete a fairly large chunk of it before you'd start seeing any return on investment. But it is worth thinking about -- I might be wrong. Wouldn't be the first time. This code that I've posted today can at least get you started on the generation side if one of you decides to become industrious.
    I'm turning my attention away from this project for now... coding in G is lots of fun, and I wish I could spend more days doing it, but this has been a side project and it's time to get back to my assigned projects in text programming. Building a powerful platform for automatic UI generation in LabVIEW would be really useful -- I see lots of requests for this sort of thing, and other languages are pulling ahead of us in this domain.
    [UPDATE 5/17/2012 - There is an improved version.]
    Solved!
    Go to Solution.
    Attachments:
    ConfighThroughCtrlCreation.zip ‏558 KB

    Elijah K wrote:
    Thanks for posting this Aristos.  I would normally be one of those to go bug you at your desk, but in case I'm not the only one with this question... which particular flickering problem are you referring to?  The act of switching tabs?  In all honesty, I've never noticed...
    When you move controls around on the screen, normally you try to Defer Panel Updates while you do that. But Defer Panel Updates has an effect on control's abilities to catch certain mouse clicks, so when you're trying to move a control to catch the mouse, you have to work a lot without Defer Panel Updates, so if you're adjusting captions, etc, to match the new location, you can see flicker as properties adjust. You can move the control off-screen, as long as you have already updated the picture control to reflect the changes. It took a while to catch all the ways that the flickering can crop up. I think I got 'em all.
    Attached are the VIs saved for LV 2009. Actually, they're saved for LV 8.6, but it doesn't work in 8.6 because of a bug in the picture control that existed back then.
    Attachments:
    ComposableUI_LV2009.zip ‏391 KB

  • Building a simple User Interface

    HI,
    I'm interested in building a very simple User Interface. All I want to see is a panel with buttons and each button will execute a test sequence file.
    1) Is it possible to create such a panel with CVI or LV and then call a sequence file which will be handled by TS?
    In that case, I would expect to see TS panels while executing the sequence and once finished (or closed by the user) to come back to the original panel that calls the sequences.
    2) is it better to create this panel with TS utility? (I have never done it and suspect it will not be a simple job).
    Thanks
    Rafi

    You can do this in test stand if a simple interface containing just a prompt and buttons will do. In your main sequence, the first step is to create a MessagePopup step. Put a title like "Test Selection". Put a message like "Choose a Test". Label button 1 "test 1". Label button 2 "test 2", and so on. Create a local numerical variable called TestNum. In the post expression section of the first step, add the line Locals.TestNum = Step.Result.ButtonHit. You next step can be a sequence call to the first test sequence. Add a precondition that Locals.TestNum==1. The following steps can all be sequence calls to your other test sequences with preconditions of Locals.TestNum==x, where x is the number corresponding to the button hit in step one. When the selected test sequence is done, the main sequence will be repeated with the message popup asking for a test to run.
    - tbob
    Inventor of the WORM Global

  • User interface builder for JSPs?

    Hi
    Has anyone used a good builder for a web user interface based on JSPs?
    Thanks

    There is no template for Interactive Reports like for a "normal" report. You need to modify the CSS and supply your own for this to happen.
    I believe most things are tagged with #apexir - firebug with Firebox is invaluable. This thread may help:
    Re: changing the look and feel of interactive report.

  • Why do I get -18001 Errors using Customised TestStand User Interface

    Hi all
    I have a problem when attempting to run my application on my host NT PC. I have a customised operator interface to TestStand written using Labview 5.1.1 and built using the LabVIEW application builder. I am running the TestStand Development (Run-Time) System on my host PC.
    The problem is that as soon as I go to run my sequence of vis (mass compiled using the same version of LabVIEW and assembled for run-time distribution) I receive the error '-18001 VI Not Executable.'
    I think this is probably to do with how I've included the ActiveX server in my LabVIEW User Interface application, but knowing very little about ActiveX I'm not sure exactly what the problem is.
    If anyone
    has any ideas, I would be extremely grateful for any assistance you could offer. My TS version is 1.0.1
    Thanks
    Dave

    David,
    I would like to add to Richard's input. The typical reasons a VI cannot be executed that cause this message are:
    1) There is an error in the VI such that the run arrow of the VI is broken when the VI is open in the LV development environment. This problem is usually easy to debug because you should get the error (shown below) when running your sequence in the sequence editor using the default "LabVIEW" ActiveX server provided by the LV development environment (not the LV ActiveX server provided by your operator interface which is by default named "TestStandLVGUIRTS" ).
    An error occurred in the 'MyVIStep' step of the 'MainSequence' sequence in 'MySequence.seq'.
    LabVIEW : VI is not executable.
    An error occurred accessing the LabVIEW ActiveX automation server. Error Code: -18001
    2) The same error will occur when
    a. you are using any LV ActiveX server other than the "LabVIEW" server provided by the LV development environment, AND
    b. at least one of the called VI was not assembled for distribution properly. This means that not all test VIs and their *entire* hierarchy were distributed.
    I am not sure exactly what you have done so have compiled some information that I think will help. Below I have included the document, Overview of Distributing TestStand when your Sequences use the LV Standard Prototype Adapter, which will appear in the NIDZ shortly. Another useful document is the NIDZ document Distributing LabVIEW Test VIs, which you can obtain from our website. Read these documents before preceding with the steps immediately below, which give you an example process for distributing. This may help provide a better understanding and guidance in the distribution process. We are working to simplify this process in future versions of TestStand.
    For the following example distribution I recommend that you are use default shipping code so that the problem is not complicated with potential errors added through customizations you have made.
    Building The Operator Interface
    The following are steps if you are using a LabVIEW operator interface.
    1) Copy the contents of \OperatorInterfaces\NI\LV to \OperatorInterfaces\User\LV.
    2) Open a new VI in LabVIEW. Make sure all other VIs are closed.
    3) In LabVIEW Select Tools>>Build Application or Shared Library
    4) In the builder click the Load button and load \OperatorInterfaces\User\LV\testexec.bld. This build script is configured to create testexec.exe that contains the LV ActiveX server with the name of TestStandLVGUIRTS (see the Application tab of the builder).
    5) In the builder click Build.
    6) Once the application testexec.exe is built, run it once so that the server TestStandLVGUIRTS is automatically registered. You do not need to run a sequence. Close texec.exe.
    Creating a LabVIEW Run-time Server
    If you are using the LabVIEW operator interface then skip this section. The following steps are meant for those who use an operator interface written in a ADE other than LabVIEW. They provide you with a LabVIEW run-time server that is used by TS to run your VIs.
    1) Copy the contents of \Components\NI\RuntimeServers to \Components\User\RuntimeServers.
    2) Open a new VI in LabVIEW. Make sure all other VIs are closed.
    3) In LabVIEW Select Tools>>Build Application or Shared Library
    4) In the builder click the Load button and load \Components\User\RuntimeServers\LabVIEW\TestStandLVRTS.bld. This build script is configured to create TestStandLVRTS.exe that contains the LV ActiveX server with the name of TestStandLVRTS (see the Application tab of the builder).
    5) In the builder click Build.
    6) Once the application TestStandLVRTS.exe is built, run it once so that the server TestStandLVRTS is automatically registered on your development machine. Close TestStandLVRTS.exe.
    Assembling the Test VIs for Run-Time Distribution
    This distribution process uses one of the shipping TS examples that calls LV VIs.
    1) From LV mass compile all VIs in the directory \Examples\AccessingArrays\UsingLabVIEW\. Please make sure that there were no error messages in the Status tab of the Mass Compile dialog box.
    2) In the sequence editor open \Examples\AccessingArrays\UsingLabVIEW\AccessingArrays.seq
    3) Confirm that the sequence runs without problem.
    4) In the sequence editor select Tools>>Assemble Test VIs for Run-time Distribution.
    5) If you are using TestStand 2.0 select \Examples\AccessingArrays\UsingLabVIEW\AccessingArrays.seq as the file from which the VIs should be assembled.
    6) Set the target directory to be something distinct like C:\temp\AssblVIs.
    7) If you are using TestStand 2.0 skip adding Dynamic VIs
    8) Save with or without diagrams. Its your choice.
    Change Search Directories
    Once the VIs are assembled successfully, you must add the new target directory to the TS search directories.
    1) In the sequence editor select Configure>>Search Directories.
    2) Add your target search directory (e.g. C:\temp\AssblVIs) to the search directories.
    3) Close the Edit Search Directories dialog box.
    4) Confirm that your sequence steps now reference the assembled VIs. Right click on a step in the sequence and select Specify Module.
    5) The dialog should show that the code module is found in the target directory (e.g. C:\temp\AssblVIs) that you just added to the search directories.
    6) Run the sequence. This is the initial test to see if the VIs are assembled properly.
    Switch the LV Adapter to use the TestStandLVRTS server or TestStandLVGUIRTS
    1) In the sequence editor select Configure>>Adpaters.
    2) In the Configurable Adapters control select the LabVIEW Standard Prototype Adapter and then click the Configure button.
    3a) If you are not using the LV operator interface then switch the ActiveX server to TestStandLVRTS.
    3b)If you are using the LV operator interface then switch the ActiveX server to TestStandLVGUIRTS.
    4) Close the adapter configuration dialog boxes. You will get a couple of questions boxes. Just click OK each time.
    5) Now run your sequence. If successful you are no longer using the LV development environment to run your VIs. This shows that the VIs were assembled correctly, the LV ActiveX server is working properly and that the search directories are configured properly.
    You can now try and run the sequence using your operator interface on you development computer. If this test works it means that you have also confirmed that your operator interface is working correctly with all the other components. Now it is just a matter of moving all the component correctly to the target machine.
    Distributing Components
    -To distribute your operator interface use the distribution tool of the application development environment (ADE) in which you built your operator interface.
    -To distribute the TS engine using the Run Engine Installation Wizard tool. This tool is typically not used for distributing your sequences and VIs, which you will probably distribute more frequently than the TS engine. It does distribute and register your LV run-time server (if you are using one) as long as you have stored it in \Components\User\RuntimeServers. It also distributes other TS components that you have stored under the directory \Components\User\.
    -You can use whatever distribution system you like to distribute your VIs and sequence files (e.g. ZIP and network transfer are popular) . Ensure that you distribute the assembled VIs and not the development VIs. Also ensure that the location of the VIs on the target machine is one of the TS search directories.
    Hope this helps.
    Regards,
    Kitt
    =========================================
    Title:
    Overview of Distributing TestStand when your Sequences use the LV Standard Prototype Adapter
    The general outline of the components to be distributed and the actions to take are followed by a more detailed description.
    Components that need to be distributed:
    TS engine
    Operator interface
    LabVIEW executable that will act as a LabVIEW ActiveX automation server (If the operator interfaces is written in LabVIEW, it can function as the LabVIEW ActiveX automation server.).
    LabVIEW run-time engine
    LabVIEW test VIs
    Test sequence files
    Actions before distributing:
    It is recommended that you test the distribution components on the development machine before you distribute them to your target machine. In this manner you can more easily debug errors that you may encounter
    Create the executable that will serve as your LabVIEW ActiveX server on the target machine (components 2 or 3 above).
    Assemble the test VIs for distribution.
    Update the TestStand search directories so that the sequences reference the assembled VIs.
    Configure the LabVIEW Standard Prototype Adapter to use the LabVIEW ActiveX server that you will install on the target machine.
    Test the distribution components on the development machine.
    Enter section headings, separating each section with a line break:
    TS Engine Component
    Operator Interface Component
    LabVIEW ActiveX Server
    Configuring the LabVIEW Standard Prototype Adapter
    LabVIEW Run-time Engine Component
    Assembling your Test VIs for Distribution
    Note
    TS Engine Component
    With any TestStand distribution you must install the TestStand runtime engine on the target machine. The Run Engine Installation Wizard tool, found under Tools menu of the Sequence Editor, facilitates this process. The wizard tool will create two files, SetupTSEngine.exe and TSEngine.cab. Move the two files to your target machine and run SetupTSEngine.exe to install the TestStand engine.
    These installation files include the current configuration settings that exist in the Sequence Editor at the time the tool is invoked. It also includes all process models, TestStand types and step type modules. If you have customized components of TestStand and saved them under the directory TestStand\Components\User, then the components will also be included with the engine installation.
    You must purchase at least a base deployment or debug deployment license for each machine on which you install the TestStand engine.
    Operator Interface Component
    You will also need to install an operator interface executable on the target machine. This program acts as a client to the TS runtime engine, controlling the execution of sequences and displaying their progress. TestStand ships with several versions of TestStand operator interfaces, which are written in different application development environments (ADE). For distributing the operator interface executable, refer to the application development environment in which it was created.
    LabVIEW ActiveX Server
    You must have a LabVIEW ActiveX server on the target machine. TestStand uses the LabVIEW ActiveX server to run VIs using either the LabVIEW development environment or the LabVIEW runtime engine. The LabVIEW ActiveX server is provided by either LabVIEW development environment or by any LabVIEW executable that has been built with �Enable ActiveX Server� selected. This setting can be accessed in the LabVIEW Application Builder during the build process. When this preference is enabled, you must enter a server name. You will use the server name to configure the LabVIEW Standard Prototype adapter in TestStand.
    If your operator interface is written in LabVIEW, then it can act as the LabVIEW ActiveX server on your target machine. TestStand ships with two operator interfaces written in LabVIEW. The standard LabVIEW operator interface is located in TestStand\OperatorInterfaces\NI\LV, while a simplified version is located in TestStand\Examples\OperatorInterfaces\Simple LV. LabVIEW buildscripts are provided for these applications to facilitate building an operator interface in the latest version of LabVIEW. The settings of these buildscripts are such that the applications are LabVIEW ActiveX servers with the server names of TestStandLVGUIRTS for the standard operator interface, and TestStandSimpleLVGUIRTS for the simple operator interface. The applications register the servers the first time they are executed. If you want to manually register or unregister one of the servers, you can invoke the executable with the /RegServer and /UnregServer command-line arguments respectively.
    If your operator interface is programmed in a language other than LabVIEW, then you will need a separate LabVIEW executable to provide the LabVIEW ActiveX server on your target machine. For this purpose, TestStand ships with a LabVIEW run-time server application located in TestStand\Components\NI\RuntimeServers\LabVIEW. A LabVIEW buildscript is provided for this application to facilitate building a run-time server in the latest version of LabVIEW. The settings of this buildscript are such that the application is a LabVIEW ActiveX server with the server name of TestStandLVRTS.
    Note: When an ActiveX executable server is accessed, the executable is launched automatically if it is not already executing.
    Configuring the LabVIEW Standard Prototype Adapter
    When TestStand runs a VI using the LabVIEW Standard Prototype adapter, it does so using a LabVIEW ActiveX server. By default the adapter is configured to use the �LabVIEW� server, which is provided by the LabVIEW development environment. If you do not have the LabVIEW development environment on your target machine then you must configure the LabVIEW Standard Prototype adapter within TestStand to use a different server (e.g. TestStandLVGUIRTS, TestStandLVRTS, or TestStandSimpleLVGUIRTS).
    To configure your LabVIEW Standard Prototype adapter, select Configure>>Adapters from the menu. In the Adapter Configuration dialog box that appears, select the LabVIEW Standard Prototype Adapter in the Configurable Adapters section. Click the Configure button. You can select or type a server name in the Select or Type Which LabVIEW ActiveX Server to User control. If your server name is not in the list you will need to type it.
    As explained in the LabVIEW ActiveX Server section above, TestStand ships with LabVIEW buildscripts to build a LabVIEW operator interface and a LabVIEW run-time server application. These applications are LabVIEW ActiveX servers with server names TestStandLVGUIRTS and TestStandLVGRTS, respectively. You can configure you LabVIEW Standard Prototype adapter to use one of these servers.
    LabVIEW Run-time Engine Component
    If any of your sequence steps use the LabVIEW adapter or if your operator interface is written in LabVIEW, then you must install the LabVIEW runtime engine on the target machine. It is important that your LabVIEW run-time engine is the same version as the VIs that TestStand executes.
    You can find installation files for the LABVIEW 5.1 run-time engine in the LabVIEW installation directory, Labview\APPLIBS\installs\RunTime. In addition, you can choose to automatically distribute and install the LabVIEW run-time engine with the distribution of a LabVIEW executable. Refer to LabVIEW documentation.
    Assembling your Test VIs for Distribution
    After distributing TestStand, you must ensure that your sequences are able to locate the VIs they call, and the VIs must be able to locate their required resources.
    One common mistake is to simply copy the original VIs from the development machine to the target machine. Once you have configured your LabVIEW Standard Prototype adapter to use a LabVIEW ActiveX server other than LabVIEW, your sequence will not be able to execute your original test VIs that your sequences call.
    TestStand provides the Assemble Test VIs for Distribution tool, which gathers test VIs and their required resources, and places them in a common location for distribution. You can then modify your TestStand search directories so that your sequences reference the assembled VIs. These topics are covered in the NIDZ document Distributing LabVIEW Test VIs.
    Links: See Distributing LabVIEW Test VIs below
    Note
    Remember to test your distribution components on your TestStand development system before distributing TestStand. If the execution does not work on the development system it is not going to work on your target machine. On your development machine you have more ability to debug problems you may encounter.
    Note: One common problem of testing distribution components on your TestStand development system is that your sequences reference the original Test VIs instead of the assembled test VIs. Refer to the NIDZ document Distributing LabVIEW Test VIs for assistance.
    Once the components work on your development machine, you are ready to install them on your target machine. The order in which you install these components on the target machine is irrelevant.
    ==============================================

  • TS 4.1 User Interface Forward/Back Buttons

    I'd like to the add the Forward/Back Buttons to my User Interface similar to those in the Sequence Editor. I use a modified version of the Full Featured UI on the production floor and often switch to editor mode to work on the sequence. I find it very cumbersome not to be able to jump back and forth between Sequences while doing so.
    Were the buttons created using the "Editing Class" proporties and methods to build a stack of recently selected sequences?  Or are the buttons already existing with the methods simply needed to be called?
    Any suggestions how to impment this functionality while in edit mode? 
    Thanks

    "but keep in mind that the UI is not meant for developing. It instead was designed with operators debugging in mind."
    I don't agree with that. The UIs are fine for developing if they meets your needs. If not, then you have to weigh using the sequence editor, which is not nearly as customizable, vs the cost of reimplementing whatever you can't do without that the sequence editor already has.
    Note that most of the things that are missing from the UIs would take a fair amount of effort to re-implement (type editing, ...). If there were already simple-user-ready-drop-in-components for the missing features, we probably would have already included them in the UIs.
    We want the UIs to be functional, but the top priority is that they be simple enough such that they can be readily modified.
    Note that in some cases there are apis to support features that aren't in the UIs, but there isn't a complete control that wraps everything. For example, Engine.SearchFiles() is a huge amount of the implementation for find-and-replace, but there currently isn't a user callable dialog for invoking it or a user accessible control for automatically browsing the results, thus we don't currently include that feature in example code for the UIs. I don't know the specifics of forward/back, so I'm not sure how much of the implementation is exposed as public APIs, beyond the goto-location functionality (see Locations.GotoLocation, ...).
    - James

  • FAQ: User Interface Guidelines for CRM 2007 are now available

    The CRM UI Concept Team has made the UI Guidelines for CRM Web Client User Interface (CRM 2007 UI) available to the BPX community:
    This document provides an overview of the on-premise as well as the off-premise versions of the SAP CRM Web Client User Interface (UI). It contains the properties and principles of the SAP CRM Web Client UI that are already committed and available. For planned features, refer to the corresponding specification documents.
    The information in the guidelines starts with general topics, followed by details. The sections are organized with high-level topics like Page Types and Navigation Schema first, followed by the consecutive sections describing which building blocks and elements of the UI populate the various pages. A section typically starts with one or more screenshots of a central UI element with a generic explanation. The subsequent sections explain the detailed aspects of each element.
    We hope that you will find this information useful.
    Enjoy the new CRM UI! [UI Guidelines for CRM Web Client User Interface (CRM 2007 UI)_ |http://www.sapdesignguild.org/resources/CRM-UI-Guidelines-Customers.pdf]
    Edited by: Zhaojie Liu on Jun 10, 2009 10:08 AM

    Hi,
    not sure why your download stops.. you can also try to download via this link: [http://www.sapdesignguild.org/resources/CRM-UI-Guidelines-Customers.pdf|http://www.sapdesignguild.org/resources/CRM-UI-Guidelines-Customers.pdf] (Document is 17,4MB of size)
    Here the guidelines also have been posted together with an article about the CRM 2007 Web Client UI.
    Hope this helps
    Best regards
    Ingo

  • User Interface Guidelines for CRM 2007 are now available

    The CRM UI Concept Team has made the [UI Guidelines for CRM Web Client User Interface (CRM 2007 UI)|https://www.sdn.sap.com/irj/sdn/go/portal/prtroot/docs/library/uuid/302d8152-002b-2b10-34bd-9ff3c712dd4b] available to the BPX community:
    This document provides an overview of the on-premise as well as the off-premise versions of the SAP CRM Web Client User Interface (UI). It contains the properties and principles of the SAP CRM Web Client UI that are already committed and available. For planned features, refer to the corresponding specification documents.
    The information in the guidelines starts with general topics, followed by details. The sections are organized with high-level topics like Page Types and Navigation Schema first, followed by the consecutive sections describing which building blocks and elements of the UI populate the various pages. A section typically starts with one or more screenshots of a central UI element with a generic explanation. The subsequent sections explain the detailed aspects of each element.
    We hope that you will find this information useful.
    Enjoy the new CRM UI!
    Feel free to provide your feedback.
    Edited by: Florian Weigmann  on Jul 17, 2008 9:14 PM

    Hi,
    not sure why your download stops.. you can also try to download via this link: [http://www.sapdesignguild.org/resources/CRM-UI-Guidelines-Customers.pdf|http://www.sapdesignguild.org/resources/CRM-UI-Guidelines-Customers.pdf] (Document is 17,4MB of size)
    Here the guidelines also have been posted together with an article about the CRM 2007 Web Client UI.
    Hope this helps
    Best regards
    Ingo

  • Error -17501 flxCVIadp.​dll when starting CVI full featured user interface on Windows 7

    We see the following error dialog when we launch the CVI full-featured user interface (TestExec.exe):
    "Error:
    Unable to load test environment adapter 'flxCVIadp.dll'. Run setup to re-install or remove this adapter.
    Could not connect to TSAutoMgr.exe server. DCOM permissions might be incorrect because of configuration changes for remote execution.  To fix this issue, ensure that the current user is in the default DCOM access permissions or that no users are in the access permissions section of the dcomcnfg.exe dialog box.  You can use the dcomcnfg.exe program, located in the Windows System directory, to change DCOM access permissions.
    Error code: -17501, Unexpected Operating System Error." 
    When this error happens, we can't run any calls to CVI code from within the User Interface.
    We are running Windows 7.  We don't see the error if we run TestExec.exe from the default location:
    C:\Users\Public\Documents\National Instruments\TestStand 2013\UserInterfaces\Full-Featured\CVI
    We get the error message if we copy the CVI directory to somewhere else on the C:\ drive (C:\MyUserInterface for example).  The error happens when we run TestExec.exe directly, but it does not happen if we are already running Labwindows/CVI and we launch TestExec.exe from CVI.
    We are seeing this error with both TestStand 4.2.1 and TestStand 2013 running on different PCs.  This error happens on Windows 7, but not Windows XP.  Though we get the same error with our custom user interface, we see the same error with the stock CVI full-features user interface provided by NI.
    Any ideas about why we can run this from the TestStand directories, but not any directory on our C:\ drive?
    Thanks,
    Peter

    Hi Peter,
    Based on the error messages it looks like this might be a Windows 7 security issue, which would be why it doesn't occur on XP since security is handled differently in that OS. Have you gone into dcomcnfg.exe and checked the DCOM permissions as described in the error message?

  • ADF error-"Row currency has changed since the user interface was rendered"

    Hi,
    I have created a ADf page and then created entity and view object for a table.
    I have created fields which are binded to the the view object .
    when i open the page after deploying it i get the following error
    "Row currency has changed since the user interface was rendered. The expected row key was oracle.jbo.Key[]"
    Please help me
    Edited by: 798554 on Sep 28, 2010 10:45 PM

    That's a common exception in ADF. If you click the browser back button, you can get this message. You could search for a solution in other posts, perhaps like that:
    JBO-35007: Row currency has changed.. when Rollback fom a Dialog page
    http://cn.forums.oracle.com/forums/thread.jspa?messageID=3913201
    http://programming.itags.org/development-tools/68191/
    You should also mention your JDev version!
    NA
    http://nickaiva.blogspot.com/

  • User interface template substitution tags problem

    Portal 9.0.2.0.3 (Upgraded from 9.0.2.2.14A)
    Hi all,
    I am designing an unstructured user interface for use with my portal reports.
    I have located a help document called 'Unstructured user interface template substitution tags' from the standard portal help pages.
    My problem is that only a few of these tags are actually being substituted for their correct values when I run my reports. For example the help document says the #PAGE.CUSTOMIZEPAGE# tag should be substituted with HTML text hyperlink to the customize page dialog. On my report this tag and the majority of others are substituted with a blank line.
    Any ideas?

    Same problem exists with the #TITLE# tag. However, SOMETIMES (I don't know how or why) the tag shows up. If I find out what the secret is, I'll let you know.
    Anyone else have any input?
    Pat Murray

Maybe you are looking for

  • ToString() issue

    I am working on a program of pente and I'm having a problem i think with my toString() in my cell class. It doesn't seem to be printing the cells right, for example when I run the program I enter 1 for x and 1 for y. Then it puts player 1 in the cell

  • REgarding view selection mm02 in bdc

    hi,      i m usung function module 'MATERIAL_BTCI_SELECTION_NEW'' for selecting the single view automatically in bdc,its working fine..but for another scenario i have to select the multiple views so for this what sud i do i how cud i pass multiple vi

  • I don't know where my photos go when syncing my iPhone to my iMac

    I don't know where my photos go when syncing my iPhone to my iMac

  • P70 Gallery

    Hello to everybody, I just bought Lenovo P70 4G LTE, in which the Gallery app is playing Videos automaticlly while scrolling. Is this a special feature or problem. if it is a feature then how it can be disabled. I read in some of the Phone specificat

  • Enhancing CAT2 Screen using screen exit.

    I am working for a custmer enhancement whuch requires to include a input field on the CAT2 Main screen. I am using CATS005 exit & subscreen at the top of header area. But with this I cannot use the values that is entered in this input field for proce