Forms Reliability

I have been experiencing some issues with Plumsail forms recently. The issues do not arise consistently for me to feel as though it is an issue with code.
Currently I am seeing the following:

  • Conditionally hiding form controls is not working

  • Styling a list control is not working (i.e., Highlighting late items)

  • Hiding buttons on list control

Early today I noticed the issue with altering text controls, this has since resolved.

Is this a known issue and is it being worked on?

Hello @cwalter2,

Please share the code that you are using and the screenshot of the errors from the browser console if there are any to troubleshoot the issue.

1st of 2 posts of code:

window.fd = fd;
window.pnp = pnp;
window.Web = Web;
window.Site = Site;
window.$ = $;
window.define = null;

var phaseNum = 'None';
var mod = 'None';

function categoryFilter() {
    fd.control('CategoryList').filter = "<Eq><FieldRef Name='ProjectPhase' LookupId='TRUE' /><Value Type='Lookup'>" + Number(fd.field('SingleLineText6').value) + "</Value></Eq>";
    fd.control('CategoryList').refresh();
};

function setMulti () {
    fd.control('Image1').href = 'https://hrmech.sharepoint.com/sites/pwa/SitePages/PlumsailForms/Projects/Item/39d02a64-ec32-467c-b396-61dd86087085/EditForm.aspx?item=' + fd.itemId;
    fd.control('Image2').href = 'https://hrmech.sharepoint.com/sites/pwa/SitePages/PlumsailForms/Projects/Item/24c7f034-142c-4d7d-a256-950e9e71d0a0/EditForm.aspx?item=' + fd.itemId;
    if (fd.field('Project_x0020_Status').value == 'Qualifying' || fd.field('Project_x0020_Status').value == 'No Bid') {
        fd.field('Dashboard').value = ["Qualifying"];
        $('.availEstimate').hide();
        $('.notAvailEstimate').ashow();
        $('.availTools').hide();
        $('.notAvailTools').show();
    } else if (fd.field('Project_x0020_Status').value == 'Estimating' || fd.field('Project_x0020_Status').value == 'Lost Estimate') {
        fd.field('Dashboard').value = ["Qualifying", "Estimate"];
        $('.availEstimate').show();
        $('.notAvailEstimate').hide();
        $('.availTools').hide();
        $('.notAvailTools').show();
    } else {
        fd.field('Dashboard').value = ["Qualifying", "Estimate", "Project"];
        $('.availEstimate').show();
        $('.notAvailEstimate').hide();
        $('.availTools').show();
        $('.notAvailTools').hide();
    }
}

function POView() {
    if (fd.field('DropDown4').value == 'Open POs') {
        $('.OpenPOs').show();
        $('.AllPOs').hide();
        $('.PastDuePOs').hide();
    } else if (fd.field('DropDown4').value == 'Past Due POs') {
        $('.OpenPOs').hide();
        $('.AllPOs').hide();
        $('.PastDuePOs').show();
    } else if (fd.field('DropDown4').value == 'All POs') {
        $('.OpenPOs').hide();
        $('.AllPOs').show();
        $('.PastDuePOs').hide();
    } else {
        fd.field('DropDown4').value = 'Open POs';
        $('.OpenPOs').show();
        $('.AllPOs').hide();
        $('.PastDuePOs').hide();
    }
}

function RentalView() {
    if (fd.field('DropDown5').value == 'On Rent') {
        $('.OnRent').show();
        $('.LateReturn').hide();
        $('.AllRentals').hide();
    } else if (fd.field('DropDown5').value == 'Beyond Estimated Return') {
        $('.OnRent').hide();
        $('.LateReturn').show();
        $('.AllRentals').hide();
    } else if (fd.field('DropDown5').value == 'All Rentals') {
        $('.OnRent').hide();
        $('.LateReturn').hide();
        $('.AllRentals').show();
    } else {
        fd.field('DropDown5').value = 'On Rent';
        $('.OnRent').show();
        $('.LateReturn').hide();
        $('.AllRentals').hide();
    }
}

function filterQAQCLists() {
    if (fd.field('DropDown3').value == 'Pipe Test') {
        $('.addQAQC').show();
        $('.PipeTest').show();
        $('.Permit').hide();
    } else if (fd.field('DropDown3').value == 'Permit') {
        $('.addQAQC').show();
        $('.PipeTest').hide();
        $('.Permit').show();
    } else {
        $('.addQAQC').hide();
        $('.PipeTest').hide();
        $('.Permit').hide();
    }
}

function filterRespPerson(respcon) {
    var respconId = respcon && respcon.LookupId || respcon || null;
    fd.field('RespContact').filter = 'ProjectContractorId eq ' + respconId;
    fd.field('RespContact').widget.dataSource.read();
}

function filterRespContractors () {
    fd.field('RespContractor').filter = 'Project/Id eq ' + fd.itemId;
    fd.field('RespContractor').orderBy = {field: 'Title', asc: true};
    fd.field('RespContractor').widget.dataSource.read();
}

function filterDefaultFrom () {
    //alert('change caught');
    fd.field('DefaultFrom').filter = "Project/Id eq '" + fd.itemId + "'";
    fd.field('DefaultFrom').orderBy = {field: 'Title', asc: true};
    fd.field('DefaultFrom').widget.dataSource.read();
}

function filterDefaultSubmitTo () {
    //alert('change caught');
    fd.field('DefaultSubmitTo').filter = "Project/Id eq '" + fd.itemId + "'";
    fd.field('DefaultSubmitTo').orderBy = {field: 'Title', asc: true};
    fd.field('DefaultSubmitTo').widget.dataSource.read();
}

function filterDefaultRFITpo () {
    //alert('change caught');
    fd.field('DefaultRFITpo').filter = "Project/Id eq '" + fd.itemId + "'";
    fd.field('DefaultRFITpo').orderBy = {field: 'Title', asc: true};
    fd.field('DefaultRFITpo').widget.dataSource.read();
}

function filterDefaultPCOTo () {
    //alert('change caught');
    fd.field('DefaultPCOTo').filter = "Project/Id eq '" + fd.itemId + "'";
    fd.field('DefaultPCOTo').orderBy = {field: 'Title', asc: true};
    fd.field('DefaultPCOTo').widget.dataSource.read();
}

function drawingGrpFilter () {
    fd.field('Drawing_x0020_Group_x0020_Filter').filter = "ProjectId eq '" + fd.itemId + "'";
    fd.field('Drawing_x0020_Group_x0020_Filter').orderby = {filed: 'Title', asc: true};
    fd.field('Drawing_x0020_Group_x0020_Filter').widget.dataSource.read();
}

function orderCustomer () {
    fd.field('CustomerLookup').orderBy = {field: 'Title', asc: true};
    fd.field('CustomerLookup').widget.dataSource.read();;
}

function orderContractor () {
    fd.field('ContractorLookUp').orderBy = {field: 'Title', asc: true};
    fd.field('ContractorLookUp').widget.dataSource.read();;
}

function orderOffering () {
    fd.field('OfferingLookUp').orderBy = {field: 'Title', asc: true};
    fd.field('OfferingLookUp').widget.dataSource.read();;    
}

function readyAddContractor () {
    if (fd.field('ContractorLookUp').value == null || fd.field('OfferingLookUp').value == null) {
        $('.readyToAddContractor').hide()
    } else {
        $('.readyToAddContractor').show()
    }
}

function filterProjectContractors () {
    fd.field('ProjectContractorLookUp').filter = 'Project/Id eq ' + fd.itemId;
    fd.field('ProjectContractorLookUp').orderBy = {field: 'Title', asc: true};
    fd.field('ProjectContractorLookUp').widget.dataSource.read();
}

function filterProjectContacts () {
    //alert('change caught');
    var contractorId = fd.field('ProjectContractorLookUp').value.Contractor.Id;
    //alert(contractorId);
    fd.field('ProjectContactLookUp').filter = 'CLCompany/Id eq ' + contractorId + " and CLActive eq 'Active'";
    fd.field('ProjectContactLookUp').orderBy = {field: 'CLDispName', asc: true};
    fd.field('ProjectContactLookUp').widget.dataSource.read();
}

function getContactFields () {
    var str = fd.field('ProjectContactLookUp').value.CLCellInput;
    fd.field('SingleLineText1').value = fd.field('ProjectContactLookUp').value.CLEmail
    var maskCell = '(' + str.slice(0, 3) + ') ' + str.slice(3, 6) + '-' + str.slice(6, 10);
    fd.field('MaskedInput1').value = maskCell;
    readyAddContact();
}

function readyAddContact () {
    if (fd.field('ProjectContactLookUp').value == null || fd.field('ProjectContractorLookUp').value == null || fd.field('MaskedInput1').value == null || fd.field('SingleLineText1').value == null || fd.field('SingleLineText2').value == null) {
        $('.addContactReady').hide()
    } else {
        $('.addContactReady').show()
    };
};

function filterRFIs () {
    if (fd.field('DropDown1').value == '') {
        fd.field('DropDown1').value = 'All';
        $('.AllRFIs').show();
        $('.openRFIs').hide();
        $('.RFIPastDue').hide();
        $('.RFIAnswered').hide();
        $('.RFIMoreInfo').hide();
        $('.RFIHighPriority').hide();
        $('.RFIDueInNextWeek').hide();
    } else if (fd.field('DropDown1').value == 'All') {
        $('.AllRFIs').show();
        $('.openRFIs').hide();
        $('.RFIPastDue').hide();
        $('.RFIAnswered').hide();
        $('.RFIMoreInfo').hide();
        $('.RFIHighPriority').hide();
        $('.RFIDueInNextWeek').hide();
    } else if (fd.field('DropDown1').value == 'Open') {
        $('.AllRFIs').hide();
        $('.openRFIs').show();
        $('.RFIPastDue').hide();
        $('.RFIAnswered').hide();
        $('.RFIMoreInfo').hide();
        $('.RFIHighPriority').hide();
        $('.RFIDueInNextWeek').hide();
    } else if (fd.field('DropDown1').value == 'Past Due') {
        $('.AllRFIs').hide();
        $('.openRFIs').hide();
        $('.RFIPastDue').show();
        $('.RFIAnswered').hide();
        $('.RFIMoreInfo').hide();
        $('.RFIHighPriority').hide();
        $('.RFIDueInNextWeek').hide();
    } else if (fd.field('DropDown1').value == 'Due in the Next Week') {
        $('.AllRFIs').hide();
        $('.openRFIs').hide();
        $('.RFIPastDue').hide();
        $('.RFIAnswered').hide();
        $('.RFIMoreInfo').hide();
        $('.RFIHighPriority').hide();
        $('.RFIDueInNextWeek').show();
    } else if (fd.field('DropDown1').value == 'High Priority') {
        $('.AllRFIs').hide();
        $('.openRFIs').hide();
        $('.RFIPastDue').hide();
        $('.RFIAnswered').hide();
        $('.RFIMoreInfo').hide();
        $('.RFIHighPriority').show();
        $('.RFIDueInNextWeek').hide();
    } else if (fd.field('DropDown1').value == 'More Info Required') {
        $('.AllRFIs').hide();
        $('.openRFIs').hide();
        $('.RFIPastDue').hide();
        $('.RFIAnswered').hide();
        $('.RFIMoreInfo').show();
        $('.RFIHighPriority').hide();
        $('.RFIDueInNextWeek').hide();
    } else if (fd.field('DropDown1').value == 'Answered') {
        $('.AllRFIs').hide();
        $('.openRFIs').hide();
        $('.RFIPastDue').hide();
        $('.RFIAnswered').show();
        $('.RFIMoreInfo').hide();
        $('.RFIHighPriority').hide();
        $('.RFIDueInNextWeek').hide();
    }
}

function selectFormSetDpj(dpj, formSetId) {
    var funcName = dpj._listViewManager.openDialogFuncName;
    var func = window[funcName];
    window[funcName] = function(url, pageType) {
        window.FormSet = formSetId;
        func(url, pageType);
    }
}

function selectFormSetDpp(dpp, formSetId) {
    var funcName = dpp._listViewManager.openDialogFuncName;
    var func = window[funcName];
    window[funcName] = function(url, pageType) {
        window.FormSet = formSetId;
        func(url, pageType);
    }
}

function selectFormSetDpm(dpm, formSetId) {
    var funcName = dpm._listViewManager.openDialogFuncName;
    var func = window[funcName];
    window[funcName] = function(url, pageType) {
        window.FormSet = formSetId;
        func(url, pageType);
    }
}

function selectFormSetDem(dem, formSetId) {
    var funcName = dem._listViewManager.openDialogFuncName;
    var func = window[funcName];
    window[funcName] = function(url, pageType) {
        window.FormSet = formSetId;
        func(url, pageType);
    }
}

function selectFormSetperm (perm, formSetId) {
    var funcName = perm._listViewManager.openDialogFuncName;
    var func = window[funcName];
    window[funcName] = function(url, pageType) {
        window.FormSet = formSetId;
        func(url, pageType);
    }
}

function filterOIL() {
    if (fd.field('DropDown2').value == 'All Items') {
        $('.OILAllItems').show();
        $('.OILOpenItems').hide();
        $('.OILPastDue').hide();
    } else if (fd.field('DropDown2').value == 'Open Items') {
        $('.OILAllItems').hide();
        $('.OILOpenItems').show();
        $('.OILPastDue').hide();
    } else if (fd.field('DropDown2').value == 'Past Due Items') {
        $('.OILAllItems').hide();
        $('.OILOpenItems').hide();
        $('.OILPastDue').show();
    } else {
        $('.OILAllItems').hide();
        $('.OILOpenItems').hide();
        $('.OILPastDue').hide();
    }
}

function filterDrawings() {
    var filter = "<And>"
    if (!fd.field('Drawing_x0020_Group_x0020_Filter').value) {
        fd.control('Drawings').filter = fd.field('SingleLineText4').value;
        fd.control('Drawings').refresh();
    } else {
        filter += fd.field('SingleLineText4').value;
        filter += "<Eq><FieldRef Name='Drawing_x0020_Group' /><Value Type='Lookup'>" + fd.field('Drawing_x0020_Group_x0020_Filter').value.LookupValue + "</Value></Eq>"
        filter += "</And>"
        fd.control('Drawings').filter = filter;
        fd.control('Drawings').refresh();
    }
}

function styleExecMeeting() {
    fd.control('execMeetings').ready().then(function(dt) {
        var value = dt.widget.dataItems();
        var row = $(dt.$el).find('tr');
        if(value) {
            for (var i = 0; i < value.length; i++){
                var a = value[i].Deliverables;
                var b = value[i].Schedule;
                var c = value[i].Scope;
                var d = value[i].Budget;
                if (a == 'Controlled') {
                    $(row[i+1].cells[3]).attr("style","border-bottom:2px solid #66ff66; background-color:#b3ffb3");
                } else if (a == 'Caution') {
                    $(row[i+1].cells[3]).attr("style","border-bottom:2px solid #ffff66; background-color:#ffffb3");
                } else if (a == 'Critical') {
                    $(row[i+1].cells[3]).attr("style","border-bottom:2px solid #ff6666; background-color:#ffb3b3")
                }
                if (b == 'Controlled') {
                    $(row[i+1].cells[4]).attr("style","border-bottom:2px solid #66ff66; background-color:#b3ffb3");
                } else if (b == 'Caution') {
                    $(row[i+1].cells[4]).attr("style","border-bottom:2px solid #ffff66; background-color:#ffffb3");
                } else if (b == 'Critical') {
                    $(row[i+1].cells[4]).attr("style","border-bottom:2px solid #ff6666; background-color:#ffb3b3")
                }
                if (c == 'Controlled') {
                    $(row[i+1].cells[5]).attr("style","border-bottom:2px solid #66ff66; background-color:#b3ffb3");
                } else if (c == 'Caution') {
                    $(row[i+1].cells[5]).attr("style","border-bottom:2px solid #ffff66; background-color:#ffffb3");
                } else if (c == 'Critical') {
                    $(row[i+1].cells[5]).attr("style","border-bottom:2px solid #ff6666; background-color:#ffb3b3")
                }
                if (d == 'Controlled') {
                    $(row[i+1].cells[6]).attr("style","border-bottom:2px solid #66ff66; background-color:#b3ffb3");
                } else if (d == 'Caution') {
                    $(row[i+1].cells[6]).attr("style","border-bottom:2px solid #ffff66; background-color:#ffffb3");
                } else if (d == 'Critical') {
                    $(row[i+1].cells[6]).attr("style","border-bottom:2px solid #ff6666; background-color:#ffb3b3")
                }
            };
        }
    });
}

fd.spRendered(function() {
    var pName = fd.field('Title').value;
    var pNum = fd.field('Project_x0020_Number').value;
    var combo = pNum + ' - ' + pName
    var dtDocs = fd.control('Documents');
    console.log(fd.container('Tab1').tabs);
    $('.hideMe').hide();
    fd.control('Text17').text = 'Project # ' + fd.field('Project_x0020_Number').value;
    fd.control('Text18').text = fd.field('Title').value  
    $(fd.control('Contractors').$el).find('.btn').hide();
    $(fd.control('Contacts').$el).find('.btn').hide();
    $(fd.control('PCOs').$el).find('.btn').hide();
    fd.field('DropDown2').value = 'Open Items';
    $('.addContractor').hide();
    $('.addContractorBtn').show();
    $('.addContact').hide();
    $('.addContactBtn').show()
    $('.addOIL').show();
    $('.noAddOIL').hide();
    fd.field('ContractorLookUp').value = null;
    fd.field('OfferingLookUp').value = null;
    fd.field('OfferingLookUp').ready().then(orderOffering);
    fd.field('ContractorLookUp').ready().then(orderContractor);
    fd.field('RespContractor').ready().then(filterRespContractors);
    fd.field('ContractorLookUp').$on('change', readyAddContractor);
    fd.field('OfferingLookUp').$on('change', readyAddContractor);
    fd.field('Drawing_x0020_Group_x0020_Filter').ready().then(drawingGrpFilter);
    fd.field('ProjectContractorLookUp').value = null;
    fd.field('ProjectContactLookUp').value = null;
    fd.field('ProjectContactLookUp').$on('change', getContactFields);
    fd.field('SingleLineText2').$on('change', readyAddContact);
    fd.field('Project_x0020_Manager_x0020_Look').disabled = true;
    fd.field('DropDown1').value = 'All';
    fd.field('DropDown4').value = 'Open POs';
    fd.field('DropDown5').value = 'On Rent';
    readyAddContractor();
    readyAddContact();
    filterOIL();
    filterQAQCLists();
    setMulti();
    fd.field('DefaultFrom').ready().then(filterDefaultFrom);
    fd.field('DefaultSubmitTo').ready().then(filterDefaultSubmitTo);
    fd.field('DefaultRFITpo').ready().then(filterDefaultRFITpo);
    fd.field('DefaultPCOTo').ready().then(filterDefaultPCOTo);
    fd.field('Drawing_x0020_Group_x0020_Filter').ready().then(drawingGrpFilter);
    $(fd.control('DailyLog').$el).find('.btn').hide()
    var GMMtxt = fd.field('Middle_x0020_Markup').value;
    var LMMtxt = fd.field('LaborMiddleMarkup').value;
    var EMMtxt = fd.field('EquipmentMiddleMarkup').value;
    var MMMtxt = fd.field('MaterialMiddleMarkup').value;
    var SMMtxt = fd.field('SubMiddleMarkup').value;
    var LAMtxt = fd.field('LaborAllowableMarkup').value;
    var EAMtxt = fd.field('EquipmentAllowableMarkup').value;
    var MAMtxt = fd.field('MaterialAllowableMarkup').value;
    var SAMtxt = fd.field('SubAllowableMarkup').value;
    var CompSTtxt = fd.field('ComSTTot').value;
    var CompOTtxt = fd.field('ComOTTot').value;
    var CompDTtxt = fd.field('ComDTTot').value;
    fd.field('Number1').value = Number(GMMtxt.replace(/[^0-9\.-]+/g,""));
    fd.field('Number2').value = Number(LMMtxt.replace(/[^0-9\.-]+/g,""));
    fd.field('Number3').value = Number(EMMtxt.replace(/[^0-9\.-]+/g,""));
    fd.field('Number4').value = Number(MMMtxt.replace(/[^0-9\.-]+/g,""));
    fd.field('Number5').value = Number(SMMtxt.replace(/[^0-9\.-]+/g,""));
    fd.field('Number6').value = Number(LAMtxt.replace(/[^0-9\.-]+/g,""));
    fd.field('Number7').value = Number(EAMtxt.replace(/[^0-9\.-]+/g,""));
    fd.field('Number8').value = Number(MAMtxt.replace(/[^0-9\.-]+/g,""));
    fd.field('Number9').value = Number(SAMtxt.replace(/[^0-9\.-]+/g,""));
    fd.field('Number10').value = Number(CompSTtxt.replace(/[^0-9\.-]+/g,""));
    fd.field('Number11').value = Number(CompOTtxt.replace(/[^0-9\.-]+/g,""));
    fd.field('Number12').value = Number(CompDTtxt.replace(/[^0-9\.-]+/g,""));
    fd.control('PhaseList').widget.hideColumn('PhaseCopy');
    fd.control('PhaseList').widget.hideColumn('PhaseOrigNumber');
    fd.control('PhaseList').widget.hideColumn('Project');  
        
    fd.field('DropDown1').$on('change', filterRFIs);
    fd.field('DropDown2').$on('change', filterOIL);
    fd.field('DropDown3').$on('change', filterQAQCLists);
    fd.field('DropDown4').$on('change', POView);
    fd.field('DropDown5').$on('change', RentalView);
    fd.field('Drawing_x0020_Group_x0020_Filter').$on('change', filterDrawings);
    
    fd.control('Drawings').ready().then(function() {
        fd.field('SingleLineText4').value = fd.control('Drawings').filter;
        fd.field('Drawing_x0020_Group_x0020_Filter').value = '';
    });
    
    fd.field('SingleLineText9').$on('change', function() {
        fd.control('Text15').text = 'Categories for ' + fd.field('SingleLineText9').value;
        categoryFilter();
    });
    
    fd.control('Drawings').templates = {
        File: function(ctx) {
            var value = ctx.row.File;
            if (!value) {
                return '';
            }
                    return '<a target="_blank" data-interception="off" ' +
                        'onclick="window[\'' + ctx.openDialogFuncName + '\'](\'' + value + '\'); return false;" ' +
                        'href="' + value + '">' + '<i data-icon-name="PageSolid" class="ms-Icon ms-Icon--PageSolid" style="vertical-align: middle;"></i>' + '</a>';
        }
    }
    
    fd.control('PreJobConference').ready().then(function(dpj) {
        $(fd.control('PreJobConference').$el).find('.btn').hide();
         //replace with the Forms Set ID for view 2
        selectFormSetDpj(dpj, 'c609f85d-b552-4a58-9c9e-a571018ad6da');
    });
    
    fd.control('ProjPresentation').ready().then(function(dpp) {
        $(fd.control('ProjPresentation').$el).find('.btn').hide();
        selectFormSetDpp(dpp, '');
    });
    
    fd.control('progMeetings').ready().then(function(dpm) {
        $(fd.control('progMeetings').$el).find('.btn').hide();
        selectFormSetDpm(dpm, '498fceed-2a24-4df1-ab54-bf5ec177d8c6');
    });

    fd.control('Permits').ready().then(function(perm) {
        $(fd.control('Permits').$el).find('.btn').hide();
        selectFormSetperm(perm, 'cbabd89c-c15d-4012-81c7-38763f04e14e');
    });
    
    fd.control('execMeetings').ready().then(function(dem) {
        $(fd.control('execMeetings').$el).find('.btn').hide();
        selectFormSetDem(dem, '6060228e-9895-4a2f-9c88-69329f7ac711');
        $($(fd.control('execMeetings').$el).find('col')[3]).attr("style","width:100px");
        $($(fd.control('execMeetings').$el).find('col')[4]).attr("style","width:100px");
        $($(fd.control('execMeetings').$el).find('col')[5]).attr("style","width:100px");
        $($(fd.control('execMeetings').$el).find('col')[6]).attr("style","width:100px");
    });

2nd post

fd.field('ProjectContactLookUp').ready().then(function() {
    fd.field('ProjectContractorLookUp').$on('change', function(){
        //alert(fd.field('ProjectContractorLookUp').value.LookupId);
        filterProjectContacts();
        readyAddContact();
        fd.field('ProjectContactLookUp').value = null;
    });
    fd.field('ProjectContractorLookUp').ready().then(function(field){
        filterProjectContacts(field.value);
    });
});
fd.field('ProjectContractorLookUp').ready().then(filterProjectContractors);
fd.field('CustomerLookup').ready().then(orderCustomer);
fd.field('CustomerLookup').$on('change', function (customer) {
    fd.field('Customer').value = customer.LookupValue;
});

fd.field('RespContact').ready().then(function() {
    fd.field('RespContractor').$on('change', function(value3) {
        filterRespPerson(value3);
        fd.field('RespContact').value = null;
    });
    
    fd.field('RespContractor').ready().then(function(field) {
        filterRespPerson(field.value);
    });
});

$(fd.control('OpenItemsOIL').$el).find('.btn').hide();
$(fd.control('AllOil').$el).find('.btn').hide();
$(fd.control('PastDueOIL').$el).find('.btn').hide();
$(fd.control('PipeTest').$el).find('.btn').hide();

fd.control('PastDueOIL').$on('edit', function(editData) {
    var perFilter = ''
    editData.field('Responsible_x0020_Contractor').filter = 'Project/Id eq ' + fd.itemId;
    editData.field('Responsible_x0020_Contractor').useCustomFilterOnly = true;
    editData.field('Responsible_x0020_Person').useCustomFilterOnly = true;
    editData.field('Responsible_x0020_Person').disabled = true;
    editData.field('Responsible_x0020_Contractor').$on('change', function(value) {
        if (!value) {
            editData.field('Responsible_x0020_Person').value = null;
            editData.field('Responsible_x0020_Person').disabled = true;
        } else {
            editData.field('Responsible_x0020_Person').disabled = false;
            perFilter = "ProjectContractorId eq '" + value.Id + "'";
            editData.field('Responsible_x0020_Person').filter = perFilter;
            editData.field('Responsible_x0020_Person').widget.dataSource.read()
        }
    });
    editData.field('Complete').$on('change', function(value) {
        if (value) {
            editData.field('MeetingCompleted').value = fd.itemId;
        } else {
            editData.field('MeetingCompleted').value = null;
        }
    });
});

fd.control('AllOil').$on('edit', function(editData) {
    var perFilter = ''
    editData.field('Responsible_x0020_Contractor').filter = 'Project/Id eq ' + fd.itemId;
    editData.field('Responsible_x0020_Contractor').useCustomFilterOnly = true;
    editData.field('Responsible_x0020_Person').useCustomFilterOnly = true;
    editData.field('Responsible_x0020_Person').disabled = true;
    editData.field('Responsible_x0020_Contractor').$on('change', function(value) {
        if (!value) {
            editData.field('Responsible_x0020_Person').value = null;
            editData.field('Responsible_x0020_Person').disabled = true;
        } else {
            editData.field('Responsible_x0020_Person').disabled = false;
            perFilter = "ProjectContractorId eq '" + value.Id + "'";
            editData.field('Responsible_x0020_Person').filter = perFilter;
            editData.field('Responsible_x0020_Person').widget.dataSource.read()
        }
    });
    editData.field('Complete').$on('change', function(value) {
        if (value) {
            editData.field('MeetingCompleted').value = fd.itemId;
        } else {
            editData.field('MeetingCompleted').value = null;
        }
    });
});    

fd.control('OpenItemsOIL').$on('edit', function(editData) {
    var perFilter = ''
    editData.field('Responsible_x0020_Contractor').filter = 'Project/Id eq ' + fd.itemId;
    editData.field('Responsible_x0020_Contractor').useCustomFilterOnly = true;
    editData.field('Responsible_x0020_Person').useCustomFilterOnly = true;
    editData.field('Responsible_x0020_Person').disabled = true;
    editData.field('Responsible_x0020_Contractor').$on('change', function(value) {
        if (!value) {
            editData.field('Responsible_x0020_Person').value = null;
            editData.field('Responsible_x0020_Person').disabled = true;
        } else {
            editData.field('Responsible_x0020_Person').disabled = false;
            perFilter = "ProjectContractorId eq '" + value.Id + "'";
            editData.field('Responsible_x0020_Person').filter = perFilter;
            editData.field('Responsible_x0020_Person').widget.dataSource.read()
        }
    });
    editData.field('Complete').$on('change', function(value) {
        if (value) {
            editData.field('MeetingCompleted').value = fd.itemId;
        } else {
            editData.field('MeetingCompleted').value = null;
        }
    });
});

fd.control('PhaseList').$on('edit', function(editData) {
    editData.field('Modifier').filter = "Project/Id eq '" + fd.field("ID").value + "'";
    editData.field('Modifier').useCustomFilterOnly = true;
    editData.field('PhaseLU').$on('change', function(value) {
        var phaseCopy = editData.field('PhaseLU').value.LookupValue
        var phaseID = editData.field('PhaseLU').value.LookupId
        editData.field('PhaseCopy').value = phaseCopy;
        sp.web.lists.getByTitle('Phase List').items.getById(phaseID).select("Title", "Number").get().then( function (items) {
            var phaseNum = items.Number;
            editData.field('PhaseOrigNumber').value = phaseNum
            editData.field('PhaseNumber').value = phaseNum
        });
    });
    editData.field('Modifier').$on('change', function(value) {
        if (editData.field('PhaseLU').value == null) {
            alert('Please select the Phase first');
            editData.field('Modifier').value = '';
            editData.field('PhaseNumber').value = '';                
        } else {
            if (value != null) {
                var modID = editData.field('Modifier').value.LookupId;
                var phaseValue = editData.field('PhaseLU').value.LookupValue;
                var modValue = editData.field('Modifier').value.LookupValue;
                editData.field('PhaseCopy').value = phaseValue + ', ' + modValue;
            } else {
                editData.field('PhaseCopy').value = editData.field('PhaseLU').value.LookupValue;
            };
            var t1 = editData.field('PhaseNumber').value;
            var t2 = t1.substring(0,1);
            var t3 = t1.substring(2,4);
            sp.web.lists.getByTitle('ModPhaseAppends').items.getById(modID).select("Title", "Identifier/ID").expand("Identifier").get().then( function (item) {
                var modiID = item.Identifier.ID
                sp.web.lists.getByTitle('Modifier').items.getById(modiID).select("Title").get().then( function (itemM) {
                    editData.field('PhaseNumber').value = t2 + itemM.Title + t3;
                });
            });
        }
    });
});

if (dtDocs.widget) {
    setRootFolder();
} else {
    dtDocs.$on('ready', function() {
        setRootFolder();
    });
}
fd.control('AllRFIs').dialogOptions = {
    width: 1024,
    height: 720
}
fd.control('OpenPOs').dialogOptions = {
    width: 1024,
    height: 720
}
fd.control('DailyLog').dialogOptions = {
    width: 1024,
    height: 720
}
fd.control('PastDuePOs').dialogOptions = {
    width: 1024,
    height: 720
}
fd.control('ProjPresentation').dialogOptions = {
    width: 1024,
    height: 720
}
fd.control('MaterialPurchasing').dialogOptions = {
    width: 1024,
    height: 720
}    
fd.control('EquipmentOrders').dialogOptions = {
    width: 1024,
    height: 720
}
fd.control('LateReturn').dialogOptions = {
    width: 1024,
    height: 720
}
fd.control('AllRentals').dialogOptions = {
    width: 1024,
    height: 720
}
fd.control('execMeetings').dialogOptions = {
    width: 1024,
    height: 720
}
fd.control('TimeSheet').dialogOptions = {
    width: 1024,
    height: 720
}
fd.control('PipeTest').dialogOptions = {
    width: 1024,
    height: 720
}
fd.control('Permits').dialogOptions = {
    width: 1024,
    height: 720
}
fd.control('RFIs').dialogOptions = {
    width: 1024,
    height: 720
}
fd.control('progMeetings').dialogOptions = {
    width: 1024,
    height: 720
}
fd.control('PreJobConference').dialogOptions = {
    width: 1024,
    height: 720
}
fd.control('RFIPastDue').dialogOptions = {
    width: 1024,
    height: 720
}
fd.control('RFIDueInNextWeek').dialogOptions = {
    width: 1024,
    height: 720
}
fd.control('RFIHighPriority').dialogOptions = {
    width: 1024,
    height: 720
}
fd.control('RFIMoreInfo').dialogOptions = {
    width: 1024,
    height: 720
}
fd.control('RFIAnswered').dialogOptions = {
    width: 1024,
    height: 720
}
fd.control('Drawings').dialogOptions = {
    width: 1024,
    height: 720
}
fd.control('CategoryList').dialogOptions = {
    width: 1024,
    height: 720
}    
fd.control('Fabrications').dialogOptions = {
    width: 1024,
    height: 720
}

function setRootFolder(){
    dtDocs.rootFolder = String(combo);
}

fd.control('Submittals').dialogOptions = {
	width: 1024,
	height: 720
	}
fd.control('PCOs').dialogOptions = {
	width: 1280,
	height: 720
	}

$(fd.field('IsInFlow').$parent.$el).hide();
  
fd.control('Modifiers').ready().then(function(dt) {
    dt.buttons[0].text = 'Add Modifier';
});

setInterval(styleExecMeeting, 1000);
styleExecMeeting();
setInterval(styleRFITables, 1000);
styleRFITables();
setInterval(styleOIL, 1000);
styleOIL();

function styleOIL () {
    fd.control('AllOil').ready().then(function(dt) {
        dt.buttons[0].text = 'Add Item';
        var value = dt.widget.dataItems();
        var row = $(dt.$el).find('tr');
        
        if(value){
            $.getScript('https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment-with-locales.js')
            .then(function() {
                for (var i = 0; i < value.length; i++){
                    var m = moment(new Date());
                    var b = moment(value[i].DateDue)
                    var d = b.diff(m, 'days');
                    //console.log('Complete: ' + value[i].Complete + ' Date Due: ' + b + ' Difference in Days: ' + d);
                    if (d < 0 && value[i].Complete == 'No') {
                        $(row[i+1].cells[5]).attr("style","border-bottom:2px solid #ff6666; background-color:#ffb3b3")
                    } else if ( d >= 0 && d <=7 && value[i].Complete == 'No') {
                        $(row[i+1].cells[5]).attr("style","border-bottom:2px solid #66ff66; background-color:#b3ffb3")
                    }
                }
            });
        };
    });
    fd.control('OpenItemsOIL').ready().then(function(dt) {
        dt.buttons[0].text = 'Add Item';
        var value = dt.widget.dataItems();
        var row = $(dt.$el).find('tr');
        
        if(value){
            $.getScript('https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment-with-locales.js')
            .then(function() {
                for (var i = 0; i < value.length; i++){
                    var m = moment(new Date());
                    var b = moment(value[i].DateDue)
                    var d = b.diff(m, 'days');
                    if (d < 0 && value[i].Complete == 'No') {
                        $(row[i+1].cells[5]).attr("style","border-bottom:2px solid #ff6666; background-color:#ffb3b3")
                    } else if ( d >= 0 && d <=7 && value[i].Complete == 'No') {
                        $(row[i+1].cells[5]).attr("style","border-bottom:2px solid #66ff66; background-color:#b3ffb3")
                    }
                }
            });
        };
    });
    fd.control('PastDueOIL').ready().then(function(dt) {
        dt.buttons[0].text = 'Add Item';
        var value = dt.widget.dataItems();
        var row = $(dt.$el).find('tr');
        
        if(value){
            console.log(value);
            $.getScript('https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment-with-locales.js')
            .then(function() {
                for (var i = 0; i < value.length; i++){
                    var m = moment(new Date());
                    var b = moment(value[i].DateDue)
                    var d = b.diff(m, 'days');
                    if (d < 0 && value[i].Complete == 'No') {
                        $(row[i+1].cells[5]).attr("style","border-bottom:2px solid #ff6666; background-color:#ffb3b3")
                    } else if ( d >= 0 && d <=7 && value[i].Complete == 'No') {
                        $(row[i+1].cells[5]).attr("style","border-bottom:2px solid #66ff66; background-color:#b3ffb3")
                    }
                }
            });
        };
    });
}
                        

function styleRFITables () {
    fd.control('AllRFIs').ready().then(function(dt) {
        dt.buttons[0].text = 'Add RFI';
        var value = dt.widget.dataItems();
        var row = $(dt.$el).find('tr');
        
        if(value){
            $.getScript('https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment-with-locales.js')
            .then(function() {
                for (var i = 0; i < value.length; i++){
                    var m = moment(new Date());
                    var b = moment(value[i].Date_x0020_Due);
                    var d = b.diff(m, 'days');
                    if (d < 0 && value[i].RFI_x0020_Status != '(3) Closed') {
                        $(row[i+1].cells[4]).attr("style","border-bottom:2px solid #ff6666; background-color:#ffb3b3")
                    } else if (d >= 0 && d <= 7 && value[i].RFI_x0020_Status != '(3) Closed') {
                        $(row[i+1].cells[4]).attr("style","border-bottom:2px solid #66ff66; background-color:#b3ffb3")
                    }
                }
            });
        }
    });
    fd.control('RFIs').ready().then(function(dt) {
        dt.buttons[0].text = 'Add RFI';
        var value = dt.widget.dataItems();
        var row = $(dt.$el).find('tr');
        
        if(value){
            $.getScript('https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment-with-locales.js')
            .then(function() {
                for (var i = 0; i < value.length; i++){
                    var m = moment(new Date());
                    var b = moment(value[i].Date_x0020_Due);
                    var d = b.diff(m, 'days');
                    if (d < 0 && value[i].RFI_x0020_Status != '(3) Closed') {
                        $(row[i+1].cells[4]).attr("style","border-bottom:2px solid #ff6666; background-color:#ffb3b3")
                    } else if (d >= 0 && d <= 7 && value[i].RFI_x0020_Status != '(3) Closed') {
                        $(row[i+1].cells[4]).attr("style","border-bottom:2px solid #66ff66; background-color:#b3ffb3")
                    }
                }
            });
        }
    });
    fd.control('RFIPastDue').ready().then(function(dt) {
        dt.buttons[0].text = 'Add RFI';
        var value = dt.widget.dataItems();
        var row = $(dt.$el).find('tr');
        
        if(value){
            $.getScript('https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment-with-locales.js')
            .then(function() {
                for (var i = 0; i < value.length; i++){
                    var m = moment(new Date());
                    var b = moment(value[i].Date_x0020_Due);
                    var d = b.diff(m, 'days');
                    if (d < 0 && value[i].RFI_x0020_Status != '(3) Closed') {
                        $(row[i+1].cells[4]).attr("style","border-bottom:2px solid #ff6666; background-color:#ffb3b3")
                    } else if (d >= 0 && d <= 7 && value[i].RFI_x0020_Status != '(3) Closed') {
                        $(row[i+1].cells[4]).attr("style","border-bottom:2px solid #66ff66; background-color:#b3ffb3")
                    }
                }
            });
        }    
    });
    fd.control('RFIDueInNextWeek').ready().then(function(dt) {
        dt.buttons[0].text = 'Add RFI';
        var value = dt.widget.dataItems();
        var row = $(dt.$el).find('tr');
        
        if(value){
            $.getScript('https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment-with-locales.js')
            .then(function() {
                for (var i = 0; i < value.length; i++){
                    var m = moment(new Date());
                    var b = moment(value[i].Date_x0020_Due);
                    var d = b.diff(m, 'days');
                    if (d < 0 && value[i].RFI_x0020_Status != '(3) Closed') {
                        $(row[i+1].cells[4]).attr("style","border-bottom:2px solid #ff6666; background-color:#ffb3b3")
                    } else if (d >= 0 && d <= 7 && value[i].RFI_x0020_Status != '(3) Closed') {
                        $(row[i+1].cells[4]).attr("style","border-bottom:2px solid #66ff66; background-color:#b3ffb3")
                    }
                }
            });
        } 
    });
    fd.control('RFIHighPriority').ready().then(function(dt) {
        dt.buttons[0].text = 'Add RFI';
        var value = dt.widget.dataItems();
        var row = $(dt.$el).find('tr');
        
        if(value){
            $.getScript('https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment-with-locales.js')
            .then(function() {
                for (var i = 0; i < value.length; i++){
                    var m = moment(new Date());
                    var b = moment(value[i].Date_x0020_Due);
                    var d = b.diff(m, 'days');
                    if (d < 0 && value[i].RFI_x0020_Status != '(3) Closed') {
                        $(row[i+1].cells[4]).attr("style","border-bottom:2px solid #ff6666; background-color:#ffb3b3")
                    } else if (d >= 0 && d <= 7 && value[i].RFI_x0020_Status != '(3) Closed') {
                        $(row[i+1].cells[4]).attr("style","border-bottom:2px solid #66ff66; background-color:#b3ffb3")
                    }
                }
            });
        }
    });
    fd.control('RFIMoreInfo').ready().then(function(dt) {
        dt.buttons[0].text = 'Add RFI';
        var value = dt.widget.dataItems();
        var row = $(dt.$el).find('tr');
        
        if(value){
            $.getScript('https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment-with-locales.js')
            .then(function() {
                for (var i = 0; i < value.length; i++){
                    var m = moment(new Date());
                    var b = moment(value[i].Date_x0020_Due);
                    var d = b.diff(m, 'days');
                    if (d < 0 && value[i].RFI_x0020_Status != '(3) Closed') {
                        $(row[i+1].cells[4]).attr("style","border-bottom:2px solid #ff6666; background-color:#ffb3b3")
                    } else if (d >= 0 && d <= 7 && value[i].RFI_x0020_Status != '(3) Closed') {
                        $(row[i+1].cells[4]).attr("style","border-bottom:2px solid #66ff66; background-color:#b3ffb3")
                    }
                }
            });
        }
    });
}

$(fd.control('DailyLog').$el).find('.btn').hide();
fd.control('RFIAnswered').ready().then(function(dt) {
    dt.buttons[0].text = 'Add RFI';
});

fd.control('MaterialPurchasing').ready().then(function(dt) {
    dt.buttons[0].text = 'New Purchase Order';
});
fd.control('OpenPOs').ready().then(function(dt) {
    dt.buttons[0].text = 'New Purchase Order';
});
fd.control('PastDuePOs').ready().then(function(dt) {
    dt.buttons[0].text = 'New Purchase Order';
});
fd.control('EquipmentOrders').ready().then(function(dt) {
    dt.buttons[0].text = 'Add Equipment';
});
fd.control('LateReturn').ready().then(function(dt) {
    dt.buttons[0].text = 'Add Equipment';
});
fd.control('AllRentals').ready().then(function(dt) {
    dt.buttons[0].text = 'Add Equipment';
});
fd.control('Submittals').ready().then(function(dt) {
    dt.buttons[0].text = 'Log Submittal';
});
fd.control('TimeSheet').ready().then(function(dt) {
    dt.buttons[0].text = 'Add Time Sheet';
});
});


fd.spSaved(function(result) {
result.RedirectUrl = null;
setTimeout(function(){ fd._showAlert(); }, 6000);
});

Capture

Everything appeared to be working when I took the console screen shot but those are the same errors I always tend to get.

Hello @cwalter2,

You need to debug your code, please find suggestions in this post:

I can only give you some suggestions:

  1. Use RequireJS library to load external scripts, thus you can remove window.define = null; line. Please find the code example in * Work with Date and Time fields article.

  2. If there is no value selected in the lookup field, you get the error:

function filterProjectContacts () {
    //alert('change caught');
    var contractorId = fd.field('ProjectContractorLookUp').value.Contractor.Id;
    //alert(contractorId);
    fd.field('ProjectContactLookUp').filter = 'CLCompany/Id eq ' + contractorId + " and CLActive eq 'Active'";
    fd.field('ProjectContactLookUp').orderBy = {field: 'CLDispName', asc: true};
    fd.field('ProjectContactLookUp').widget.dataSource.read();
}

You can add a condition to check if any value is selected to prevent errors.

function filterProjectContacts () {

if(fd.field('ProjectContractorLookUp').value){
    var contractorId = fd.field('ProjectContractorLookUp').value.Contractor.Id;
    //alert(contractorId);
    fd.field('ProjectContactLookUp').filter = 'CLCompany/Id eq ' + contractorId + " and CLActive eq 'Active'";
    fd.field('ProjectContactLookUp').orderBy = {field: 'CLDispName', asc: true};
    fd.field('ProjectContactLookUp').widget.dataSource.read();
}
}

3.

@mnikitina,

Thank you for your help. I am down to two errorsL

What would the first one refer to?
I assume the second one has nothing to do with the custom forms?

Thank you for your help.

Hello @cwalter2,

Yes, the second error is not related to Forms.

The first error is not referred to any part of the code that you've shared, but I can't be 100% sure. In any case, as long as the code works as expected, you can ignore it.

Thank you @mnikitina. I will keep an eye on the form and report back if I run into any of the same or similar issues as before.

So here is an example of an issue I continue to experience:
Capture

The button circled in blue is supposed to be hidden. As you can see above I use the following code:
$(fd.control('Contacts').$el).find('.btn').hide();

Sometimes it is hidden, while others such as this time it is not. Can you shed some light?

Hello @cwalter2,

It is better to make sure that List or Library control is ready and then hide buttons based on the icon type.

fd.spRendered(function() {
    fd.control('SPDataTable1').ready().then(function(dt) {
        dt.buttons.forEach(function(button){
            if(button.icon == "Add") {
                button.visible = false
            }
        });
    });
});

Thank you @mnikitina, that makes sense. I have made the changes and will continue to monitor!

1 Like