General DFFS enhancement suggestions

Forums Requests General DFFS enhancement suggestions

Tagged: 

This topic contains 47 replies, has 10 voices, and was last updated by  Keith Hudson 1 week, 6 days ago.

  • Author
    Posts
  • #16181

    Keith Hudson
    Participant

    Alex;

    I’m starting this topic as a place to put general enhancement suggestions (not feature requests). If you find it valuable, perhaps it could become a “sticky” topic that always shows near the top of the Forum topics for DFFS so it is easy for users to find.

    I currently have 3 non-feature suggestions:
    1. Change the naming of new versions of DFFS to the format YYYY-MM-DD so that when we download the zip files, they will automatically sort in chronological order. (Right now, I sometimes remember to create a new folder for each new download and use that date format as the folder name, but making it a standard would simplify the process of knowing which release is the latest.

    2. Instead of using html files for CEWP links, use text files. For example, instead of Installer_CEWP_code.html make it Installer_CEWP_code.txt. The advantage of using a txt file instead of an html file is that a user can see and modify the contents of a txt file much easier that an html file. For instance, in the current environment I work in, html files will not open in the browser, but instead I must download the html file and open it from my hard drive.

    I recognize that for backward compatibility when upgrading from one version to another of DFFS you might have to maintain both an html version of the file and a txt version of the file, so it might not be worth the extra work to do so.

    3. Create a ‘sticky’ topic in this forum for bug reports and/or beta testing reports.

  • #16217

    Alexander Bautz
    Keymaster

    Hi Keith,
    Sorry for the late reply – I’ve been busy trying to sort out a few issues with the latest BETA.

    This is good ideas and I’ll stick it to the top – and will look at changing the “naming” of the future DFFS versions.

    Thanks!

    Alexander

  • #16230

    avala
    Participant

    Thanks for making this a sticky post!

    If possible, I’d like the ability to restore a previous version of the DFFS configuration from the DFFS new/edit/display config page. I know we can use versioning in the SPJS-DynamicFormsForSharePoint list to restore a previous version, but I’ve had a few occasions where I’ve been in the config page and wished I could revert from there after testing a change.

  • #16659

    Keith Hudson
    Participant

    How to know which version of DFFS is installed, and how to update easily to another version
    1. Provide an easy way to know which version of DFFS is installed in the DFFS folder within the SPJS Library. I do this for myself right now but simply adding a text file with a name that reflects the version. For instance, my most recent installations have a text file in the DFFS folder named “DFFS version 2017-02-25.txt”. This lets me know at a glance which version of DFFS I am using. When I download a new version of the DFFS files and unzip the zip file, I rename the DFFS folder to include the version date. This way, I can have several versions of DFFS installed in a single site and switch between them almost instantly simply by changing the folder names. Whichever folder is named “DFFS” (without any date component) is the active version.

    Request to Alex: please include a text file (like I have explained above) in future versions of DFFS to give users an easy way to know which version of DFFS is installed.

    • #16669

      Alexander Bautz
      Keymaster

      Thanks for the input – I’ll add this file. Also, from the next version you can add a folder named “DFFS_NEXT” and use a URL key like this to test-load the new version from this folder without the need to rename the existing folder – the test load will only apply to the user who set the URL key:

      .../Lists/YourList/NewForm.aspx?DFFS_NEXT=1

      As this feature requires some changes to the code it will unfortunately only work when updating past the upcoming revision. This new revision has been delayed many times, but will hopefully be ready for BETA this weekend.

      Best regards,
      Alexander

  • #16661

    Keith Hudson
    Participant

    Desired enhancement: Easy copying of New form config to Edit form, or vice versa.
    When I am building a complex form, I usually work on just one version of the form (for instance, the EditForm), and when I reach a point where the form is fairly useable, I will clone the EditForm to create the NewForm.

    When I need to make changes later (especially if I have written custom Javascript that will provide extra functionality on both the New form and Edit form) I will make the changes in the Edit form, then delete the New form and recreate it so it has the same configuration. (OR, I will export the Edit form configuration and Import it into the New form.)

    It would be great if we could have a button like “Copy Edit Form Config to New Form” to save a few steps when trying to keep the New and Edit forms synchronized.

    Importance of this enhancement: very low

    • #16671

      Alexander Bautz
      Keymaster

      In the upcoming version I have added a new functionality to create restore points and to browse existing restore points. This feature is intended used to do exactly what you require. See attached image.

      Best regards,
      Alexander

  • #17062

    Konrad Kołodziejak
    Participant

    It would be great to have the option to specify the scope of search within the lookup list/library for vLookup functionality.

    Currently the query created has RecursiveAll scope. Since there is an option ‘Add new items to this folder (Document libraries only)’, it would be really good to have an option to either search for items in all folders or specify particular folder.
    This would help resolve issues with libraries having over 5000 items on SharePoint Online.
    Let me know if you need any help with that. I am a SharePoint developer myself and be glad to contribute.

    • #17164

      Alexander Bautz
      Keymaster

      Thanks for the feedback. I’ll see what I can do about adding an option to specify the folder to search in for vLookup.

      The current code base for vLookup is not fully optimized for SP 2013+, and I have plans to completely rewrite vLookup and make it an integrated part of DFFS. I’ll keep this in mind for the next version.

      PS: I appreciate any feedback you have, so please post your suggestions here, or email them to me.

      Best regards,
      Alexander

  • #17066

    Konrad Kołodziejak
    Participant

    It would be great, if the minified version of scripts from plugins folder were loaded.
    It would speed up the load time of assets and therefore shorten the time of overlay being displayed.
    There could be a setting (debug mode) that would make the unminified plugins load instead of minified ones.

    • #17166

      Alexander Bautz
      Keymaster

      I have minified vLookup as this is the biggest files, but I’ll try to get all files minified for the next version.

      Alexander

  • #17351

    Andreas Blüher
    Participant

    I know responsiveness is something you already looked into and thought about. What are your thoughts on CSS Grids? I only recently started using them, but I really like them and from my imagination they could be an option for DFFS too.

    • #18885

      Alexander Bautz
      Keymaster

      Hi Andreas,
      Sorry for not replying earlier. I cannot use this approach in the current DFFS version because of how the original form is manipulated, but have plans for responsiveness in the next major release. Unfortunately I’m so busy supporting and maintaining my solutions and haven’t been able to get the momentum I hoped on the new version.

      Alexander

  • #18880

    Ivan Wilson
    Participant

    Would it be possible to add functionality to support branching of DFFS? There are deployments where it is not practical to have dev/test/prod environments. We have to develop new functionality in production.

    It would be great if we could “branch” the dffs configuration, make changes, test it, then publish it as the production version. We could use a query string or cookie to indicate whether to use the prod or dev branch when accessing forms or configuring.

    The “enhanced with DFFS” tag could be updated to show which branch you are using and allow you to select a different branch.

    To get extra fancy, this branching may be done at a view, list, web or site collection level. You could also include special branch tags with include files if you want to make them branch specific.

    Obviously, any list configuration changes would affect all branches.

    • This reply was modified 10 months, 3 weeks ago by  Ivan Wilson.
    • #18887

      Alexander Bautz
      Keymaster

      Hi Ivan,
      This is a good idea, and I have actually already planned to include more or less what you ask for. I haven’t finished it yet, but will try to get it out soon.

      Alexander

  • #19285

    Brett
    Participant

    Hi Alexander,

    If possible, I have been asked if once the form is Saved either in the ribbon or via button at the bottom, that the user be returned to a specific URL, like a homepage or thank-you page for example.
    Is there there a script that I can add to to the EditForm.aspx page?
    Perhaps this can be added in a future release in the Misc Tab?

    Thanks.

    • #19312

      Alexander Bautz
      Keymaster

      Hi Brett,
      You can use this code in your custom js:

      spjs.dffs.redirect("http://Your_redirect_url",false);

      The redirect will be performed when saving the form.

      Alexander

    • #19318

      Brett
      Participant

      Hi Alexander,
      Thanks for replying but I get an error in Custom JS textarea.
      Error: 80020101
      I’ve tried in both Edit and Display Custom JS areas.
      I have version 4.373, should I upgrade to the latest DFFS?
      Thanks.

    • #19336

      Alexander Bautz
      Keymaster

      I’m not 100% sure which version I added this function in. When in a form with DFFS, try bringing up the dev console by hitting F12 > Console and type in this:

      spjs.dffs.redirect

      If the output reads “undefined” you must update DFFS to the latest version.

      Alexander

    • #19339

      Brett
      Participant

      Thanks Alexander,
      I have upgraded to the latest DFFs and the redirect is now working.
      Many thanks.

  • #19287

    Phil Grant
    Participant

    Hi Alexander,
    Would it be possible to have the prev/next tab buttons at the top of the form, or both top and bottom maybe?

    Regards,
    Phil

    • #19314

      Alexander Bautz
      Keymaster

      The easiest way to achieve this is to add this snippet to your custom js. You don’t need to use the Misc settings if you only want the buttons in the top.

      var b = [];
      b.push("<div style='padding:2px;text-align:right;border-bottom: 1px #808080 solid;'>");
      b.push("<input class='ms-ButtonHeightWidth' type='button' value='Previous tab' onclick='spjs.dffs.navTab(0);'>");
      b.push("<input class='ms-ButtonHeightWidth' type='button' value='Next tab' onclick='spjs.dffs.navTab(1);'>");
      b.push("</div>");
      jQuery(".dffsTabRow").after(b.join(""));

      Alexander

  • #19331

    Phil Grant
    Participant

    Thanks, it worked a treat 🙂

  • #19472

    Phil Grant
    Participant

    It would be nice to be able apply the configuration to the other two forms with one click of a button if possible.

    Cheers,
    Phil

    • #19553

      Alexander Bautz
      Keymaster

      I’ll see what I can do about a button to push it to the other forms, but you can use this method to share the same config for all forms in a list – just create an unique ID in the “dffs_formIdOverride” variable and insert this snippet in a script editor in all three forms.

      Alexander

  • #19550

    Keith Hudson
    Participant

    It would be nice if the txt file at the root of the DFFS folder that shows the release date could also contain the version numbers of each of the component files. Right now, they only way I know to check the version numbers of a release is to install it and open it, or perhaps hunt through the Change Log on the spjsblog.com site.

    For example, the contents of the file v2017-07-31.txt could read:

    This file is used to quickly see the version date and changed files.
    Changed files in this release:
    ——————————-
    /DFFS/js/DFFS_backend.min.js (v4.4.3.7)
    /DFFS/js/DFFS_fontend.min.js (v4.4.3.7)
    /DFFS/js/DFFS_backend.css (v4.36)
    /DFFS/css/DFFS_frontend.css (v4.36)
    /DFFS/plugins/SPJS-ac.js (v1.6.11)
    /DFFS/plugins/SPJS-casc.js (v3.7.9)
    /DFFS/loader/DFFS_loader.html (v?????)

    Files not changed in this release:
    ———————————
    /DFFS/plugins/jquery.min.js (v1.12.4)
    /DFFS/plugins/SPJS-vlookup_backend.js (v2.2.98)
    /DFFS/plugins/SPJS-utility (v1.307)
    etc.

    • #19555

      Alexander Bautz
      Keymaster

      Good idea – I’ll do that in the next release.

      Alexander

  • #20078

    Andreas Blüher
    Participant

    Hello Alexander,

    I’m wondering if it’s possible to have a single column being displayed more than one time in the same tab? Currently we’re doing this via custom code, but it’s not that easy.

  • #20098

    Alexander Bautz
    Keymaster

    Sorry, but you cannot have the same field multiple times in the same tab – different tabs is not problem though.

    Alexander

    • #20349

      Andreas Blüher
      Participant

      Thanks for your reply. Would it change anything if the 2. appearance would be read only by default?

  • #20364

    Alexander Bautz
    Keymaster

    You can use this snippet in a HTML section to show the value from another field in the form (please note that it will not work in older versions):

    Field value is: {{FieldInternalName_Of_Your_Field}}

    Alexander

  • #20632

    Andreas Blüher
    Participant

    Have you thought about some kind of “light configuration” option? DFFS backend can be pretty overwhelming. I would like to have some special users which are allowed to add/remove fields, but to do nothing more. Is something like this possible?

  • #20649

    Alexander Bautz
    Keymaster

    This is currently not possible, but I’ll make a not of your request and see if I can add support for something like this in a future version.

    Best regards,
    Alexander

  • #20974

    Ross
    Participant

    Hi Alexander,

    Would it be possible to have a tab option to set all fields read-only on the tab?

    I know you can set separate rules by tab index but it does require the additional maintenance when columns are added to the tab or deleted from the list.

    Clients have requested this (not too sure on the use cases for it).

    • #20987

      Alexander Bautz
      Keymaster

      Hi,
      You can do this now by using a little Custom JS. Add this snippet to your Custom JS and call it from the “Click function name” in your tab:

      function readOnlyAllFieldsInTab(){
      	var arrToSetReadonly = [];
          jQuery.each(spjs.dffs.data.tabConfigObj[spjs.dffs.data.selectedTab].fields,function(i,fin){
              if(spjs.dffs.fieldData[fin] !== undefined){
                  arrToSetReadonly.push(fin);
              }
          });
          spjs.dffs.doReadOnly(arrToSetReadonly);
      }

      Please note that the fields will stay read-only when you change tabs – you would have to set the fields as editable again in the other tabs.

      Alexander

    • #21008

      Ross
      Participant

      Perfect.

      Thanks for the quick response.

  • #21110

    William Summers
    Participant

    it would be really nice to be able to copy entire sections. Example would be a check box that you can copy the heading, fields under it because you want to move the entire section up or down the form or maybe even move it to the edit form from new.

    Cheers

    • #21122

      Alexander Bautz
      Keymaster

      This is a good idea, and it is already on my list of things to add to a future version.

      Alexander

  • #21182

    Ross
    Participant

    Hi Alex,

    There is probably already an easy way to do this but it would be nice to have an easy way to target the DFFS Print page for CSS changes.

    Would you be able to include a class or id in the following?

    
    
    spjs.dffs.printCurrentTab  = function() {
      // ... Your print code
    
      // Include class or id to allow custom CSS to target printing and not display form
      b.push("<table style='width:100%' class='dffs-print'>");
    
      // Continue print code
    }

    As always, thanks for your time!

    • This reply was modified 4 months, 1 week ago by  Ross.
    • #21617

      Alexander Bautz
      Keymaster

      Sorry for the late reply. I’ll add this to the next release, but in the meantime you can (if you haven’t already done so) override the function by adding this to your custom js:

      spjs.dffs.printCurrentTab = function () {
          if (spjs.dffs.data.selectedTab === "") {
              return;
          }
          var b = [], tFields = spjs.dffs.data.tabConfigObj[spjs.dffs.data.selectedTab].fields, sbsTracker = {}, sbsID, pHead, pFoot, dffs_print;
          b.push("<style type='text/css'>");
          b.push(".ms-hide{display:none!important;}");
          b.push(".dffs_noPrint{display:none!important;}");
          b.push(".ms-spimn-img{display:none!important;}");
          b.push("table.ms-formtable tr > td.ms-formlabel{width:50%;}");
          b.push("td.ms-formlabel h3{font-size:13px;margin:0px;padding:0px 3px 0px 3px;}");
          b.push("td.ms-formbody{width:60%;font-size:12px;padding:0px 3px 0px 3px;}");
          b.push(".vLookupGroupHeader{width:100%;font-size:12px;cursor:pointer;background-color:#ACCBE0;border-top:1px #818181 solid;border-bottom:1px #818181 solid;margin:1px;padding:1px 3px 1px 3px;white-space:nowrap;}");
          b.push(".childTableHeader{font-weight:bold;color:#3f4746;padding:1px 6px 1px 1px;cursor:default;border-bottom:1px #adb3c3 solid;}");
          b.push(".childTableCell{font-weight:normal;padding:1px 5px 1px 2px;}");
          b.push(".vLookupProgressBarOuter{background-color:#ffffff;border:1px #818181 solid;text-align:left;white-space:nowrap;overflow:hidden;}");
          b.push(".vLookupProgressBarInner{background-color:#8ABC8B;border-right:1px #818181 solid;}");
          b.push(".vLookupTotals{border-top:1px silver solid;border-bottom:3px silver double;padding:3px;cursor:default;text-align:right;}");
          b.push(".spjshidden{display:none !important;}");
          b.push(".tabH1{font-size:25px;color:#3f4746;padding:3px 0px 3px 0px;}");
          b.push(".tabH2{font-size:20px;color:#3f4746;padding:3px 0px 3px 0px;}");
          b.push(".childTableHeader{font-weight:bold;color:#3f4746;padding:1px 6px 1px 1px;cursor:default;border-bottom:1px #adb3c3 solid;}");
          b.push(".customTooltip{display:none!important;}");
          b.push("a{text-decoration:none;}");
          b.push("#idAttachmentsTable .ms-vb{width:100%!important;}");
          b.push(unescape(spjs.dffs.data.dffsDataObj.customCSS));
          b.push(spjs.dffs.data.fieldCSS);
          b.push("</style>");
          if (spjs.dffs.data.dffsDataObj.tabs.printHeader !== "") {
              pHead = spjs.dffs.buildValStr(unescape(spjs.dffs.data.dffsDataObj.tabs.printHeader));
              pHead = spjs.dffs.translateStringWithJSON(pHead);
              b.push(pHead);
          }
          b.push("<table style='width:100%' class='dffs-print'>");
          if (tFields.length === 0) {
              tFields = [];
              jQspjs.each(spjs.dffs.fieldData, function (fin, o) {
                  tFields.push(fin);
              });
          }
          jQspjs.each(tFields, function (i, fin) {
              var f = null;
              if (jQspjs("#" + fin).length > 0 && (spjs.dffs.fieldtype[fin] === "dffs_heading" || spjs.dffs.fieldtype[fin] === "dffs_html" || spjs.dffs.fieldtype[fin] === "dffs_row")) {
                  f = jQspjs("#" + fin);
                  if (f.length > 0) {
                      b.push(f[0].outerHTML);
                  }
              } else {
                  f = jQspjs("#dffs_" + fin);
                  if (f.length === 0) {
                      if (fin === "Attachments") {
                          f = jQspjs("#idAttachmentsTable");
                      } else {
                          return;
                      }
                  }
                  if (jQspjs(f).parents("tr.sbs_OuterTR").length > 0) {
                      sbsID = jQspjs(f).parents("tr.sbs_OuterTR:first").attr("id");
                      if (sbsTracker[sbsID] === undefined) {
                          sbsTracker[sbsID] = true;
                          b.push(jQspjs(f).parents("tr.sbs_OuterTR")[0].outerHTML);
                      }
                  } else {
                      if (f[0].tagName.toLowerCase() === "table") {
                          b.push("<tr><td colspan='99'>" + f[0].outerHTML + "</td></tr>");
                      } else {
                          b.push(f[0].outerHTML);
                      }
                  }
              }
          });
          b.push("</table>");
          if (spjs.dffs.data.dffsDataObj.tabs.printFooter !== "") {
              pFoot = spjs.dffs.buildValStr(unescape(spjs.dffs.data.dffsDataObj.tabs.printFooter));
              pFoot = spjs.dffs.translateStringWithJSON(pFoot);
              b.push(pFoot);
          }
          dffs_print = window.open("", "DFFS_print", "toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=yes, resizable=yes, width=750, height=800, top=100, left=100");
          dffs_print.document.title = "DFFS";
          jQspjs(dffs_print.document.body).append("<div>" + b.join("") + "</div>");
          setTimeout(function () {
              dffs_print.print();
              setTimeout(function () {
                  dffs_print.close();
              }, 500);
          }, 500);
      }

      Alexander

  • #21636

    Keith Hudson
    Participant

    Easy way to copy a single rule (or selected rules) or a single tab (or selected tabs) from one config to another.

    Alex, I’ve had some developers who have been working on some very complex forms ask me if there is a way to copy a single rule or a set of rules from one config to another (for instance, to copy a rule developed in the New form config and copy it into the Edit form config).

    I have sometimes also wished there was an easy way to copy just one tab from the New config to the Edit config.

    • #21666

      Alexander Bautz
      Keymaster

      Hi,
      I will include this in the next release.

      Best regards,
      Alexander

  • #22025

    Keith Hudson
    Participant

    Easy way to “pause” a splash (overlay) screen.
    We have encountered a situation where we would like to be able to include simple instructions to our users on the overlay as the form is opening, and control how long the overlay shows. Could you add a setting for that?

  • #22059

    Alexander Bautz
    Keymaster

    Hi,
    You can put this in the custom js:

    var mustReadOverlayId = spjs.dffs.alert({
    	"title":"Please read instructions (Closes after 10 seconds)",
    	"msg":"Put the instructions here - you can use HTML code or plain text.",
    	"noBtn":true
    });
    // Remove overlay after 10 seconds
    setTimeout(function(){
        spjs.dffs.closeDlg(mustReadOverlayId );
    },10000);

    Alexander

  • #22364

    William Summers
    Participant

    Good day Alex, I don’t see this anywhere but it would be nice if we had an option for setting an entire tab index to read only based on a rule.
    Cheers

    • #22366

      William Summers
      Participant

      Now that I think about it if I had the code or function to hide a tab that would be awesome as well!

  • #22368

    Keith Hudson
    Participant

    William, I just saw this about code to hide a tab. The id of the tab is “dffs_tab_5” where 5 is the tab index. So, you can just use $(‘#dffs_tab_5’).hide() to hide tab with index 5.

You must be logged in to reply to this topic.